# 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 `JSONB` pour 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.