# Use Cases - Livre dont vous êtes le héros

**Version:** 1.0  
**Date:** 31 Décembre 2025

---

## Table des matières
1. [UC-001 : Inscription d'un nouvel utilisateur](#uc-001--inscription-dun-nouvel-utilisateur)
2. [UC-002 : Connexion à son compte](#uc-002--connexion-à-son-compte)
3. [UC-003 : Créer une nouvelle histoire](#uc-003--créer-une-nouvelle-histoire)
4. [UC-004 : Jouer en mode Choix Multiples](#uc-004--jouer-en-mode-choix-multiples)
5. [UC-005 : Jouer en mode Dialogue Libre](#uc-005--jouer-en-mode-dialogue-libre)
6. [UC-006 : Changer de mode de jeu en cours d'histoire](#uc-006--changer-de-mode-de-jeu-en-cours-dhistoire)
7. [UC-007 : Consulter le LoreBook](#uc-007--consulter-le-lorebook)
8. [UC-008 : Reprendre une histoire en cours](#uc-008--reprendre-une-histoire-en-cours)
9. [UC-009 : Publier son histoire](#uc-009--publier-son-histoire)
10. [UC-010 : Découvrir et lire des histoires publiées](#uc-010--découvrir-et-lire-des-histoires-publiées)
11. [UC-011 : Gérer ses histoires](#uc-011--gérer-ses-histoires)

---

## UC-001 : Inscription d'un nouvel utilisateur

### Acteur principal
Visiteur non inscrit

### Préconditions
- L'utilisateur n'a pas encore de compte
- L'utilisateur accède à la page d'inscription

### Flux nominal

1. L'utilisateur clique sur "Créer un compte" depuis la page d'accueil
2. Le système affiche le formulaire d'inscription contenant :
   - Champ "Pseudo"
   - Champ "Email"
   - Champ "Mot de passe"
   - Champ "Confirmer le mot de passe"
   - Case à cocher "J'accepte les conditions d'utilisation"
   - Bouton "S'inscrire"
3. L'utilisateur remplit tous les champs
4. L'utilisateur coche la case d'acceptation des CGU
5. L'utilisateur clique sur "S'inscrire"
6. Le système valide les données :
   - Email valide et non déjà utilisé
   - Pseudo unique
   - Mot de passe respecte les critères (min 8 caractères)
   - Les deux mots de passe correspondent
7. Le système crée le compte utilisateur
8. Le système envoie un email de confirmation
9. Le système affiche un message : "Compte créé ! Vérifie ton email pour activer ton compte"
10. L'utilisateur consulte sa boîte mail
11. L'utilisateur clique sur le lien de confirmation
12. Le système active le compte
13. L'utilisateur est redirigé vers la page de connexion

### Flux alternatifs

**3a. Email déjà utilisé**
- Le système affiche : "Cet email est déjà associé à un compte"
- Proposition de lien "Mot de passe oublié ?"
- Retour à l'étape 3

**3b. Pseudo déjà pris**
- Le système affiche : "Ce pseudo est déjà utilisé"
- L'utilisateur modifie son pseudo
- Retour à l'étape 5

**3c. Mot de passe trop faible**
- Le système affiche : "Ton mot de passe doit contenir au moins 8 caractères"
- Retour à l'étape 3

**3d. Les mots de passe ne correspondent pas**
- Le système affiche : "Les mots de passe ne correspondent pas"
- Retour à l'étape 3

### Postconditions
- Le compte utilisateur est créé et activé
- L'utilisateur peut se connecter

---

## UC-002 : Connexion à son compte

### Acteur principal
Utilisateur inscrit

### Préconditions
- L'utilisateur possède un compte actif
- L'utilisateur n'est pas déjà connecté

### Flux nominal

1. L'utilisateur accède à la page de connexion
2. Le système affiche le formulaire :
   - Champ "Email"
   - Champ "Mot de passe"
   - Case "Se souvenir de moi"
   - Bouton "Se connecter"
   - Lien "Mot de passe oublié ?"
3. L'utilisateur saisit son email et mot de passe
4. L'utilisateur coche (ou non) "Se souvenir de moi"
5. L'utilisateur clique sur "Se connecter"
6. Le système vérifie les identifiants
7. Le système crée une session utilisateur
8. Le système redirige vers le Dashboard

### Flux alternatifs

**6a. Identifiants incorrects**
- Le système affiche : "Email ou mot de passe incorrect"
- Retour à l'étape 3
- Après 5 tentatives échouées : temporisation de 15 minutes

**6b. Compte non activé**
- Le système affiche : "Ton compte n'est pas encore activé. Vérifie ton email"
- Option de renvoyer l'email de confirmation

**Mot de passe oublié**
1. L'utilisateur clique sur "Mot de passe oublié ?"
2. Le système demande l'email
3. L'utilisateur saisit son email
4. Le système envoie un lien de réinitialisation
5. L'utilisateur clique sur le lien dans l'email
6. L'utilisateur définit un nouveau mot de passe
7. Le système met à jour le mot de passe
8. L'utilisateur est redirigé vers la connexion

### Postconditions
- L'utilisateur est authentifié
- Une session est créée
- L'utilisateur accède au Dashboard

---

## UC-003 : Créer une nouvelle histoire

### Acteur principal
Utilisateur connecté

### Préconditions
- L'utilisateur est connecté
- L'utilisateur est sur son Dashboard

### Flux nominal

1. L'utilisateur clique sur "Créer une nouvelle histoire"
2. Le système affiche l'interface de configuration (étape 1/5)

**Étape 1 : Paramètres fondamentaux**

3. Le système affiche :
   - Champ texte "Genre de l'histoire" (ex: fantasy, science-fiction...)
   - Champ texte "Époque" (ex: médiéval, futuriste...)
   - Curseur "Niveau de réalité" (Fiction pure ← → Inspiré du réel)
   - **Perspective narrative** : Deux boutons radio
     - 📖 **"Tu" (2ème personne)** : Livre dont vous êtes le héros
     - 🎭 **"Il/Elle" (3ème personne)** : Livre dont vous contrôlez le héros
4. L'utilisateur remplit les champs
5. **Si l'utilisateur choisit "Il/Elle" (3ème personne) :**
   - Le système affiche des champs supplémentaires :
     - Nom du protagoniste (optionnel) : "Laisse vide pour un héros sans nom"
     - Genre du protagoniste : Radio "Il" / "Elle"
   - L'utilisateur remplit ou laisse vide le nom
   - L'utilisateur choisit "Il" ou "Elle"
6. L'utilisateur clique sur "Suivant"

**Étape 2 : Questions de contextualisation**

7. Le système pose 4 questions pour affiner :
   - "Quel type de protagoniste souhaites-tu incarner ?"
   - "Quelle ambiance préfères-tu ? (sombre, légère, épique...)"
   - "Quels thèmes t'intéressent ? (vengeance, découverte, amitié...)"
   - "Y a-t-il des éléments spécifiques à intégrer ?"
8. L'utilisateur répond à chaque question (champs texte libres)
9. L'utilisateur clique sur "Suivant"

**Étape 3 : Génération du squelette narratif**

10. Le système affiche : "Création de ton histoire en cours... ✨"
11. L'IA génère le squelette d'histoire (structure en 3 actes, tenant compte de la perspective choisie)
12. Le système affiche un aperçu discret :
    - "Ton histoire commence par..."
    - "Des rebondissements t'attendent..."
    - "Une fin épique se prépare..."
13. L'utilisateur clique sur "Suivant"

**Étape 4 : Génération de la couverture**

14. Le système affiche : "Création de la couverture... 🎨"
15. L'IA génère une image de couverture via DALL-E
16. Le système affiche la couverture générée
17. Options proposées :
    - "J'adore, continuer"
    - "Régénérer une autre couverture"
18. Si régénération : retour à l'étape 15
19. L'utilisateur valide la couverture

**Étape 5 : Choix du mode de jeu**

20. Le système affiche :
    - **Mode Choix Multiples** : "L'IA te propose des options à chaque étape"
    - **Mode Dialogue Libre** : "Tu décides librement de tes actions"
    - Note : "Tu peux changer de mode à tout moment"
21. L'utilisateur sélectionne un mode
22. Le système demande un titre pour l'histoire (pré-rempli par suggestion IA)
23. L'utilisateur valide ou modifie le titre
24. L'utilisateur clique sur "Commencer l'aventure"

**Lancement de l'histoire**

25. Le système crée l'histoire en base de données avec :
    - Tous les paramètres de configuration
    - Perspective narrative (Tu / Il / Elle)
    - Nom du protagoniste (si défini)
26. Le système initialise le LoreBook avec les infos de config
27. Le système génère le premier passage narratif **dans la perspective choisie**
28. Le système affiche la page de jeu avec :
    - La couverture en haut
    - Le premier texte narratif (en "Tu" ou "Il/Elle + nom")
    - Les choix (mode multiples) ou zone de texte (mode libre)

### Exemple de premier passage selon la perspective

**Paramètres :**
- Genre : Fantasy
- Époque : Médiéval
- Perspective : **3ème personne "Elle"**
- Nom du protagoniste : **"Aria"**

**Premier passage généré :**
> *Aria se tient devant les portes massives du château abandonné. La lune éclaire faiblement les gargouilles grimaçantes qui ornent la façade. Un bruit sourd résonne à l'intérieur. Sa main se crispe sur le pommeau de son épée. Le médaillon qu'elle a trouvé dans les ruines pulse faiblement contre sa poitrine.*

---

**Avec perspective "Tu" (2ème personne) :**
> *Tu te tiens devant les portes massives du château abandonné. La lune éclaire faiblement les gargouilles grimaçantes qui ornent la façade. Un bruit sourd résonne à l'intérieur. Ta main se crispe sur le pommeau de ton épée. Le médaillon que tu as trouvé dans les ruines pulse faiblement contre ta poitrine.*

### Flux alternatifs

**5a. L'utilisateur choisit 3ème personne sans nom**
- Le champ "Nom du protagoniste" reste vide
- Le système utilise uniquement le pronom "Il" ou "Elle"
- Exemple : "Elle se tient devant le château..." (sans nom propre)

**15a. Échec génération d'image**
- Le système affiche : "Erreur lors de la création de la couverture"
- Option : "Réessayer" ou "Continuer sans couverture"
- Si sans couverture : couverture par défaut basée sur le genre

**27a. Erreur API OpenAI**
- Le système affiche : "Erreur temporaire, merci de réessayer"
- L'histoire est sauvegardée en brouillon
- L'utilisateur peut relancer depuis le Dashboard

### Postconditions
- L'histoire est créée et sauvegardée
- La perspective narrative est définie et ne peut plus être changée
- Le LoreBook initial est créé avec la perspective et le nom du protagoniste
- L'utilisateur peut commencer à jouer
- L'histoire est en mode "privé" par défaut

---

## UC-004 : Jouer en mode Choix Multiples

### Acteur principal
Utilisateur connecté

### Préconditions
- L'utilisateur a créé ou repris une histoire
- Le mode "Choix Multiples" est actif
- L'utilisateur est sur la page de jeu

### Flux nominal

1. Le système affiche :
   - Le dernier passage narratif généré par l'IA (150-300 mots)
   - 3 à 4 boutons de choix étiquetés A, B, C, (D)
   - Chaque choix décrit une action possible
   - **E)** Bouton "✏️ Autre action..." (action personnalisée)
2. L'utilisateur lit le passage
3. L'utilisateur réfléchit aux options
4. L'utilisateur clique sur un des boutons de choix (ex: "B") **OU** clique sur "Autre action..."
5. **Si "Autre action..." :** 
   - Une zone de texte apparaît
   - Toggle : "Action narrative" / "Instruction technique (OFF)"
   - L'utilisateur écrit son action ou instruction
   - L'utilisateur valide
6. Le système affiche un indicateur de chargement : "L'histoire continue..."
7. Le système envoie le contexte à l'API OpenAI :
   - Squelette de l'histoire
   - LoreBook actuel
   - Historique récent
   - Choix sélectionné (ou texte libre)
   - Flag `is_technical` si mode OFF
8. L'IA génère la suite du récit
9. Le système évalue s'il y a un événement important
10. **Si événement important** : mise à jour du LoreBook en arrière-plan
11. Le système affiche le nouveau passage narratif
12. Le système sauvegarde automatiquement la progression (avec flag technique si applicable)
13. L'IA génère 3-4 nouveaux choix adaptés à la situation
14. Le système affiche les nouveaux choix
15. Retour à l'étape 2

### Exemple concret

**Passage narratif :**
> *Tu te tiens devant les portes massives du château abandonné. La lune éclaire faiblement les gargouilles grimaçantes. Un bruit sourd résonne à l'intérieur. Ta main se crispe sur le pommeau de ton épée. Le médaillon que tu as trouvé dans les ruines pulse faiblement contre ta poitrine.*

**Choix proposés :**
- **A)** Pousser les portes et entrer prudemment, épée dégainée
- **B)** Contourner le château pour chercher une autre entrée
- **C)** Examiner les gargouilles de plus près, elles semblent étranges
- **D)** Utiliser le médaillon pour voir s'il réagit au château
- **E)** ✏️ **Autre action...**

**Utilisateur choisit D**

**Suite générée :**
> *Tu sors le médaillon de sous ta tunique. Dès que tu l'approches des portes, il émet une lueur dorée intense. Les runes gravées sur le bois ancien s'illuminent en réponse. Un mécanisme grinçant se déclenche et les portes s'ouvrent lentement d'elles-mêmes. À l'intérieur, un grand hall désert s'étend devant toi. Une voix féminine murmure dans ton esprit : "Enfin... tu es revenu..."*

### Exemple avec "Autre action" - Action narrative

**Utilisateur clique sur "Autre action..."**
- Zone de texte apparaît
- Mode : "Action narrative" (par défaut)
- Utilisateur écrit : "Je tente d'escalader le mur pour entrer par une fenêtre du deuxième étage"
- Validation

**Suite générée :**
> *Tu contournes discrètement le château, cherchant des prises sur les pierres anciennes. Avec agilité, tu commences ton ascension. Les pierres sont glissantes mais tu parviens à te hisser jusqu'à une fenêtre entrouverte...*

### Exemple avec "Autre action" - Instruction technique (OFF)

**Utilisateur clique sur "Autre action..."**
- Toggle activé : "Instruction technique (OFF)"
- Utilisateur écrit : "[OFF] Je voudrais que l'ambiance devienne plus inquiétante, et qu'un élément de danger apparaisse"
- Validation

**Suite générée (intègre la directive) :**
> *Un vent glacial se lève soudainement. Les gargouilles semblent te fixer avec malveillance. Tu entends un grondement sourd venant du château... quelque chose de massif se déplace à l'intérieur.*

**Note :** Le message OFF ne sera PAS visible dans la version publique de l'histoire.

### Flux alternatifs

**4a. Champ "Autre action" vide**
- Le bouton de validation est désactivé
- Message : "Écris ton action ou instruction"

**4b. Message OFF inapproprié**
- Le système affiche : "Cette instruction ne peut pas être traitée"
- Retour à l'étape 5

**8a. Erreur API temporaire**
- Le système affiche : "Oups, l'histoire hésite... Réessayons"
- Bouton "Continuer"
- Le système retente l'appel API

**8b. Réponse inappropriée détectée**
- Le système filtre et régénère automatiquement
- Si échec répété : génération de secours basique

### Postconditions
- L'histoire a progressé d'un tour
- Le choix de l'utilisateur est sauvegardé
- Le LoreBook est mis à jour si nécessaire
- Nouveaux choix disponibles

---

## UC-005 : Jouer en mode Dialogue Libre

### Acteur principal
Utilisateur connecté

### Préconditions
- L'utilisateur a créé ou repris une histoire
- Le mode "Dialogue Libre" est actif
- L'utilisateur est sur la page de jeu

### Flux nominal

1. Le système affiche :
   - Le dernier passage narratif généré par l'IA
   - Une zone de texte avec placeholder : "Que fais-tu ?"
   - Toggle : "💬 Action narrative" / "🎭 Instruction technique (OFF)"
   - Compteur de caractères : "0/1000"
   - Bouton "Agir" (ou "Envoyer instruction" si mode OFF)
2. L'utilisateur lit le passage
3. L'utilisateur choisit le mode (narratif par défaut ou OFF)
4. L'utilisateur écrit son action/instruction dans la zone de texte
   - **Mode narratif** : "Je m'approche prudemment de la porte et j'écoute attentivement"
   - **Mode OFF** : "Je voudrais que ce personnage devienne un allié important"
5. Le compteur affiche : "72/1000"
6. L'utilisateur clique sur "Agir"
7. Le système vérifie le contenu (modération)
8. **Si contenu valide :**
9. Le système affiche l'action/instruction dans l'historique :
   - **Mode narratif** : style "action du joueur" (visible en public)
   - **Mode OFF** : style "note technique" avec badge [OFF] (invisible en public)
10. Le système affiche : "L'histoire continue..."
11. Le système envoie le contexte à l'API :
    - Squelette
    - LoreBook
    - Historique récent
    - Action/instruction écrite par le joueur
    - Flag `is_technical` si mode OFF
12. L'IA interprète l'intention et génère la suite
13. Le système évalue s'il y a un événement important
14. **Si événement important** : mise à jour du LoreBook
15. Le système affiche le nouveau passage narratif
16. Le système sauvegarde automatiquement (avec flag si message OFF)
17. La zone de texte se vide, prête pour la prochaine action
18. Retour à l'étape 2

### Exemple concret - Action narrative

**Passage narratif :**
> *Le vieux bibliothécaire te fixe de ses yeux perçants. Il caresse pensivement sa longue barbe blanche. "Ainsi, tu cherches le Codex Perdu", dit-il d'une voix grave. "Peu de gens connaissent son existence. Pourquoi devrais-je t'aider ?"*

**Action du joueur (mode narratif) :**
> "Je lui montre le sceau que mon mentor m'a confié avant de mourir et lui explique que le royaume est en danger."

**Suite générée :**
> *Le visage du bibliothécaire se fige. Ses yeux s'écarquillent en voyant le sceau. "Par les Anciens...", murmure-t-il. "Ce sceau... je ne pensais jamais le revoir." Il se lève brusquement, faisant tomber des livres. "Si tu portes cela, alors la prophétie est vraie. Viens, nous n'avons pas de temps à perdre." Il se dirige vers une section poussiéreuse de la bibliothèque.*

### Exemple concret - Instruction technique (OFF)

**Passage narratif :**
> *Le vieux bibliothécaire te fixe de ses yeux perçants. Il caresse pensivement sa longue barbe blanche. "Ainsi, tu cherches le Codex Perdu", dit-il d'une voix grave. "Peu de gens connaissent son existence. Pourquoi devrais-je t'aider ?"*

**Instruction OFF du joueur :**
> "[OFF] Fais en sorte que ce bibliothécaire devienne un mentor important pour la suite de l'histoire, et qu'il révèle des informations cruciales sur le passé du protagoniste."

**Affichage dans l'historique auteur :**
```
[NOTE TECHNIQUE] 🎭
Fais en sorte que ce bibliothécaire devienne un mentor important...
```

**Suite générée (intègre la directive) :**
> *Le visage du bibliothécaire se radoucit. "Je vois dans tes yeux la même détermination que... ton père." Ton cœur se serre. "Tu le connaissais ?" demandes-tu, la voix tremblante. Il hoche la tête lentement. "Je l'ai connu, oui. Et je sais pourquoi tu es ici. Viens, il est temps que tu apprennes la vérité sur ta lignée."*

**Note :** Ce message OFF n'apparaîtra PAS dans la version publique de l'histoire.

### Flux alternatifs

**7a. Contenu inapproprié détecté (mode narratif)**
- Le système affiche : "Cette action n'est pas appropriée pour notre histoire"
- La zone de texte reste remplie pour correction
- Retour à l'étape 4

**7b. Instruction OFF non traitable**
- Le système affiche : "Cette instruction ne peut pas être intégrée à l'histoire"
- Suggestion de reformulation
- Retour à l'étape 4

**7c. Zone de texte vide**
- Le bouton "Agir" est désactivé
- Message : "Décris ce que tu souhaites faire" ou "Écris ton instruction"

**7d. Limite de caractères dépassée**
- Le système bloque la saisie au-delà de 1000 caractères
- Message : "Limite atteinte (1000 caractères max)"

**12a. Action ambiguë (mode narratif uniquement)**
- L'IA demande clarification via le récit
- Exemple : *"Tu t'apprêtes à agir, mais hésites... De quelle manière exactement ?"*

### Postconditions
- L'histoire a progressé d'un tour
- L'action libre de l'utilisateur est sauvegardée
- Le LoreBook est mis à jour si nécessaire
- Zone de texte prête pour nouvelle action

---

## UC-006 : Changer de mode de jeu en cours d'histoire

### Acteur principal
Utilisateur connecté

### Préconditions
- L'utilisateur est en train de jouer une histoire
- L'utilisateur souhaite changer de mode

### Flux nominal

1. L'utilisateur clique sur l'icône "Options" (menu hamburger)
2. Le système affiche un menu avec :
   - "Changer de mode de jeu"
   - "Consulter le LoreBook"
   - "Paramètres"
   - "Quitter"
3. L'utilisateur clique sur "Changer de mode de jeu"
4. Le système affiche une modale :
   - Mode actuel : **Choix Multiples** (ou Dialogue Libre)
   - "Passer en mode Dialogue Libre" (ou Choix Multiples)
   - Explication du changement
   - Boutons : "Confirmer" / "Annuler"
5. L'utilisateur clique sur "Confirmer"
6. Le système change le mode
7. Le système affiche : "Mode changé ! Tu peux maintenant..."
8. Le système adapte l'interface :
   - **Si passage en Dialogue Libre** : affiche la zone de texte
   - **Si passage en Choix Multiples** : génère des choix adaptés
9. L'utilisateur continue son histoire avec le nouveau mode

### Flux alternatifs

**5a. L'utilisateur annule**
- Retour à la page de jeu sans changement

### Postconditions
- Le mode de jeu est changé
- L'historique est préservé
- L'interface est adaptée au nouveau mode

---

## UC-007 : Consulter le LoreBook

### Acteur principal
Utilisateur connecté

### Préconditions
- L'utilisateur joue une histoire
- Le LoreBook contient des informations

### Flux nominal

1. L'utilisateur clique sur le bouton "LoreBook" (icône livre)
2. Le système ouvre un panneau latéral (ou modal)
3. Le système affiche le LoreBook organisé :
   - **Personnages** (liste avec détails)
   - **Lieux** (liste avec descriptions)
   - **Objets clés** (inventaire)
   - **Événements majeurs** (chronologie)
   - **État du protagoniste** (traits, possessions)
4. L'utilisateur consulte les différentes sections
5. L'utilisateur navigue entre les catégories
6. L'utilisateur clique sur "Fermer" ou zone extérieure
7. Le système ferme le LoreBook
8. L'utilisateur retourne à son histoire

### Exemple de contenu affiché

**Personnages :**
- **Elara la Sage**
  - *Magicienne âgée, mystérieuse*
  - Traits : sagesse, méfiance, connaissance des anciens
  - Relation : Mentor potentiel, cache des secrets

- **Marcus**
  - *Ancien compagnon d'armes*
  - Traits : loyal... ou pas ?
  - Relation : A trahi ta confiance au chapitre 3

**Lieux :**
- **Ruines d'Aldéron** : Où tu as découvert le médaillon
- **Château du Crépuscule** : Abandonné, hanté par le passé

**Objets clés :**
- **Médaillon ancien** : Pulse près des lieux magiques
- **Carte cryptée** : Semble indiquer un lieu secret

**Événements majeurs :**
1. Découverte du médaillon dans les ruines
2. Rencontre avec Elara
3. Trahison de Marcus
4. Vision prophétique dans le temple

**Ton protagoniste :**
- Traits : courageux, impulsif, loyal
- État : légère blessure à l'épaule gauche

### Flux alternatifs

**3a. LoreBook vide ou presque vide (début d'histoire)**
- Le système affiche : "Ton histoire vient de commencer. Le LoreBook se remplira au fil de ton aventure."

### Postconditions
- L'utilisateur a rafraîchi sa mémoire
- Le jeu continue normalement

---

## UC-008 : Reprendre une histoire en cours

### Acteur principal
Utilisateur connecté

### Préconditions
- L'utilisateur possède au moins une histoire en cours
- L'utilisateur est sur son Dashboard

### Flux nominal

1. Le système affiche le Dashboard avec :
   - Section "Histoires en cours" (liste de cartes)
   - Chaque carte affiche :
     - Titre de l'histoire
     - Couverture miniature
     - Genre et époque
     - Dernière activité (ex: "il y a 2 jours")
     - Bouton "Continuer"
2. L'utilisateur parcourt ses histoires
3. L'utilisateur clique sur "Continuer" d'une histoire
4. Le système charge l'histoire :
   - Récupération du contexte complet
   - Chargement du LoreBook
   - Récupération du dernier passage
5. Le système affiche la page de jeu
6. Le système affiche un résumé contextuel :
   - "Dernière session : il y a 2 jours"
   - "Où en étais-tu ? [mini résumé des 2-3 dernières actions]"
   - Option : "Consulter le LoreBook"
7. L'utilisateur clique sur "C'est parti !"
8. Le système affiche le dernier passage narratif
9. L'utilisateur continue son aventure

### Flux alternatifs

**7a. L'utilisateur veut se remémorer plus**
- L'utilisateur clique sur "Consulter le LoreBook"
- Voir UC-007
- Retour à l'étape 7

**7b. L'utilisateur veut relire les derniers passages**
- Option "Historique récent" disponible
- Affichage des 5 derniers tours
- L'utilisateur clique "Continuer"
- Retour à l'étape 8

### Postconditions
- L'histoire est chargée
- L'utilisateur reprend là où il s'était arrêté

---

## UC-009 : Publier son histoire (publication progressive)

### Acteur principal
Utilisateur connecté (Joueur/Éditeur)

### Préconditions
- L'utilisateur possède une histoire privée
- L'histoire a une longueur minimale (ex: 5 tours minimum)
- L'utilisateur est sur son Dashboard ou page de l'histoire

### Flux nominal - Publication initiale

1. L'utilisateur accède aux options de l'histoire
2. L'utilisateur clique sur "Publier cette histoire"
3. Le système affiche une modale d'information :
   - "En publiant, ton histoire sera accessible en lecture seule par la communauté"
   - "**Publication progressive** : tu peux publier même si ton histoire n'est pas terminée"
   - "Tu pourras continuer à écrire : les nouveaux chapitres seront automatiquement ajoutés"
   - "Les lecteurs suivront ton histoire comme une série à épisodes"
   - "**Important** : Les chapitres déjà publiés ne pourront plus être modifiés"
   - Champ : "Description courte" (optionnel, 200 caractères)
   - Toggle : "Histoire terminée" / "En cours d'écriture"
   - Case à cocher : "Je confirme vouloir publier"
   - Boutons : "Publier" / "Annuler"
4. L'utilisateur ajoute une description (optionnelle)
5. L'utilisateur choisit le statut (terminée ou en cours)
6. L'utilisateur coche la confirmation
7. L'utilisateur clique sur "Publier"
8. Le système :
   - Change le statut de l'histoire en "publiée"
   - Marque tous les passages actuels comme "publiés et figés"
   - Génère une **version nettoyée** (sans messages OFF, sans choix non retenus)
   - Vérifie le contenu (modération automatique)
   - Ajoute l'histoire à la galerie publique avec badge "En cours" ou "Terminée"
9. Le système affiche : "Histoire publiée avec succès ! 🎉"
10. Le système explique :
    - "Les lecteurs voient une version narrative fluide"
    - "Tes échanges techniques avec l'IA restent privés"
    - Si "en cours" : "Continue d'écrire, les nouveaux chapitres seront automatiquement publiés"
11. Le système propose : "Voir dans la galerie publique"
12. L'utilisateur peut cliquer pour voir sa propre histoire publiée

### Flux nominal - Continuation après publication

**Scénario : L'auteur continue d'écrire une histoire publiée "en cours"**

1. L'utilisateur reprend son histoire publiée (en cours)
2. Le système affiche un badge : "📖 Histoire publiée - En cours d'écriture"
3. L'utilisateur joue normalement (choix ou dialogue libre, avec messages OFF possibles)
4. Chaque nouveau passage est automatiquement ajouté à la version publique
5. Les messages OFF restent invisibles pour les lecteurs
6. Le système met à jour "Dernier chapitre publié : [date]" dans la galerie
7. **Optionnel** : Notification envoyée aux lecteurs qui suivent l'histoire (futur)

### Flux nominal - Marquer l'histoire comme terminée

1. L'utilisateur ouvre une histoire publiée "en cours"
2. L'utilisateur clique sur "Options" → "Marquer comme terminée"
3. Le système demande confirmation
4. Le système change le statut en "Terminée"
5. Badge dans la galerie : "Terminée" au lieu de "En cours"
6. Les lecteurs savent que l'histoire est complète

### Exemple de version nettoyée

**Version auteur (privée, historique complet) :**
```
[Passage IA] : "Tu te tiens devant la porte du château..."

[Choix proposés]
A) Entrer prudemment
B) Contourner le château  
C) Examiner les gargouilles
D) Utiliser le médaillon ← choisi

[Message OFF] : "Fais en sorte que le médaillon révèle un secret"

[Passage IA suivant] : "Le médaillon émet une lueur dorée. Les portes s'ouvrent..."
```

**Version publique (lecteurs, version nettoyée) :**
```
Tu te tiens devant la porte du château... Tu décides d'utiliser le médaillon. 
Il émet une lueur dorée. Les portes s'ouvrent mystérieusement...
```

### Flux alternatifs

**3a. Histoire trop courte**
- Le système affiche : "Ton histoire doit contenir au moins 5 passages avant publication"
- Option : "Publier quand même en mode test" (désactivée pour MVP)
- Retour au Dashboard

**8a. Contenu inapproprié détecté**
- Le système refuse la publication
- Message : "Cette histoire contient du contenu inapproprié"
- Option de signaler un faux positif

**7a. L'utilisateur annule**
- Retour à la page précédente
- L'histoire reste privée

**Continuation - Modifier un passage déjà publié (impossible)**
- Si l'utilisateur tente de modifier : "Les passages publiés ne peuvent plus être modifiés"
- Seuls les nouveaux passages peuvent être écrits

### Postconditions
- L'histoire est publique et visible dans la galerie
- Une version nettoyée est générée pour les lecteurs
- Les passages publiés sont figés
- L'auteur peut continuer à écrire si "en cours"
- Les messages OFF restent invisibles pour les lecteurs
- L'auteur est crédité

---

## UC-010 : Découvrir et lire des histoires publiées

### Acteur principal
Utilisateur connecté ou visiteur

### Préconditions
- Des histoires ont été publiées par la communauté

### Flux nominal

1. L'utilisateur clique sur "Galerie" dans le menu principal
2. Le système affiche la galerie publique :
   - Grille de cartes d'histoires
   - Chaque carte affiche :
     - Couverture
     - Titre
     - Genre et époque
     - Auteur (pseudo)
     - **Badge statut : "✅ Terminée" ou "📖 En cours"**
     - Nombre de likes
     - Longueur (nombre de chapitres/passages)
     - **Si "en cours"** : "Dernier chapitre : il y a 2 jours"
3. L'utilisateur voit les filtres disponibles :
   - Genre (liste déroulante)
   - Époque (liste déroulante)
   - **Statut : "Toutes", "Terminées", "En cours"**
   - Tri : "Populaire", "Récent", "Plus longue", "Dernière mise à jour"
4. L'utilisateur applique un filtre (ex: Genre = "Fantasy" + Statut = "En cours")
5. Le système met à jour la galerie avec les résultats filtrés
6. L'utilisateur parcourt les histoires
7. L'utilisateur clique sur une carte d'histoire qui l'intéresse
8. Le système affiche la page de l'histoire :
   - Couverture en grand
   - Titre, auteur, genre, époque
   - **Badge statut** (terminée ou en cours)
   - Description de l'auteur
   - Statistiques (likes, vues, chapitres)
   - **Si "en cours"** : "L'auteur écrit actuellement cette histoire. Nouveaux chapitres à venir !"
   - Bouton "Commencer la lecture"
   - Bouton "❤️ J'aime"
   - **Si connecté** : Bouton "🔔 Suivre cette histoire" (recevoir notifications des nouveaux chapitres - futur)
9. L'utilisateur clique sur "Commencer la lecture"
10. Le système affiche l'histoire en **version nettoyée** (mode lecture seule) :
    - **Format narratif fluide** : prose continue, pas d'interface de jeu
    - **Pas de choix visibles** : uniquement les actions retenues intégrées au récit
    - **Pas de messages OFF** : invisible pour le lecteur
    - Navigation : "Chapitre suivant" / "Précédent"
    - Barre de progression
11. L'utilisateur lit l'histoire à son rythme
12. **Si l'histoire est "en cours" et que le lecteur arrive à la fin** :
    - Message : "Fin du dernier chapitre disponible"
    - "L'auteur continue d'écrire. Reviens bientôt pour la suite !"
    - Bouton : "🔔 Suivre pour être notifié"
13. L'utilisateur peut mettre un "❤️" s'il a aimé

### Exemple de lecture - Version nettoyée

**Ce que voit le lecteur (version publique) :**
```
Chapitre 1

Tu te tiens devant les portes massives du château abandonné. La lune éclaire 
faiblement les gargouilles grimaçantes. Un bruit sourd résonne à l'intérieur. 
Ta main se crispe sur le pommeau de ton épée.

Tu décides d'utiliser le médaillon que tu as trouvé dans les ruines. Dès que 
tu l'approches des portes, il émet une lueur dorée intense. Les runes gravées 
sur le bois ancien s'illuminent en réponse. Un mécanisme grinçant se déclenche 
et les portes s'ouvrent lentement d'elles-mêmes.

À l'intérieur, un grand hall désert s'étend devant toi. Une voix féminine 
murmure dans ton esprit : "Enfin... tu es revenu..."

[Bouton : Chapitre suivant →]
```

**Ce que le lecteur NE voit PAS :**
- Les 4 choix proposés (A, B, C, D)
- L'option "Autre action..."
- Les messages OFF de l'auteur
- L'interface de jeu

### Flux alternatifs

**13a. Ajouter aux favoris**
- Bouton "⭐ Ajouter aux favoris"
- L'histoire apparaît dans la section "Favoris" du profil

**11a. Mode lecture immersive (continu)**
- Option "Mode continu" : affiche toute l'histoire d'un coup (scroll)
- Plutôt que navigation chapitre par chapitre

**13b. Suivre une histoire "en cours" (futur)**
- Bouton "🔔 Suivre"
- Le lecteur reçoit une notification quand un nouveau chapitre est publié
- Email ou notification in-app

**12a. Histoire "en cours" - Nouveau chapitre disponible**
- Si le lecteur revient après que l'auteur a publié un nouveau chapitre
- Badge "Nouveau !" sur la carte
- Reprise à partir du dernier chapitre lu

### Postconditions
- L'utilisateur a découvert de nouvelles histoires
- Statistiques mises à jour (vues, likes)
- Possibilité de revenir lire plus tard
- Si "en cours" : le lecteur peut suivre l'histoire

---

## UC-011 : Gérer ses histoires

### Acteur principal
Utilisateur connecté

### Préconditions
- L'utilisateur possède au moins une histoire

### Flux nominal

1. L'utilisateur accède à son Dashboard
2. Le système affiche toutes les histoires de l'utilisateur :
   - **En cours** (liste)
   - **Terminées** (liste)
   - **Publiées** (liste)
3. Pour chaque histoire, options disponibles :
   - "Continuer" (si en cours)
   - "Relire" (si terminée)
   - "Supprimer"
   - "Exporter" (futur)
   - "Statistiques" (si publiée)
4. L'utilisateur clique sur "Supprimer" d'une histoire
5. Le système demande confirmation :
   - "Es-tu sûr de vouloir supprimer cette histoire ?"
   - "Cette action est irréversible"
   - Boutons : "Oui, supprimer" / "Annuler"
6. L'utilisateur confirme
7. Le système supprime l'histoire de la base de données
8. Le système affiche : "Histoire supprimée"
9. Le Dashboard se met à jour

### Flux alternatifs

**4a. Renommer une histoire**
- Option "Renommer"
- Champ de texte pré-rempli
- Validation
- Titre mis à jour

**4b. Consulter les statistiques (histoire publiée)**
- Clic sur "Statistiques"
- Affichage : vues, likes, ajouts en favoris
- Graphique d'évolution

**6a. L'utilisateur annule**
- Retour au Dashboard
- Aucune suppression

### Postconditions
- Les histoires sont organisées
- Suppression effective si confirmée

---

## Synthèse des use cases

| ID | Use Case | Priorité MVP | Complexité |
|---|---|---|---|
| UC-001 | Inscription | ✅ Essentiel | Faible |
| UC-002 | Connexion | ✅ Essentiel | Faible |
| UC-003 | Créer histoire | ✅ Essentiel | Élevée |
| UC-004 | Mode Choix Multiples | ✅ Essentiel | Élevée |
| UC-005 | Mode Dialogue Libre | ✅ Essentiel | Élevée |
| UC-006 | Changer de mode | ✅ Essentiel | Moyenne |
| UC-007 | Consulter LoreBook | ✅ Essentiel | Moyenne |
| UC-008 | Reprendre histoire | ✅ Essentiel | Moyenne |
| UC-009 | Publier histoire | ⭐ Post-MVP | Moyenne |
| UC-010 | Galerie publique | ⭐ Post-MVP | Moyenne |
| UC-011 | Gérer histoires | ✅ Essentiel | Faible |

---

**Note :** Ces use cases seront affinés et enrichis durant le développement en fonction des tests utilisateurs et retours.

