Files
2026-04-23 23:39:18 +02:00

65 lines
2.0 KiB
Markdown

# AGENT.md - Guide SaaS Multi-Tenant
Version: 3.0
## But
Decrire l'architecture cible du monorepo SaaS pour bot Discord multi-tenant.
## Vue d'ensemble
- Stack backend: Node.js + TypeScript + Express + PostgreSQL + Redis + BullMQ.
- Bot runtime: Discord.js avec gestion dynamique multi-instance.
- Frontend: Next.js App Router.
- Structure: monorepo `apps/*` + `packages/*`.
## Organisation des dossiers
- `apps/api/`
- OAuth2 Discord, JWT cookie, routes multi-tenant, validation token bot, publication jobs BullMQ.
- `apps/bot/`
- BotManager dynamique (`Map<botId, Client>`), worker de controle (`start/stop/restart`).
- `apps/web/`
- Dashboard utilisateur (login, liste bots, ajout bot, actions runtime).
- `packages/shared/`
- Types partages, constantes queue, helpers Redis namespacing, chiffrement token AES-GCM.
- `database/migrations/`
- SQL versionne (`schema_migrations`) avec schema multi-tenant.
## Principes d'architecture
- Multi-tenant strict:
- toutes les requetes de lecture/ecriture passent par `tenant_id`.
- tables critiques liees a `tenant_id` et/ou `owner_user_id`.
- Pas de secret en clair:
- token bot chiffre en DB (`token_ciphertext`, `token_iv`, `token_tag`).
- Controle runtime decouple:
- API publie des jobs, bot manager consomme et execute.
- Separation responsabilites:
- API: auth + orchestration.
- Bot: runtime Discord.
- Web: UX dashboard.
## Conventions de code
- TypeScript strict.
- Exports nommes.
- Erreurs API explicites et codes HTTP coherents.
- Logs sans fuite de secrets.
## Workflow recommande
1. Ajouter/adapter migration SQL dans `database/migrations`.
2. Adapter repositories API/Bot avec filtre tenant.
3. Ajouter endpoint API + validation zod.
4. Brancher action queue si runtime impacte.
5. Mettre a jour le dashboard web.
6. Valider `npm run typecheck` puis `docker compose up -d --build`.
## Securite
- Ne jamais committer `.env`.
- Garder `TOKEN_ENCRYPTION_KEY` hors depot.
- Appliquer `httpOnly` + `sameSite` sur cookie session.
- Eviter les logs de payloads sensibles (token, secrets).