# Solution Structure The solution uses a minimal project structure with four projects in a single deployable. ## Project Layout ``` NEW/ ├── JdeScoping.sln ├── src/ │ ├── JdeScoping.Host/ # ASP.NET Core host + Blazor server │ │ ├── Program.cs # Entry point, service configuration │ │ ├── Controllers/ # API endpoints │ │ ├── Hubs/ # SignalR hubs │ │ ├── BackgroundServices/ # Search processor, data sync │ │ └── wwwroot/ # Blazor WASM published output │ │ │ ├── JdeScoping.Client/ # Blazor WebAssembly UI │ │ ├── Pages/ # Razor pages │ │ ├── Components/ # Reusable Radzen components │ │ ├── Services/ # HTTP + SignalR clients │ │ └── wwwroot/ # Static assets │ │ │ ├── JdeScoping.Core/ # Shared business logic │ │ ├── Models/ # Domain models (WorkOrder, Search, etc.) │ │ ├── Interfaces/ # Repository/service contracts │ │ ├── Repositories/ # Dapper data access │ │ └── Services/ # Business logic │ │ │ └── JdeScoping.Database/ # Database schema migrations │ ├── Scripts/ # Versioned SQL scripts │ │ ├── 001_CreateSearchTable.sql │ │ ├── 002_CreateDataUpdateTable.sql │ │ └── ... │ └── DatabaseMigrator.cs # DbUp runner │ └── tests/ └── JdeScoping.Tests/ # xUnit + Shouldly tests ├── Unit/ └── Integration/ ``` ## Project Responsibilities ### JdeScoping.Host The deployable Windows Service. Hosts the Blazor WASM client, REST API, SignalR hub, and background services. References `JdeScoping.Core` for business logic. ### JdeScoping.Client The Blazor WebAssembly UI. Compiled and published into Host's `wwwroot` folder. Uses Radzen Blazor for components. No direct database access - communicates via HTTP and SignalR. ### JdeScoping.Core Business logic and data access. Contains domain models, repository interfaces and implementations, and services. No ASP.NET dependencies - fully testable in isolation. ### JdeScoping.Database Database schema management using DbUp. Contains versioned SQL scripts that are embedded as resources and executed in order on application startup. Scripts are idempotent - DbUp tracks which scripts have run in a `SchemaVersions` table. ### JdeScoping.Tests Unit and integration tests using xUnit, Shouldly for assertions, and NSubstitute for mocking. ## Related Documentation - [Overview](./Overview.md) - [Host Project](./HostProject.md) - [Blazor Client](./BlazorClient.md) - [Core Project](./CoreProject.md) - [Database](./Database.md)