Imported from le-xot/games-movies-database (
backend/src/AGENTS.md). Install upstream withnpx skills add le-xot/games-movies-database --skill src. Copyright stays with the author.
BACKEND SOURCE KNOWLEDGE BASE
OVERVIEW
NestJS 12 API source directory. Boots Swagger, Drizzle, Redis rate limiting, and 21 feature modules.
STRUCTURE
backend/src/
├── main.ts # Swagger (/docs, /reference), cookieParser, CORS, prefix /api
├── app.module.ts # Root. Imports modules, ServeStatic, RateLimitGuard, EventEmitter
├── app.controller.ts # Health check. Reads package.json version via Bun.file()
├── database/ # DrizzleModule + DrizzleService (pg.Pool + drizzle)
├── enums/ # enums.names.ts: String constants for database enum types
├── utils/ # enviroments.ts (envalid, typo in filename), rate-limits.ts (presets)
└── modules/ # Feature modules (see modules/AGENTS.md for details)
WHERE TO LOOK
| Target | File/Path | Notes |
|---|---|---|
| API Docs | main.ts |
@nestjs/swagger + @scalar/nestjs-api-reference |
| App Config | app.module.ts |
Global guards, EventEmitter2, RateLimitGuard |
| Rate Limits | modules/rate-limit/ |
Redis fixed-window limiter; presets in utils/rate-limits.ts |
| Auth Logic | modules/auth/ |
@Global() AuthService, JWT cookie ('token') |
| DB Access | database/ |
Inject DrizzleService, use .db |
| Env Schema | utils/enviroments.ts |
Defines required vars for envalid |
| Real-time | modules/websocket/ |
Socket.io gateway for frontend updates |
CONVENTIONS
- Prefix: All routes automatically prefixed with
/apiviasetGlobalPrefix. - Validation: Global
ValidationPipewithtransform: trueandwhitelist: true. - Auth: Use
@User()decorator to accessrequest.user. - Guards:
AuthGuard(JWT),ApikeyGuard(TWIR header),RolesGuard(inline roles),RateLimitGuard(global Redis limiter). - Events:
EventEmitter2for cross-module updates (users, likes, records). - CORS: Restricted to
localhost:3000and:5173. - Runtime: Uses
Bun.file()inapp.controller.ts— requires Bun to run.
ANTI-PATTERNS
- Typo: Do not "fix"
utils/enviroments.tswithout updating every import. - Drizzle: Never instantiate a pg Pool outside
DrizzleService; always inject it. - Throttler:
@nestjs/throttlerwas removed — use@RateLimit()frommodules/rate-limit/. - Auth: Avoid manual JWT parsing. Use the provided guards and
@User()decorator.