svc-tenders Route Registration Input Map
Purpose
This note records the input shape at each register*Routes(...) boundary in services/svc-tenders/src/server.ts.
The goal is to make these distinctions obvious:
- dedicated child repository inputs
- composed transitional inputs
- route-support bundles
- shared shell-owned inputs
- real asymmetry where it exists
Labels used here:
VERIFIEDREALTRANSITIONALUNRESOLVED
Route modules
registerVacancyRoutes
Module:
Dedicated repository inputs:
readRepository: VacancyReadRepository
Dedicated non-repository inputs:
vacancyCommandHandlers: VacancyCommandHandlers
Support inputs:
support: VacancyRouteSupport
Composed/transitional inputs:
- none at the route-registration boundary
Shared shell inputs:
- auth/principal helpers and parsers arrive indirectly via
VacancyRouteSupport
Notes:
VERIFIED- public and owner/applicant route-time reads use the preferred vacancy read repository
- compatibility residue remains elsewhere, not in this registration boundary
registerAccommodationRoutes
Module:
Dedicated repository inputs:
accommodationReadRepository: AccommodationReadRepositoryaccommodationOwnerReadRepository: AccommodationOwnerReadRepository
Dedicated non-repository inputs:
accommodationCommandHandlers: AccommodationCommandHandlers
Support inputs:
support: AccommodationRouteSupport
Composed/transitional inputs:
- none at the route-registration boundary
Shared shell inputs:
- auth/principal helpers and parsers arrive indirectly via
AccommodationRouteSupport
Notes on asymmetry:
VERIFIED- this route group is intentionally asymmetric
- public listing/booking reads and owner listing reads do not share one preferred repository
- that asymmetry is real and should not be normalized away
registerIcpiRoutes
Module:
Dedicated repository inputs:
repository: IcpiRepositoryPort
Support inputs:
support: IcpiRouteSupport
Composed/transitional inputs:
- none
Shared shell inputs:
- low-level parser helpers arrive through the support bundle
Notes:
VERIFIED- this is one of the cleaner direct route-registration boundaries
registerButkhuziRoutes
Module:
Dedicated repository inputs:
repository: ButkhuziRepositoryPort
Support inputs:
support: ButkhuziRouteSupport
Composed/transitional inputs:
- none
Shared shell inputs:
- low-level parser helpers arrive through the support bundle
Notes:
VERIFIED- direct route-registration boundary
registerKesRoutes
Module:
Dedicated repository inputs:
- none
Composed/transitional inputs:
repository: KesRepositoryPort- backed by the mixed root services/svc-tenders/src/repository.ts
Support inputs:
support: KesRouteSupport
Shared shell inputs:
- parser helpers arrive via support
- KES ingress/security helpers arrive via support
Notes on unresolved boundary:
VERIFIEDTRANSITIONAL- KES routes are structurally isolated, but their durable repository input is still a slice of the mixed root repository
registerTenderRoutes
Module:
Dedicated repository inputs:
repository: TenderRouteRepositoryPort
Support inputs:
support: TenderRouteSupport
Composed/transitional inputs:
- none
Shared shell inputs:
- auth/principal helpers and parser helpers arrive through support
Notes:
VERIFIED- tender route registration is direct and clean at the repository boundary
registerTenderDeclarationRoutes
Module:
Dedicated repository inputs:
repository: TenderDeclarationRepositoryPort
Support inputs:
support: TenderDeclarationRouteSupport
Shared shell inputs:
declarationEvidenceStorage: DeclarationEvidenceStorage
Composed/transitional inputs:
- none at the repository boundary
Notes:
VERIFIED- this boundary is still direct even though it uses shell-owned upload/storage infrastructure
registerAuctionRoutes
Module:
Dedicated repository inputs:
repository: AuctionRouteRepositoryPort
Support inputs:
support: AuctionRouteSupport
Composed/transitional inputs:
- none
Shared shell inputs:
- auth/principal helpers and parser helpers arrive through support
Notes:
VERIFIED- auction read/admin route registration is direct at the repository boundary
registerAuctionDeclarationRoutes
Module:
Dedicated repository inputs:
- none as a single owned repository surface
Composed/transitional inputs:
repository: AuctionDeclarationRepositoryPort- locally composed in services/svc-tenders/src/server.ts
- mixes:
- declaration-owned methods from services/svc-tenders/src/declaration/repository.ts
- unresolved output-allocation methods from services/svc-tenders/src/repository/outputAllocations.ts
Support inputs:
support: AuctionDeclarationRouteSupport
Shared shell inputs:
declarationEvidenceStorage: DeclarationEvidenceStorage
Notes on unresolved boundary:
VERIFIEDTRANSITIONALUNRESOLVED- this is the clearest remaining composed route-registration input in the service shell
- the composition is real and should stay explicit
Current honest asymmetry
VERIFIED
The route-registration layer is not uniform, and that is correct:
- vacancy uses one preferred read repository plus command handlers
- accommodation uses two preferred read repositories plus command handlers
- ICPI and Butkhuzi are direct dedicated repository boundaries
- KES still uses a root-repository slice
- tender and auction read/admin routes are direct dedicated repository boundaries
- tender declaration is direct at the repository boundary but still uses shell-owned storage/upload infrastructure
- auction declaration is still composed and unresolved
Trying to force one uniform route-registration input shape here would hide real topology.