74 lines
2.1 KiB
Plaintext
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 |