# `dotnet-enterprise` — materialization manifest

```
dotnet/
├── LomaPortal.sln                              template  (renamed to __PROJECT_NAMESPACE__.sln)
├── Directory.Build.props                       template  (TargetFramework, Nullable enable, TreatWarningsAsErrors)
├── Directory.Packages.props                    template  (central package versions)
├── src/
│   ├── Api/
│   │   ├── Api.csproj                          template  (renamed to __PROJECT_NAMESPACE__.Api.csproj)
│   │   ├── Program.cs
│   │   ├── appsettings.json                    template  (no secrets)
│   │   ├── appsettings.Development.json        template
│   │   ├── Controllers/
│   │   │   ├── AuthController.cs
│   │   │   ├── UsersController.cs
│   │   │   ├── RolesController.cs
│   │   │   └── HealthController.cs
│   │   ├── Middleware/
│   │   │   ├── ExceptionMiddleware.cs
│   │   │   ├── RequestLoggingMiddleware.cs
│   │   │   └── CorrelationIdMiddleware.cs
│   │   └── Extensions/
│   │       ├── AuthenticationExtensions.cs
│   │       ├── SwaggerExtensions.cs
│   │       ├── CorsExtensions.cs
│   │       ├── HealthChecksExtensions.cs
│   │       └── OpenTelemetryExtensions.cs
│   ├── Application/
│   │   ├── Application.csproj                  template
│   │   ├── Auth/                               LoginCommand, RefreshCommand handlers
│   │   ├── Users/                              CRUD + queries
│   │   ├── Roles/
│   │   ├── Common/
│   │   │   ├── Behaviors/                      ValidationBehavior, LoggingBehavior
│   │   │   └── Mappings/
│   │   └── DependencyInjection.cs
│   ├── Domain/
│   │   ├── Domain.csproj                       template  (zero references except Shared)
│   │   ├── Entities/                           BaseEntity, AuditEntity, SoftDeletableEntity, User, Role, Permission
│   │   ├── ValueObjects/
│   │   └── Events/
│   ├── Infrastructure/
│   │   ├── Infrastructure.csproj               template
│   │   ├── Persistence/
│   │   │   ├── ApplicationDbContext.cs
│   │   │   └── Configurations/                 EF Core IEntityTypeConfiguration<T> per entity
│   │   ├── Auth/                               JwtService, RefreshTokenService, PasswordHasher, OtpService
│   │   ├── Storage/                            S3-compatible adapter
│   │   ├── Email/                              SmtpEmailService
│   │   ├── SignalR/
│   │   ├── Logging/                            Serilog → OTLP sink
│   │   └── DependencyInjection.cs
│   └── Shared/
│       ├── Shared.csproj                       template
│       ├── ApiResponse.cs
│       ├── PagedResponse.cs
│       ├── Result.cs
│       ├── Error.cs
│       ├── PaginationParams.cs
│       ├── SortingParams.cs
│       └── FilterParams.cs
└── tests/
    ├── Api.Tests/                              WebApplicationFactory + xUnit + FluentAssertions
    ├── Application.Tests/                      handler tests (no DB)
    └── Infrastructure.Tests/                   Testcontainers (Postgres + SQL Server)
```

After materialization, `_init.ps1` runs `dotnet restore` inside `dotnet/` so the new solution compiles. Real source lands in Phase 4.
