eshop-full — projects reference
Every project below, in the order it's actually being built — not upstream's original list order.
eShop.slnx/eShop.Web.slnf only ever list what exists on disk today, so
dotnet build and CI never try to build a project that isn't real yet. See
System Architecture for the same information as a layer
diagram, and todo.md's "Still to do" table for the live flat list.
Shared
Linked-source utilities, not a .csproj — compiled directly into consuming projects.
EventBus
Transport-agnostic abstractions for publishing/consuming integration events.
EventBusRabbitMQ
The only IEventBus implementation today — a 3-layer Decorator chain over RabbitMQ.
eShop.ServiceDefaults
Aspire telemetry/health-check/resilience defaults, shared by every service via AddServiceDefaults().
IntegrationEventLogEF
EF Core-backed transactional outbox — all 7 source files reviewed, several real fixes.
Identity.API
Duende IdentityServer — the OIDC provider for the whole system. Quickstart UI converted straight to a JSON API; 129 source files, 91 tests.
eShop.AppHost: that ValidateAudience = true validates cleanly against real issued tokens, and freshly-generated EF Core migrations.Catalog.API
Product catalog — read-heavy, scales independently of everything else. Its entire domain-logic layer (model, EF Core infrastructure, integration events, AI embeddings) and the real v1/v2 API surface are on disk; only the real startup wiring remains.
Basket.API
Redis-backed ephemeral cart state — gRPC service contract.
Grpc.AspNetCore.Web middleware so the same service serves gRPC-Web for WebApp/WebBFF.Ordering.Domain
Domain model — the "D" in a domain-driven design split across three projects.
Ordering.Infrastructure
EF Core persistence for the order aggregate.
Ordering.API
The order-placement API surface — transactional consistency requirements, unlike Catalog/Basket.
Webhooks.API
Outbound webhook notifications for third-party integrations — Observer pattern over HTTP.
OrderProcessor
Queue-driven background worker reacting to order-lifecycle events.
PaymentProcessor
Queue-driven background worker, payment-side of the order lifecycle.
WebhookClient
Sample app demonstrating consuming Webhooks.API's outbound notifications.
WebApp
React storefront — deliberately not Blazor (upstream's choice). See Event Flow's judgment-call context.
WebBFF
New project, not in upstream — Backend-for-Frontend using Duende.BFF, keeps OAuth tokens server-side instead of in browser JS.
Identity.WebApp
New project, not in upstream — React frontend for Duende's Quickstart UI (Account/Consent/Device/Diagnostics/Grants), converted straight to a JSON API rather than added as Razor first. Hosted separately from Identity.API. All six areas built, wired into the router, and verified end-to-end with a real browser. A real Vite dev-proxy Host-header bug (breaking every Duende-triggered redirect: login, consent, logout) found and fixed along the way. Has its own frontend test suite now too — Vitest + React Testing Library.
ClientApp
Native .NET MAUI mobile client — unaffected by the React pivot.
eShop.AppHost
The Aspire orchestrator — references every other project, so it's deliberately added last.
tests/ (5 projects, framework already decided) and build/ tooling are the
last two rows in todo.md's flat list — but testing itself isn't deferred: every project
above marked Done already has full test coverage added in the same unit of work as
its source files. See Testing Strategy.