2.7 KiB
2.7 KiB
LoreMind - Document de Contexte et d'Architecture
1. Vision du Produit
LoreMind est une application web d'aide aux Maîtres de Jeu (JDR). Elle permet de centraliser la gestion de l'univers (Lore) et le suivi des campagnes. Fonctionnalité clé : Intégration d'un moteur IA capable de générer des pages de contenu complètes (PNJ, Villes, Quêtes) à partir de templates prédéfinis. Objectif final : Permettre l'export structuré de ces données vers FoundryVTT.
2. Stack Technologique Globale
L'application suit une architecture distribuée pour séparer les responsabilités :
- Frontend : Angular (Interface utilisateur, affichage du lore, formulaires de templates).
- Backend Core (Métier & Données) : Java (Spring Boot recommandé). Orchestre l'application, gère la persistance et l'export VTT.
- Backend IA (Cognitif) : Python. Dédié au traitement des LLM et à la génération de contenu selon les gabarits.
- Base de Données : PostgreSQL. Stockage relationnel classique, avec utilisation intensive du type
JSONBpour stocker les templates flexibles.
3. Architecture du Backend Java (Règles strictes)
Le développement du Backend Core doit IMPÉRATIVEMENT respecter le Domain-Driven Design (DDD) et l'Architecture Hexagonale (Ports et Adaptateurs).
3.1. Contextes Délimités (Bounded Contexts)
Le code doit être séparé selon ces domaines autonomes :
LoreContext: Gestion de l'encyclopédie de l'univers (Lieux, Factions, PNJ).CampaignContext: Suivi des sessions, actions des joueurs, chronologie.GenerationContext: Gestion des requêtes IA, traitement des templates et communication avec le Backend Python.
3.2. Règles d'Architecture Hexagonale
- Domaine (Core) : Contient les entités métier pures et les interfaces (Ports). Il ne doit avoir aucune dépendance technique (ni Spring, ni annotations JPA, ni base de données).
- Application (Use Cases) : Orchestre les flux de données (ex:
GenerateNpcUseCase). - Infrastructure (Adapters) : Implémente les interfaces du domaine (ex:
PostgresLoreRepository,PythonAiClient,RestControllers).
4. Directives pour l'IA (Windsurf)
- Utilise toujours le vocabulaire du domaine (Ubiquitous Language) dans le nommage des classes et méthodes (ex:
LoreNode,Template,Campaign). - Assure-toi que les entités du domaine ne soient jamais anémiques (la logique métier est dans l'entité, pas dans des services externes).
- Pour la base de données PostgreSQL, utilise la spécification JSONB dès qu'une structure de donnée est liée à un template modulable.
- Commente uniquement la logique métier complexe, évite les commentaires évidents.