# 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.