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