Documentation des Classes
Structure Générale
L'application suit une architecture en couches typique d'une application Spring Boot : - Controllers : Gestion des endpoints REST - Services : Logique métier - Repositories : Accès aux données - Models : Entités JPA - DTOs : Objets de transfert de données - Mappers : Conversion entre DTOs et entités - Specifications : Requêtes dynamiques avec Spring Data JPA
Diagramme de Classes Principal
classDiagram
class PersonController {
-PersonService personService
-FavoriteService favoriteService
-AttachmentService attachmentService
+addPerson(Person) PersonRepresentation
+updatePerson(String, Person) PersonRepresentation
+deletePerson(String) void
+getPerson(String) PersonRepresentation
+listPersons(ListPersonRequest) ListPersonResume
+addFavorite(String, Favorite) FavoriteRepresentation
+deleteFavorite(String, String) void
+listFavorites(String, EntityTypeFavoris) ListFavoriteResume
+addAttachment(String, Attachment) AttachmentRepresentation
+deleteAttachment(String, String) void
+listAttachments(String) ListAttachmentResume
}
class PersonService {
-PersonRepository personRepository
+addPerson(Person) PersonRepresentation
+updatePerson(String, Person) PersonRepresentation
+deletePerson(String) void
+getPerson(String) PersonRepresentation
+listPersons(ListPersonRequest) ListPersonResume
}
class PersonEntity {
-String id
-String picture
-String lastName
-String firstName
-GenderEnum gender
-LocalDate dateOfBirth
-String email
-PhoneEntity phoneNumber
-AddressEntity address
-TypeEnum type
-StatusEnum status
-boolean isDeleted
}
PersonController --> PersonService
PersonController --> FavoriteService
PersonController --> AttachmentService
PersonService --> PersonRepository
PersonRepository --> PersonEntity
Diagrammes Détaillés par Module
Module Person
classDiagram
class PersonEntity {
-String id
-String picture
-String lastName
-String firstName
-GenderEnum gender
-LocalDate dateOfBirth
-String email
-PhoneEntity phoneNumber
-AddressEntity address
-TypeEnum type
-StatusEnum status
-boolean isDeleted
}
class PersonMapper {
+dtoToEntity(Person) PersonEntity
+entityToDto(PersonEntity) Person
+entityToRepresentation(PersonEntity) PersonRepresentation
}
class PersonRepository {
+findByIdAndIsDeletedFalse(String) Optional~PersonEntity~
+findAll(Specification, Pageable) Page~PersonEntity~
}
class PersonSpecification {
+searchWithParams(List~String~, List~String~) Specification~PersonEntity~
}
PersonEntity <-- PersonMapper
PersonRepository --> PersonEntity
PersonSpecification --> PersonEntity
Module Attachment
classDiagram
class AttachmentEntity {
-String id
-EntityTypeEnum entityType
-String entityId
-PersonEntity person
-boolean isDeleted
}
class AttachmentMapper {
+dtoToEntity(Attachment) AttachmentEntity
+entityToDto(AttachmentEntity) Attachment
+entityToRepresentation(AttachmentEntity) AttachmentRepresentation
}
class AttachmentRepository {
+findByEntityIdAndPersonIdAndIsDeletedFalse(String, String) Optional~AttachmentEntity~
+findByEntityIdAndPerson_Id(String, String) Optional~AttachmentEntity~
}
AttachmentEntity <-- AttachmentMapper
AttachmentRepository --> AttachmentEntity
Module Favorite
classDiagram
class FavoriteEntity {
-String id
-EntityTypeFavoris entityType
-String entityId
-PersonEntity person
-boolean isDeleted
}
class FavoriteMapper {
+dtoToEntity(Favorite) FavoriteEntity
+entityToDto(FavoriteEntity) Favorite
+entityToRepresentation(FavoriteEntity) FavoriteRepresentation
}
class FavoriteRepository {
+findByIdAndPerson_IdAndIsDeletedFalse(String, String) Optional~FavoriteEntity~
+findByEntityIdAndPerson_Id(String, String) Optional~FavoriteEntity~
}
FavoriteEntity <-- FavoriteMapper
FavoriteRepository --> FavoriteEntity
Points Clés de l'Architecture
- Soft Delete : Toutes les entités utilisent un champ
isDeletedpour la suppression logique - Mapstruct : Utilisation de Mapstruct pour le mapping DTO-Entity
- Specifications : Utilisation des Specifications pour les requêtes dynamiques
- HATEOAS : Support des liens hypermédias via Spring HATEOAS
- Validation : Validation des données via les annotations Jakarta Validation