Back-office API for platform administrators: dashboard, user moderation, property moderation, transaction monitoring, fraud investigation, backups, archival, cleanup, API keys, and background-queue management.
| File | Purpose |
|---|---|
admin.controller.ts |
All /admin/* routes |
admin.service.ts |
Orchestration; delegates to Fraud, Backup, Transactions, Sessions, Archive, Cleanup |
admin-audit.interceptor.ts |
Writes an audit record for every admin action |
interceptors/admin-access-logging.interceptor.ts |
Access logging for admin routes |
queue/ |
BullMQ queue inspection and retry (/admin/queues) |
dto/admin.dto.ts |
Request DTOs |
- The whole controller is guarded by
JwtAuthGuard+RolesGuardwith@Roles(UserRole.ADMIN). Every route is admin-only; there are no per-route exceptions. AdminAuditInterceptoris applied at controller level, so every mutation is recorded with the acting admin's ID. Don't bypass it by calling services from another controller.- The permission matrix is in docs/RBAC_Permission_Matrix.md.
| Area | Routes |
| ------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Dashboard | GET /admin/dashboard |
| Users | GET /admin/users, PATCH /admin/users/:id, POST /admin/users/:id/block, POST /admin/users/:id/unblock |
| Property moderation | GET /admin/properties/moderation/queue, POST /admin/properties/:id/{approve,reject,flag}, POST /admin/properties/moderation/bulk |
| Transactions | GET /admin/transactions/monitoring, GET /admin/transactions/monitoring/summary, PATCH /admin/transactions/:id/status |
| Fraud | GET /admin/fraud/alerts[/summary | /:id], PATCH /admin/fraud/alerts/:id, POST /admin/fraud/alerts/:id/notes, POST /admin/fraud/alerts/:id/block-user, POST /admin/fraud/users/:id/scan, POST /admin/fraud/properties/:id/scan |
| Backups | GET /admin/backups[/status | /schedule], PUT /admin/backups/schedule, POST /admin/backups/run, POST /admin/backups/:id/restore, GET /admin/backups/:id/download |
| Archive | GET /admin/archive/{files,status}, POST /admin/archive/{run,restore} |
| Cleanup | GET /admin/cleanup/status, POST /admin/cleanup/run |
| Exports | DELETE /admin/exports/:filename |
| API keys | GET /admin/api-keys, POST /admin/api-keys/:id/{revoke,rotate} |
| Email | GET /admin/email/preview/:templateName (renders templates with sample data) |
| i18n | GET /admin/i18n/missing-keys |
| Queues | GET /admin/queues, GET /admin/queues/metrics, GET /admin/queues/:name/failed, POST /admin/queues/:name/jobs/:jobId/retry, POST /admin/queues/:name/failed/retry-all, DELETE /admin/queues/:name/jobs/:jobId |
Related docs: fraud, backup, docs/User_Management.md, docs/View_Audit_Logs.md.
QueueModule registers only the mail queue with BullMQ, so /admin/queues can only inspect queues that are registered there. To manage another queue (e.g. webhook-delivery), add it to BullModule.registerQueue(...) in queue/queue.module.ts.
POST /admin/backups/:id/restoreoverwrites the live database (see backup README). There is no confirmation step on the API.- Blocking a user (
/users/:id/block) and fraud blocking both setUser.isBlocked; unblocking via/users/:id/unblockclears both. - The email preview route embeds sample URLs such as
http://localhost:3000/.... That is expected and not a config leak.
admin-audit.interceptor.spec.ts, plus integration tests in test/admin/.