Skip to content

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

  1. Soft Delete : Toutes les entités utilisent un champ isDeleted pour la suppression logique
  2. Mapstruct : Utilisation de Mapstruct pour le mapping DTO-Entity
  3. Specifications : Utilisation des Specifications pour les requêtes dynamiques
  4. HATEOAS : Support des liens hypermédias via Spring HATEOAS
  5. Validation : Validation des données via les annotations Jakarta Validation