Skip to content

0. RECAP Modelisation BDD et config SpringBoot

JaaJ edited this page Aug 7, 2026 · 2 revisions

Modélisation base de données TicketFlow actuelle

  • Schéma PostgreSQL
    • Nom : ticketflow
    • Gestion des migrations : Flyway
    • Scripts :
      • V1 : création du schéma
      • V2 : création des tables
      • V3 : clés étrangères
      • V4 : index
      • V5 : données initiales
      • V6 : vues SQL

Utilisateurs

app_user

  • Table principale des utilisateurs.
  • Colonnes :
    • id : identifiant technique auto-généré.
    • firstname, lastname.
    • email unique.
    • password_hash.
    • phone.
    • profile_picture_url.
    • email_verified.
    • status_id.
    • created_at, updated_at.
    • last_login_at.

Relations :

  • app_user -> user_status
    • Un utilisateur possède un statut.
  • app_user -> user_role
    • Un utilisateur peut avoir plusieurs rôles.
  • app_user -> ticket
    • Un utilisateur peut créer plusieurs tickets.
    • Un utilisateur peut être assigné à plusieurs tickets.
  • app_user -> ticket_comment
    • Auteur de commentaires.
  • app_user -> ticket_attachment
    • Auteur des pièces jointes.
  • app_user -> ticket_history
    • Auteur des modifications.

Gestion des droits

role

  • Liste des rôles disponibles.
  • Exemples :
    • USER
    • SUPPORT
    • ADMIN

user_role

  • Table d'association N-N.
  • Permet :
    • Un utilisateur → plusieurs rôles.
    • Un rôle → plusieurs utilisateurs.

Clé primaire :

  • (user_id, role_id)

user_status

  • Statuts utilisateur.
  • Exemples :
    • ACTIVE
    • DISABLED
    • LOCKED

Authentification utilisateur

email_verification_token

  • Stocke les tokens de validation email.

  • Relation :

    • token → utilisateur.
  • Suppression :

    • ON DELETE CASCADE.

password_reset_token

  • Stocke les tokens de réinitialisation mot de passe.
  • Relation :
    • token → utilisateur.
  • Suppression :
    • ON DELETE CASCADE.

Gestion des tickets

ticket

Table centrale de l'application.

Colonnes :

  • id
  • title
  • description
  • creator_id
  • assignee_id
  • status_id
  • priority_id
  • category_id
  • dates :
    • création
    • modification
    • fermeture

Relations :

  • Créateur :

    • ticket.creator_id -> app_user.id
    • Suppression utilisateur interdite.
  • Assignation :

    • ticket.assignee_id -> app_user.id
    • Suppression utilisateur :
      • ticket conservé
      • assignation supprimée (SET NULL).
  • Statut :

    • ticket_status
  • Priorité :

    • ticket_priority
  • Catégorie :

    • ticket_category

Référentiels tickets

ticket_status

Exemples :

  • OPEN
  • IN_PROGRESS
  • CLOSED

ticket_priority

Exemples :

  • LOW
  • MEDIUM
  • HIGH
  • CRITICAL

Contient :

  • nom
  • niveau de priorité.

ticket_category

Exemples :

  • Bug
  • Incident
  • Demande
  • Evolution

Historique et collaboration

ticket_comment

Commentaires sur un ticket.

Relations :

  • ticket → commentaires :
    • suppression cascade.
  • auteur :
    • utilisateur conservé.

ticket_attachment

Pièces jointes.

Stocke :

  • nom fichier.
  • chemin stockage.
  • type MIME.
  • taille.

Relations :

  • ticket → pièces jointes :
    • suppression cascade.
  • uploader :
    • utilisateur conservé.

ticket_history

Journal d'audit.

Stocke :

  • utilisateur.
  • action.
  • champ modifié.
  • ancienne valeur.
  • nouvelle valeur.
  • date.

Objectif :

  • traçabilité complète.

Vues SQL

vw_ticket_details

Vue complète d'un ticket :

Retourne :

  • informations ticket.
  • statut.
  • priorité.
  • catégorie.
  • créateur.
  • assigné.

vw_ticket_comments

Retourne :

  • commentaire.
  • auteur.
  • informations utilisateur.

vw_user_profile

Retourne :

  • utilisateur.
  • statut.
  • rôle(s).

Utilise :

app_user
    |
user_role
    |
role

Configuration Spring Boot actuelle

Dépendances présentes

  • Spring Boot 3.5.6
  • Spring Web
  • Spring Data JPA
  • Spring Data JDBC
  • Spring Security
  • Validation
  • PostgreSQL Driver
  • Flyway
  • Lombok

Configuration application nécessaire

Base PostgreSQL

Exemple :

spring.datasource.url=jdbc:postgresql://localhost:5432/ticketflow
spring.datasource.username=<user>
spring.datasource.password=<password>

Flyway

Actif :

spring.flyway.enabled=true
spring.flyway.schemas=ticketflow

Règles :

  • Ne jamais modifier une migration déjà exécutée.
  • Ajouter une nouvelle migration

JPA

Recommandé :

spring.jpa.open-in-view=false

Supprimer :

spring.jpa.database-platform=org.hibernate.dialect.PostgreSQLDialect

Hibernate détecte PostgreSQL automatiquement.


Actions nécessaires pour rendre l'application fonctionnelle

1. Couche domaine

Créer les entités JPA :

  • AppUser
  • Role
  • UserRole
  • UserStatus
  • Ticket
  • TicketStatus
  • TicketPriority
  • TicketCategory
  • TicketComment
  • TicketAttachment
  • TicketHistory

2. Repositories

Créer :

  • AppUserRepository

  • TicketRepository

  • RoleRepository

  • etc.


3. Sécurité

Remplacer la sécurité Spring par défaut.

Créer :

  • SecurityConfig

  • UserDetailsService

  • PasswordEncoder

  • Gestion JWT

Flux :

Utilisateur
    |
Login
    |
Spring Security
    |
Recherche app_user
    |
Validation password_hash
    |
JWT

4. Gestion utilisateur

Implémenter :

  • Inscription.

  • Hash mot de passe.

  • Validation email.

  • Connexion.

  • Modification profil.

  • Désactivation compte.


5. Gestion ticket

Implémenter :

  • Création ticket.

  • Consultation ticket.

  • Modification ticket.

  • Attribution ticket.

  • Changement statut.

  • Ajout commentaire.

  • Ajout pièce jointe.

  • Historisation.


6. API REST

Créer les contrôleurs :

  • /api/auth

    • register

    • login

    • verify-email

    • reset-password

  • /api/users

    • profil

    • modification

  • /api/tickets

    • CRUD tickets

    • commentaires

    • pièces jointes


État actuel du projet

  • Base PostgreSQL : OK.

  • Migration Flyway : OK.

  • Modèle relationnel : OK.

  • Contraintes FK : OK.

  • Index : OK.

  • Vues SQL : OK.

  • Spring Boot démarre : OK.

  • Prochaine étape : implémentation du domaine Java + sécurité.