1.7 KiB
1.7 KiB
@repo/core — Clean Architecture Core
Business logic package. All use cases, entities, interfaces, and DI live here.
Layers (dependencies point inward only)
entities/ → NOTHING (innermost, zero deps)
application/ → entities/ only
interface-adapters/→ application/, entities/
infrastructure/ → application/, entities/, @repo/cms-client, external libs
di/ → all internal layers
Import Rules
| Layer | Can import from | NEVER import from |
|---|---|---|
| entities/ | NOTHING | Everything else |
| application/ | entities/ only | infrastructure/, interface-adapters/ |
| interface-adapters/ | application/, entities/ | infrastructure/ |
| infrastructure/ | application/, entities/, @repo/cms-client | interface-adapters/, apps/* |
| di/ | All internal layers | apps/* |
DI Resolution Table
| Symbol | Interface | Production | Mock |
|---|---|---|---|
| IUsersRepository | IUsersRepository | PayloadUsersRepository (Plan 3) | MockUsersRepository |
| IArticlesRepository | IArticlesRepository | PayloadArticlesRepository (Plan 3) | MockArticlesRepository |
| IAuthenticationService | IAuthenticationService | BetterAuthService (future) | MockAuthenticationService |
| ITelemetryService | ITelemetryService | OTelSentryService (future) | MockTelemetryService |
Naming Conventions
- Models:
{name}.tswith Zod schema + type export - Errors:
{domain}.tswith Error subclasses - Interfaces:
{name}.repository.interface.tsor{name}.service.interface.ts - Use cases:
{verb}-{noun}.use-case.ts - Controllers:
{noun}.controller.ts - Infra:
{provider}-{name}.repository.tsormock-{name}.repository.ts - DI modules:
{domain}.module.ts
Running Tests
cd packages/core && pnpm vitest run