diff --git a/agents/knowledge-base.md b/agents/knowledge-base.md index af6abfc2a2..13bfe08e7c 100644 --- a/agents/knowledge-base.md +++ b/agents/knowledge-base.md @@ -420,6 +420,28 @@ export interface BookingDTO { } ``` +### DTO Location and Naming + +**Location**: All DTOs go in `packages/lib/dto/` + +**Naming conventions**: +- Base entity: `{Entity}Dto` (e.g., `BookingDto`) +- With relations: `{Entity}With{Relations}Dto` (e.g., `BookingWithAttendeesDto`) +- For specific projections: `{Entity}For{Purpose}Dto` (e.g., `BookingForConfirmationDto`) +- Avoid: `{Entity}Dto2`, `{Entity}DtoForHandler`, or other use-case-specific names + +**Enum/union pattern** – use string literal unions to stay ORM-agnostic: + +```typescript +// ✅ Good - ORM-agnostic string literal union +export type BookingStatusDto = "CANCELLED" | "ACCEPTED" | "REJECTED" | "PENDING"; + +// ❌ Bad - importing Prisma enum +import { BookingStatus } from "@calcom/prisma/client"; +``` + +**Type safety** – never use `as any` in DTO mapping functions. If types don't align, fix the mapping explicitly. + ### Prisma boundaries - **Allowed**: `packages/prisma`, repository implementations (`packages/features/**/repositories/*Repository.ts`), and low-level data access infrastructure.