Remove the Order demo (entity/feature/repo/config/gRPC/proto) and the three pre-marketplace migrations; regenerate a fresh InitialBaseline migration. Stand up the REST surface (PingController + System/Ping CQRS) proving the Mediator -> behaviors -> OperationResult -> ApiResult envelope end to end. Close wiring gaps: register LoggingBehavior (outermost) and add the built-in rate limiter (per-IP global + otp/auth/sensitive policies), placed before authentication. Add current-user + audit plumbing: ICurrentUser (HttpContext + null impls), rename BaseEntity audit fields to CreatedAt/ModifiedAt (DateTimeOffset) + CreatedById/ModifiedById, stamped by a new AuditFieldInterceptor. Introduce five cross-cutting seams (IDateTimeProvider, IFieldEncryptor, ICacheService, IObjectStorage, INotificationDispatcher) with in-memory/local mocks registered via AddCrossCuttingSeams. Add Baya.Test.Foundation (encryptor, audit interceptor, ping handler) and update docs, contracts (swagger.v1.json), handoff, report, and mocks registry.
OpenAPI snapshots
The server already generates OpenAPI via NSwag (Swagger UI at /swagger, documents v1, v1.1).
This folder holds the published swagger.json snapshot(s) so the frontend can generate/verify types
without running the backend.
Backend: publish on every API-shipping phase
After adding/changing endpoints and confirming the build, export the OpenAPI document and commit it here
as swagger.v1.json (overwrite — git history is the version trail). Typical options:
- Run the API and save
GET /swagger/v1/swagger.jsontodev/contracts/openapi/swagger.v1.json, or - Use the NSwag CLI / build target the server already wires to emit the document.
Record in your handoff that the snapshot was refreshed. Keep it in sync with ../domains/*.md — the
markdown is the human contract, this JSON is the machine contract; they must agree.
Frontend: consume
Generate types from swagger.v1.json (e.g. an openapi-typescript-style step) or hand-write
src/services/{domain}/types.ts to match it. Either way, the wire shapes come from here — not from
guessing. Casing/format questions are resolved by this file.
Until the first API-shipping backend phase runs, this folder is empty by design.