prompts(backend): retarget enum rules at shared-types stage
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -104,38 +104,44 @@ Type and decorator rules:
|
||||
| `decimal` | `string` | `@IsString()` | serialize with Prisma Decimal |
|
||||
| `date` | `string` | `@IsString()` | serialize as ISO string |
|
||||
| `boolean` | `boolean` | `@IsBoolean()` | |
|
||||
| enum name | `string` | `@IsEnum(EnumName)` | |
|
||||
| enum name | `EnumName` (imported from `../../enums/<kebab>.enum`) | `@IsEnum(EnumName)` | Do not use `string` |
|
||||
|
||||
Nullability rules:
|
||||
|
||||
- every field that is not `is required` gets `@IsOptional()` before the type decorator
|
||||
- every generated DTO imports from `'class-validator'`
|
||||
|
||||
## Shared Enum Files
|
||||
## Shared Types
|
||||
|
||||
Enums referenced by DTOs across multiple modules MUST be generated as standalone files at:
|
||||
Shared TypeScript types are generated by the `shared-types` stage BEFORE
|
||||
`nest-entities` runs. Per-entity modules MUST import them; they must NEVER
|
||||
redefine them.
|
||||
|
||||
```
|
||||
server/src/enums/<EnumName>.enum.ts
|
||||
```
|
||||
Zones:
|
||||
|
||||
Example for `EquipmentStatus`:
|
||||
```ts
|
||||
// server/src/enums/equipment-status.enum.ts
|
||||
export enum EquipmentStatus {
|
||||
Active = 'Active',
|
||||
Repair = 'Repair',
|
||||
Reserve = 'Reserve',
|
||||
WriteOff = 'WriteOff',
|
||||
}
|
||||
```
|
||||
- `server/src/enums/<kebab-enum-name>.enum.ts` — one file per DSL enum
|
||||
- `server/src/shared/pagination.ts` — `PaginatedResponse<T>` and `ListQueryParams`
|
||||
- `server/src/shared/index.ts` — barrel for shared types
|
||||
|
||||
DTO files import the enum with path `../../enums/<enum-name>.enum` (two levels up from `modules/<kebab>/dto/`):
|
||||
Import conventions depend on the importing file's depth:
|
||||
|
||||
- From a module/controller/service file at `server/src/modules/<kebab>/<file>.ts`:
|
||||
```ts
|
||||
import { EquipmentStatus } from '../../enums/equipment-status.enum';
|
||||
import { PaginatedResponse, ListQueryParams } from '../../shared/pagination';
|
||||
```
|
||||
|
||||
Do NOT inline enum values into DTOs. Do NOT put enum files inside the module folder.
|
||||
- From a DTO file at `server/src/modules/<kebab>/dto/<file>.ts` (one level deeper):
|
||||
```ts
|
||||
import { EquipmentStatus } from '../../../enums/equipment-status.enum';
|
||||
import { PaginatedResponse, ListQueryParams } from '../../../shared/pagination';
|
||||
```
|
||||
|
||||
Enum-typed DTO fields MUST be declared with the actual enum type, NOT
|
||||
`string`. The enum is imported from the shared file above. `@IsEnum(EnumName)`
|
||||
still applies at runtime for validation. Because the DTO type matches the
|
||||
Prisma-generated enum type by name and by string values, service code can
|
||||
pass DTOs into Prisma without `as EnumName` casts.
|
||||
|
||||
## Auth Import Paths
|
||||
|
||||
|
||||
Reference in New Issue
Block a user