Files

74 lines
2.1 KiB
Plaintext

@startuml sequence
' Diagramme de séquence — "Afficher une carte" puis "Révéler la réponse"
' Application web Flashcards (SPA/PWA, couche d'accès générique MySQL/Mongo)
hide footbox
title Jeu : afficher une carte au hasard puis révéler la réponse
actor Utilisateur as User
participant "SPA React\n(UI)" as SPA
participant "CardController\n(API Next.js)" as Api
participant "CardService" as Service
participant "CardRepository\n(abstraction générique)" as Repo
participant "SGBD\n(MySQL OU MongoDB)" as DB
== Afficher une carte au hasard ==
User -> SPA : clique « Jouer »
SPA -> SPA : un thème est-il déjà sélectionné ?
alt Thème précis sélectionné (F-04)
User -> SPA : sélectionne un thème (ex. javascript)
SPA -> Api : GET /api/cards/random?theme=javascript
else Tirage global (F-01)
SPA -> Api : GET /api/cards/random
end
Api -> Service : playRandom(theme?)
activate Service
alt theme fourni
Service -> Repo : findRandomByTheme(theme)
else sans thème
Service -> Repo : findRandom()
end
activate Repo
Repo -> DB : Requête aléatoire (ORDER BY RAND() / $sample)
activate DB
DB --> Repo : Enregistrement(s) : question, réponse, thème
deactivate DB
Repo --> Service : Card
deactivate Repo
Service --> Api : Card (réponse non renvoyée par sécurité)
deactivate Service
Api --> SPA : 200 JSON { id, question, theme }
SPA -> SPA : affiche la question\nla réponse reste masquée
== Révéler la réponse ==
User -> SPA : clique « Voir la réponse » (F-03)
SPA -> Api : GET /api/cards/{id}/reveal
activate Api
Api -> Repo : findById(id)
activate Repo
Repo -> DB : SELECT par id / findOne
activate DB
DB --> Repo : Carte complète
deactivate DB
Repo --> Api : Card { response }
deactivate Repo
Api --> SPA : 200 JSON { response }
deactivate Api
SPA --> SPA : déroule et affiche la réponse
User -> SPA : reclique (masquer/réafficher) — boucle libre
loop tant que joueur le souhaite
SPA --> User : réponse visible / masquée
end
note over Repo : L'implémentation concrète (MySQL ou MongoDB)\nest fournie par la Factory selon DatabaseConfig\nsans impact sur Service ni Api (générique).
@enduml