# Diagramme de classe ```plantuml @startuml Class User { - String pseudo - String mot_de_passe } Class Carte { - String nom - String description - String pouvoir - String strategies - int note - String lienImage - List commentaires - Set likes + void addCommentaire(User) + void removeCommentaire(User) + bool hasLiked(User) + void addLike(User) + void removeLike(User) } Class Commentaire { + String contenu + int signale + int nblike + int nbdislike + Set likes + bool hasLiked(User) + void addLike(User) + void removeLike(User) } Class Pack { + String nom + String description + int note + String lienImage + Set cartes + List commentaires + Set likes + void addCommentaire(User) + void removeCommentaire(User) + bool hasLiked(User) + void addLike(User) + void removeLike(User) } Class Camp { + String nom + String description + String lienImage + Set cartes } User --> Pack User --> Carte User --> Commentaire Commentaire *--> Pack Commentaire *--> Carte Pack --|> Carte Camp --|> Carte hide circle allowmixing skinparam classAttributeIconSize 0 skinparam classBackgroundColor #ffffb9 skinparam classBorderColor #800000 skinparam classArrowColor #800000 skinparam classFontColor #black skinparam classFontName Tahoma @enduml ``` Voici le diagramme de classe général représentant les classes et leurs attributs. Il faut noter que nous avons utiliser les propriété a la place des attributs afin de définir des règles de lecture et d'écriture directement. # Diagramme de classe pour la persistance ```plantuml @startuml Class User { } Class Carte { - List commentaires - Set likes } Class Commentaire { + Set likes } Class Pack { + List commentaires + Set likes } Class Camp { } User --> Pack User --> Carte User --> Commentaire Commentaire *--> Pack Commentaire *--> Carte Pack --|> Carte Camp --|> Carte hide circle allowmixing skinparam classAttributeIconSize 0 skinparam classBackgroundColor #ffffb9 skinparam classBorderColor #800000 skinparam classArrowColor #800000 skinparam classFontColor #black skinparam classFontName Tahoma @enduml ``` es seules données pouvant être modifiées dans le modèle Master-Detail sont les _commentaires_ et les _likes_ des __packs__ et des __cartes__. Ainsi, ce sont les seules données qui sont enregistrées à chaque modification, ajout ou suppression. ### Likes Chaque utilisateur ne peut 'liker' qu'une fois une carte/pack, on utilise donc un set pour avoir des clés uniques, évitant les doublant. Le set nous permet également d'effectuer des opération de recherche plus rapidement pour verifier si un utilisateur à déjà 'liker' ou non. ### Commentaires Chaque utilisateur peut commenter autant de fois qu'il veut une carte/pack, il peut également supprimer les commentaires qu'il à écrit. # Diagramme de séquence plantuml``` @startuml actor User participant "User Interface" as UI participant Application participant Pack participant Carte User -> UI: Sélectionne une carte/pack à liker UI -> Application: Demande de like pour la carte/pack sélectionné(e) Application -> Pack: Vérifie si l'utilisateur a déjà liké le pack alt Pack déjà liké par l'utilisateur Application --> UI: Affiche un message indiquant que le pack a déjà été liké else Application -> Carte: Vérifie si l'utilisateur a déjà liké la carte alt Carte déjà likée par l'utilisateur Application --> UI: Affiche un message indiquant que la carte a déjà été likée else Application -> Pack: Ajoute le like de l'utilisateur au pack Pack --> Application: Confirme l'ajout du like au pack Application -> Carte: Ajoute le like de l'utilisateur à la carte Carte --> Application: Confirme l'ajout du like à la carte Application --> UI: Affiche un message de succès pour le like effectué end end @enduml ```