Modern clothing e-commerce built with .NET 10 and Angular 22 — Clean Architecture, CQRS/MediatR, PostgreSQL, JWT.
| Layer | Technology |
|---|---|
| Backend | .NET 10, ASP.NET Core Web API |
| Architecture | Clean Architecture, CQRS with MediatR, FluentValidation |
| Database | PostgreSQL 17, EF Core |
| Auth | JWT bearer tokens, BCrypt password hashing |
| Frontend | Angular 22 (standalone components, signals), Tailwind CSS |
| Tests | xUnit, FluentAssertions, NSubstitute, Testcontainers |
- Sign up / sign in with JWT
- Product gallery with category navigation — Men (pull, shirt, jeans…), Women (robe, dress, skirt…), Kids (shoes, t-shirt…)
- Product detail with size and colour variants
- Server-side cart (
panier) tied to the signed-in user - Admin area to create, edit and delete articles
backend/
Threadline.slnx solution (.NET 10 XML format)
Directory.Build.props shared build settings for every project
Directory.Packages.props central NuGet version management
.editorconfig formatting and analyzer severities
src/
Threadline.Domain/ entities, value objects, domain rules (no dependencies)
Threadline.Application/ CQRS handlers, DTOs, validators, abstractions
Threadline.Infrastructure/ EF Core, PostgreSQL, JWT, password hashing
Threadline.Api/ controllers, DI, middleware, OpenAPI
tests/
Threadline.Domain.UnitTests/
Threadline.Application.UnitTests/
Threadline.Api.IntegrationTests/
frontend/ Angular 22 client
docker-compose.yml PostgreSQL (+ pgAdmin)
Dependencies point inward only: Api → Infrastructure → Application → Domain.
ArchitectureTests in the unit-test projects fail the build if that rule is broken.
NuGet versions are declared once in Directory.Packages.props; project files reference
packages without a version. Warnings are errors, so a newly disclosed vulnerability in a
dependency breaks the build rather than passing silently.
Prerequisites: .NET 10 SDK, Node.js 22+, Docker.
1. Start the database
cp .env.example .env
docker compose up -dPostgres listens on localhost:5432 (user/password/database all default to threadline).
Optional pgAdmin on http://localhost:5050:
docker compose --profile tools up -d2. Create the database schema
dotnet ef database update --project backend/src/Threadline.Infrastructure --startup-project backend/src/Threadline.ApiRequires the EF tools on 10.x: dotnet tool update --global dotnet-ef.
3. Run the API
dotnet run --project backend/src/Threadline.Api- Health (process): http://localhost:5080/health/live
- Health (process + database): http://localhost:5080/health/ready
- OpenAPI document: http://localhost:5080/openapi/v1.json
4. Run the frontend (available from task 4.1)
npm start --prefix frontenddotnet test backend/Threadline.slnxIntegration tests spin up a throwaway PostgreSQL container via Testcontainers, so Docker must be running.
The build is split into 26 small tasks across 6 phases — see TASKS.md.
MIT