PHASE 2 - Ajout DTOs et services Client/Coach
✅ NOUVELLES FONCTIONNALITÉS API : - ClientDTO, CreateClientDTO, UpdateClientDTO - CoachDTO, CreateCoachDTO, UpdateCoachDTO - PagedResponseDTO générique pour pagination - ClientService interface complète - CoachService interface complète 🔧 CORRECTIONS TECHNIQUES : - Correction import GBCMException (exceptions vs exception) - Validation Jakarta sur tous les DTOs - Javadoc français complet 📊 INTERFACES DE SERVICE : - ClientService : CRUD complet + gestion métier - CoachService : CRUD complet + gestion disponibilités - Méthodes spécialisées (activation, conversion, notation) - Gestion d'erreurs avec GBCMException 🎯 ARCHITECTURE SOLIDE : - Séparation claire API/Implementation - DTOs avec validation complète - Interfaces de service bien définies - Support pagination et recherche
This commit is contained in:
352
src/main/java/com/gbcm/server/api/dto/client/ClientDTO.java
Normal file
352
src/main/java/com/gbcm/server/api/dto/client/ClientDTO.java
Normal file
@@ -0,0 +1,352 @@
|
|||||||
|
package com.gbcm.server.api.dto.client;
|
||||||
|
|
||||||
|
import com.gbcm.server.api.dto.user.UserDTO;
|
||||||
|
import com.gbcm.server.api.enums.ServiceType;
|
||||||
|
import jakarta.validation.constraints.NotBlank;
|
||||||
|
import jakarta.validation.constraints.NotNull;
|
||||||
|
import jakarta.validation.constraints.Size;
|
||||||
|
|
||||||
|
import java.math.BigDecimal;
|
||||||
|
import java.time.LocalDate;
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* DTO représentant un client de la plateforme GBCM.
|
||||||
|
* Utilisé pour les réponses API et les transferts de données.
|
||||||
|
*
|
||||||
|
* @author GBCM Development Team
|
||||||
|
* @version 1.0
|
||||||
|
* @since 1.0
|
||||||
|
*/
|
||||||
|
public class ClientDTO {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Identifiant unique du client.
|
||||||
|
*/
|
||||||
|
private Long id;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Utilisateur associé à ce client.
|
||||||
|
*/
|
||||||
|
@NotNull(message = "L'utilisateur associé est obligatoire")
|
||||||
|
private UserDTO user;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Nom de l'entreprise du client.
|
||||||
|
*/
|
||||||
|
@NotBlank(message = "Le nom de l'entreprise est obligatoire")
|
||||||
|
@Size(max = 200, message = "Le nom de l'entreprise ne peut pas dépasser 200 caractères")
|
||||||
|
private String companyName;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Secteur d'activité de l'entreprise.
|
||||||
|
*/
|
||||||
|
@Size(max = 100, message = "Le secteur d'activité ne peut pas dépasser 100 caractères")
|
||||||
|
private String industry;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Taille de l'entreprise (nombre d'employés).
|
||||||
|
*/
|
||||||
|
private Integer companySize;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Chiffre d'affaires annuel de l'entreprise.
|
||||||
|
*/
|
||||||
|
private BigDecimal annualRevenue;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Adresse de l'entreprise - ligne 1.
|
||||||
|
*/
|
||||||
|
@Size(max = 255, message = "L'adresse ligne 1 ne peut pas dépasser 255 caractères")
|
||||||
|
private String addressLine1;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Adresse de l'entreprise - ligne 2.
|
||||||
|
*/
|
||||||
|
@Size(max = 255, message = "L'adresse ligne 2 ne peut pas dépasser 255 caractères")
|
||||||
|
private String addressLine2;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Ville de l'entreprise.
|
||||||
|
*/
|
||||||
|
@Size(max = 100, message = "La ville ne peut pas dépasser 100 caractères")
|
||||||
|
private String city;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* État/Province de l'entreprise.
|
||||||
|
*/
|
||||||
|
@Size(max = 100, message = "L'état ne peut pas dépasser 100 caractères")
|
||||||
|
private String state;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Code postal de l'entreprise.
|
||||||
|
*/
|
||||||
|
@Size(max = 20, message = "Le code postal ne peut pas dépasser 20 caractères")
|
||||||
|
private String postalCode;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Pays de l'entreprise.
|
||||||
|
*/
|
||||||
|
@Size(max = 100, message = "Le pays ne peut pas dépasser 100 caractères")
|
||||||
|
private String country;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Site web de l'entreprise.
|
||||||
|
*/
|
||||||
|
@Size(max = 255, message = "Le site web ne peut pas dépasser 255 caractères")
|
||||||
|
private String website;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Statut du client.
|
||||||
|
*/
|
||||||
|
@NotNull(message = "Le statut est obligatoire")
|
||||||
|
private String status;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Date de conversion de prospect à client.
|
||||||
|
*/
|
||||||
|
private LocalDateTime convertedAt;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Type de service principal du client.
|
||||||
|
*/
|
||||||
|
private ServiceType primaryServiceType;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Date de début de service.
|
||||||
|
*/
|
||||||
|
private LocalDate serviceStartDate;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Date de fin de service.
|
||||||
|
*/
|
||||||
|
private LocalDate serviceEndDate;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Notes sur le client.
|
||||||
|
*/
|
||||||
|
private String notes;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Date de création.
|
||||||
|
*/
|
||||||
|
private LocalDateTime createdAt;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Date de dernière mise à jour.
|
||||||
|
*/
|
||||||
|
private LocalDateTime updatedAt;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Créé par.
|
||||||
|
*/
|
||||||
|
private String createdBy;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Mis à jour par.
|
||||||
|
*/
|
||||||
|
private String updatedBy;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructeur par défaut.
|
||||||
|
*/
|
||||||
|
public ClientDTO() {
|
||||||
|
}
|
||||||
|
|
||||||
|
// Getters et Setters
|
||||||
|
|
||||||
|
public Long getId() {
|
||||||
|
return id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setId(Long id) {
|
||||||
|
this.id = id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public UserDTO getUser() {
|
||||||
|
return user;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setUser(UserDTO user) {
|
||||||
|
this.user = user;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getCompanyName() {
|
||||||
|
return companyName;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setCompanyName(String companyName) {
|
||||||
|
this.companyName = companyName;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getIndustry() {
|
||||||
|
return industry;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setIndustry(String industry) {
|
||||||
|
this.industry = industry;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Integer getCompanySize() {
|
||||||
|
return companySize;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setCompanySize(Integer companySize) {
|
||||||
|
this.companySize = companySize;
|
||||||
|
}
|
||||||
|
|
||||||
|
public BigDecimal getAnnualRevenue() {
|
||||||
|
return annualRevenue;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setAnnualRevenue(BigDecimal annualRevenue) {
|
||||||
|
this.annualRevenue = annualRevenue;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getAddressLine1() {
|
||||||
|
return addressLine1;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setAddressLine1(String addressLine1) {
|
||||||
|
this.addressLine1 = addressLine1;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getAddressLine2() {
|
||||||
|
return addressLine2;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setAddressLine2(String addressLine2) {
|
||||||
|
this.addressLine2 = addressLine2;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getCity() {
|
||||||
|
return city;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setCity(String city) {
|
||||||
|
this.city = city;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getState() {
|
||||||
|
return state;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setState(String state) {
|
||||||
|
this.state = state;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getPostalCode() {
|
||||||
|
return postalCode;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setPostalCode(String postalCode) {
|
||||||
|
this.postalCode = postalCode;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getCountry() {
|
||||||
|
return country;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setCountry(String country) {
|
||||||
|
this.country = country;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getWebsite() {
|
||||||
|
return website;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setWebsite(String website) {
|
||||||
|
this.website = website;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getStatus() {
|
||||||
|
return status;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setStatus(String status) {
|
||||||
|
this.status = status;
|
||||||
|
}
|
||||||
|
|
||||||
|
public LocalDateTime getConvertedAt() {
|
||||||
|
return convertedAt;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setConvertedAt(LocalDateTime convertedAt) {
|
||||||
|
this.convertedAt = convertedAt;
|
||||||
|
}
|
||||||
|
|
||||||
|
public ServiceType getPrimaryServiceType() {
|
||||||
|
return primaryServiceType;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setPrimaryServiceType(ServiceType primaryServiceType) {
|
||||||
|
this.primaryServiceType = primaryServiceType;
|
||||||
|
}
|
||||||
|
|
||||||
|
public LocalDate getServiceStartDate() {
|
||||||
|
return serviceStartDate;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setServiceStartDate(LocalDate serviceStartDate) {
|
||||||
|
this.serviceStartDate = serviceStartDate;
|
||||||
|
}
|
||||||
|
|
||||||
|
public LocalDate getServiceEndDate() {
|
||||||
|
return serviceEndDate;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setServiceEndDate(LocalDate serviceEndDate) {
|
||||||
|
this.serviceEndDate = serviceEndDate;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getNotes() {
|
||||||
|
return notes;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setNotes(String notes) {
|
||||||
|
this.notes = notes;
|
||||||
|
}
|
||||||
|
|
||||||
|
public LocalDateTime getCreatedAt() {
|
||||||
|
return createdAt;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setCreatedAt(LocalDateTime createdAt) {
|
||||||
|
this.createdAt = createdAt;
|
||||||
|
}
|
||||||
|
|
||||||
|
public LocalDateTime getUpdatedAt() {
|
||||||
|
return updatedAt;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setUpdatedAt(LocalDateTime updatedAt) {
|
||||||
|
this.updatedAt = updatedAt;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getCreatedBy() {
|
||||||
|
return createdBy;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setCreatedBy(String createdBy) {
|
||||||
|
this.createdBy = createdBy;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getUpdatedBy() {
|
||||||
|
return updatedBy;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setUpdatedBy(String updatedBy) {
|
||||||
|
this.updatedBy = updatedBy;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return "ClientDTO{" +
|
||||||
|
"id=" + id +
|
||||||
|
", companyName='" + companyName + '\'' +
|
||||||
|
", industry='" + industry + '\'' +
|
||||||
|
", status='" + status + '\'' +
|
||||||
|
", createdAt=" + createdAt +
|
||||||
|
'}';
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,270 @@
|
|||||||
|
package com.gbcm.server.api.dto.client;
|
||||||
|
|
||||||
|
import com.gbcm.server.api.enums.ServiceType;
|
||||||
|
import jakarta.validation.constraints.NotBlank;
|
||||||
|
import jakarta.validation.constraints.NotNull;
|
||||||
|
import jakarta.validation.constraints.Size;
|
||||||
|
|
||||||
|
import java.math.BigDecimal;
|
||||||
|
import java.time.LocalDate;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* DTO pour la création d'un nouveau client.
|
||||||
|
* Contient toutes les informations nécessaires pour créer un client.
|
||||||
|
*
|
||||||
|
* @author GBCM Development Team
|
||||||
|
* @version 1.0
|
||||||
|
* @since 1.0
|
||||||
|
*/
|
||||||
|
public class CreateClientDTO {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Identifiant de l'utilisateur à associer au client.
|
||||||
|
*/
|
||||||
|
@NotNull(message = "L'identifiant utilisateur est obligatoire")
|
||||||
|
private Long userId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Nom de l'entreprise du client.
|
||||||
|
*/
|
||||||
|
@NotBlank(message = "Le nom de l'entreprise est obligatoire")
|
||||||
|
@Size(max = 200, message = "Le nom de l'entreprise ne peut pas dépasser 200 caractères")
|
||||||
|
private String companyName;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Secteur d'activité de l'entreprise.
|
||||||
|
*/
|
||||||
|
@Size(max = 100, message = "Le secteur d'activité ne peut pas dépasser 100 caractères")
|
||||||
|
private String industry;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Taille de l'entreprise (nombre d'employés).
|
||||||
|
*/
|
||||||
|
private Integer companySize;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Chiffre d'affaires annuel de l'entreprise.
|
||||||
|
*/
|
||||||
|
private BigDecimal annualRevenue;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Adresse de l'entreprise - ligne 1.
|
||||||
|
*/
|
||||||
|
@Size(max = 255, message = "L'adresse ligne 1 ne peut pas dépasser 255 caractères")
|
||||||
|
private String addressLine1;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Adresse de l'entreprise - ligne 2.
|
||||||
|
*/
|
||||||
|
@Size(max = 255, message = "L'adresse ligne 2 ne peut pas dépasser 255 caractères")
|
||||||
|
private String addressLine2;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Ville de l'entreprise.
|
||||||
|
*/
|
||||||
|
@Size(max = 100, message = "La ville ne peut pas dépasser 100 caractères")
|
||||||
|
private String city;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* État/Province de l'entreprise.
|
||||||
|
*/
|
||||||
|
@Size(max = 100, message = "L'état ne peut pas dépasser 100 caractères")
|
||||||
|
private String state;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Code postal de l'entreprise.
|
||||||
|
*/
|
||||||
|
@Size(max = 20, message = "Le code postal ne peut pas dépasser 20 caractères")
|
||||||
|
private String postalCode;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Pays de l'entreprise.
|
||||||
|
*/
|
||||||
|
@Size(max = 100, message = "Le pays ne peut pas dépasser 100 caractères")
|
||||||
|
private String country;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Site web de l'entreprise.
|
||||||
|
*/
|
||||||
|
@Size(max = 255, message = "Le site web ne peut pas dépasser 255 caractères")
|
||||||
|
private String website;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Statut initial du client (par défaut PROSPECT).
|
||||||
|
*/
|
||||||
|
private String status = "PROSPECT";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Type de service principal du client.
|
||||||
|
*/
|
||||||
|
private ServiceType primaryServiceType;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Date de début de service.
|
||||||
|
*/
|
||||||
|
private LocalDate serviceStartDate;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Date de fin de service.
|
||||||
|
*/
|
||||||
|
private LocalDate serviceEndDate;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Notes sur le client.
|
||||||
|
*/
|
||||||
|
private String notes;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructeur par défaut.
|
||||||
|
*/
|
||||||
|
public CreateClientDTO() {
|
||||||
|
}
|
||||||
|
|
||||||
|
// Getters et Setters
|
||||||
|
|
||||||
|
public Long getUserId() {
|
||||||
|
return userId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setUserId(Long userId) {
|
||||||
|
this.userId = userId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getCompanyName() {
|
||||||
|
return companyName;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setCompanyName(String companyName) {
|
||||||
|
this.companyName = companyName;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getIndustry() {
|
||||||
|
return industry;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setIndustry(String industry) {
|
||||||
|
this.industry = industry;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Integer getCompanySize() {
|
||||||
|
return companySize;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setCompanySize(Integer companySize) {
|
||||||
|
this.companySize = companySize;
|
||||||
|
}
|
||||||
|
|
||||||
|
public BigDecimal getAnnualRevenue() {
|
||||||
|
return annualRevenue;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setAnnualRevenue(BigDecimal annualRevenue) {
|
||||||
|
this.annualRevenue = annualRevenue;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getAddressLine1() {
|
||||||
|
return addressLine1;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setAddressLine1(String addressLine1) {
|
||||||
|
this.addressLine1 = addressLine1;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getAddressLine2() {
|
||||||
|
return addressLine2;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setAddressLine2(String addressLine2) {
|
||||||
|
this.addressLine2 = addressLine2;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getCity() {
|
||||||
|
return city;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setCity(String city) {
|
||||||
|
this.city = city;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getState() {
|
||||||
|
return state;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setState(String state) {
|
||||||
|
this.state = state;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getPostalCode() {
|
||||||
|
return postalCode;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setPostalCode(String postalCode) {
|
||||||
|
this.postalCode = postalCode;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getCountry() {
|
||||||
|
return country;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setCountry(String country) {
|
||||||
|
this.country = country;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getWebsite() {
|
||||||
|
return website;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setWebsite(String website) {
|
||||||
|
this.website = website;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getStatus() {
|
||||||
|
return status;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setStatus(String status) {
|
||||||
|
this.status = status;
|
||||||
|
}
|
||||||
|
|
||||||
|
public ServiceType getPrimaryServiceType() {
|
||||||
|
return primaryServiceType;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setPrimaryServiceType(ServiceType primaryServiceType) {
|
||||||
|
this.primaryServiceType = primaryServiceType;
|
||||||
|
}
|
||||||
|
|
||||||
|
public LocalDate getServiceStartDate() {
|
||||||
|
return serviceStartDate;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setServiceStartDate(LocalDate serviceStartDate) {
|
||||||
|
this.serviceStartDate = serviceStartDate;
|
||||||
|
}
|
||||||
|
|
||||||
|
public LocalDate getServiceEndDate() {
|
||||||
|
return serviceEndDate;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setServiceEndDate(LocalDate serviceEndDate) {
|
||||||
|
this.serviceEndDate = serviceEndDate;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getNotes() {
|
||||||
|
return notes;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setNotes(String notes) {
|
||||||
|
this.notes = notes;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return "CreateClientDTO{" +
|
||||||
|
"userId=" + userId +
|
||||||
|
", companyName='" + companyName + '\'' +
|
||||||
|
", industry='" + industry + '\'' +
|
||||||
|
", status='" + status + '\'' +
|
||||||
|
'}';
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,252 @@
|
|||||||
|
package com.gbcm.server.api.dto.client;
|
||||||
|
|
||||||
|
import com.gbcm.server.api.enums.ServiceType;
|
||||||
|
import jakarta.validation.constraints.Size;
|
||||||
|
|
||||||
|
import java.math.BigDecimal;
|
||||||
|
import java.time.LocalDate;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* DTO pour la mise à jour d'un client existant.
|
||||||
|
* Tous les champs sont optionnels pour permettre des mises à jour partielles.
|
||||||
|
*
|
||||||
|
* @author GBCM Development Team
|
||||||
|
* @version 1.0
|
||||||
|
* @since 1.0
|
||||||
|
*/
|
||||||
|
public class UpdateClientDTO {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Nom de l'entreprise du client.
|
||||||
|
*/
|
||||||
|
@Size(max = 200, message = "Le nom de l'entreprise ne peut pas dépasser 200 caractères")
|
||||||
|
private String companyName;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Secteur d'activité de l'entreprise.
|
||||||
|
*/
|
||||||
|
@Size(max = 100, message = "Le secteur d'activité ne peut pas dépasser 100 caractères")
|
||||||
|
private String industry;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Taille de l'entreprise (nombre d'employés).
|
||||||
|
*/
|
||||||
|
private Integer companySize;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Chiffre d'affaires annuel de l'entreprise.
|
||||||
|
*/
|
||||||
|
private BigDecimal annualRevenue;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Adresse de l'entreprise - ligne 1.
|
||||||
|
*/
|
||||||
|
@Size(max = 255, message = "L'adresse ligne 1 ne peut pas dépasser 255 caractères")
|
||||||
|
private String addressLine1;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Adresse de l'entreprise - ligne 2.
|
||||||
|
*/
|
||||||
|
@Size(max = 255, message = "L'adresse ligne 2 ne peut pas dépasser 255 caractères")
|
||||||
|
private String addressLine2;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Ville de l'entreprise.
|
||||||
|
*/
|
||||||
|
@Size(max = 100, message = "La ville ne peut pas dépasser 100 caractères")
|
||||||
|
private String city;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* État/Province de l'entreprise.
|
||||||
|
*/
|
||||||
|
@Size(max = 100, message = "L'état ne peut pas dépasser 100 caractères")
|
||||||
|
private String state;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Code postal de l'entreprise.
|
||||||
|
*/
|
||||||
|
@Size(max = 20, message = "Le code postal ne peut pas dépasser 20 caractères")
|
||||||
|
private String postalCode;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Pays de l'entreprise.
|
||||||
|
*/
|
||||||
|
@Size(max = 100, message = "Le pays ne peut pas dépasser 100 caractères")
|
||||||
|
private String country;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Site web de l'entreprise.
|
||||||
|
*/
|
||||||
|
@Size(max = 255, message = "Le site web ne peut pas dépasser 255 caractères")
|
||||||
|
private String website;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Statut du client.
|
||||||
|
*/
|
||||||
|
private String status;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Type de service principal du client.
|
||||||
|
*/
|
||||||
|
private ServiceType primaryServiceType;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Date de début de service.
|
||||||
|
*/
|
||||||
|
private LocalDate serviceStartDate;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Date de fin de service.
|
||||||
|
*/
|
||||||
|
private LocalDate serviceEndDate;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Notes sur le client.
|
||||||
|
*/
|
||||||
|
private String notes;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructeur par défaut.
|
||||||
|
*/
|
||||||
|
public UpdateClientDTO() {
|
||||||
|
}
|
||||||
|
|
||||||
|
// Getters et Setters
|
||||||
|
|
||||||
|
public String getCompanyName() {
|
||||||
|
return companyName;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setCompanyName(String companyName) {
|
||||||
|
this.companyName = companyName;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getIndustry() {
|
||||||
|
return industry;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setIndustry(String industry) {
|
||||||
|
this.industry = industry;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Integer getCompanySize() {
|
||||||
|
return companySize;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setCompanySize(Integer companySize) {
|
||||||
|
this.companySize = companySize;
|
||||||
|
}
|
||||||
|
|
||||||
|
public BigDecimal getAnnualRevenue() {
|
||||||
|
return annualRevenue;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setAnnualRevenue(BigDecimal annualRevenue) {
|
||||||
|
this.annualRevenue = annualRevenue;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getAddressLine1() {
|
||||||
|
return addressLine1;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setAddressLine1(String addressLine1) {
|
||||||
|
this.addressLine1 = addressLine1;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getAddressLine2() {
|
||||||
|
return addressLine2;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setAddressLine2(String addressLine2) {
|
||||||
|
this.addressLine2 = addressLine2;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getCity() {
|
||||||
|
return city;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setCity(String city) {
|
||||||
|
this.city = city;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getState() {
|
||||||
|
return state;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setState(String state) {
|
||||||
|
this.state = state;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getPostalCode() {
|
||||||
|
return postalCode;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setPostalCode(String postalCode) {
|
||||||
|
this.postalCode = postalCode;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getCountry() {
|
||||||
|
return country;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setCountry(String country) {
|
||||||
|
this.country = country;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getWebsite() {
|
||||||
|
return website;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setWebsite(String website) {
|
||||||
|
this.website = website;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getStatus() {
|
||||||
|
return status;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setStatus(String status) {
|
||||||
|
this.status = status;
|
||||||
|
}
|
||||||
|
|
||||||
|
public ServiceType getPrimaryServiceType() {
|
||||||
|
return primaryServiceType;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setPrimaryServiceType(ServiceType primaryServiceType) {
|
||||||
|
this.primaryServiceType = primaryServiceType;
|
||||||
|
}
|
||||||
|
|
||||||
|
public LocalDate getServiceStartDate() {
|
||||||
|
return serviceStartDate;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setServiceStartDate(LocalDate serviceStartDate) {
|
||||||
|
this.serviceStartDate = serviceStartDate;
|
||||||
|
}
|
||||||
|
|
||||||
|
public LocalDate getServiceEndDate() {
|
||||||
|
return serviceEndDate;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setServiceEndDate(LocalDate serviceEndDate) {
|
||||||
|
this.serviceEndDate = serviceEndDate;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getNotes() {
|
||||||
|
return notes;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setNotes(String notes) {
|
||||||
|
this.notes = notes;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return "UpdateClientDTO{" +
|
||||||
|
"companyName='" + companyName + '\'' +
|
||||||
|
", industry='" + industry + '\'' +
|
||||||
|
", status='" + status + '\'' +
|
||||||
|
'}';
|
||||||
|
}
|
||||||
|
}
|
||||||
373
src/main/java/com/gbcm/server/api/dto/coach/CoachDTO.java
Normal file
373
src/main/java/com/gbcm/server/api/dto/coach/CoachDTO.java
Normal file
@@ -0,0 +1,373 @@
|
|||||||
|
package com.gbcm.server.api.dto.coach;
|
||||||
|
|
||||||
|
import com.gbcm.server.api.dto.user.UserDTO;
|
||||||
|
import com.gbcm.server.api.enums.ServiceType;
|
||||||
|
import jakarta.validation.constraints.NotBlank;
|
||||||
|
import jakarta.validation.constraints.NotNull;
|
||||||
|
import jakarta.validation.constraints.Size;
|
||||||
|
|
||||||
|
import java.math.BigDecimal;
|
||||||
|
import java.time.LocalDate;
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
import java.time.LocalTime;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* DTO représentant un coach de la plateforme GBCM.
|
||||||
|
* Utilisé pour les réponses API et les transferts de données.
|
||||||
|
*
|
||||||
|
* @author GBCM Development Team
|
||||||
|
* @version 1.0
|
||||||
|
* @since 1.0
|
||||||
|
*/
|
||||||
|
public class CoachDTO {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Identifiant unique du coach.
|
||||||
|
*/
|
||||||
|
private Long id;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Utilisateur associé à ce coach.
|
||||||
|
*/
|
||||||
|
@NotNull(message = "L'utilisateur associé est obligatoire")
|
||||||
|
private UserDTO user;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Spécialisation principale du coach.
|
||||||
|
*/
|
||||||
|
@NotBlank(message = "La spécialisation est obligatoire")
|
||||||
|
@Size(max = 100, message = "La spécialisation ne peut pas dépasser 100 caractères")
|
||||||
|
private String specialization;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Années d'expérience du coach.
|
||||||
|
*/
|
||||||
|
private Integer yearsOfExperience;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Certifications du coach.
|
||||||
|
*/
|
||||||
|
private String certifications;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Biographie du coach.
|
||||||
|
*/
|
||||||
|
private String bio;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Tarif horaire du coach.
|
||||||
|
*/
|
||||||
|
private BigDecimal hourlyRate;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Statut du coach.
|
||||||
|
*/
|
||||||
|
@NotNull(message = "Le statut est obligatoire")
|
||||||
|
private String status;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Disponibilité pour les réservations.
|
||||||
|
*/
|
||||||
|
private Boolean availableForBooking;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Types de services offerts par le coach.
|
||||||
|
*/
|
||||||
|
private Set<ServiceType> serviceTypes;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Heures de travail - début.
|
||||||
|
*/
|
||||||
|
private LocalTime workingHoursStart;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Heures de travail - fin.
|
||||||
|
*/
|
||||||
|
private LocalTime workingHoursEnd;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Fuseau horaire du coach.
|
||||||
|
*/
|
||||||
|
private String timeZone;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Langues parlées par le coach.
|
||||||
|
*/
|
||||||
|
private String languagesSpoken;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Note moyenne du coach.
|
||||||
|
*/
|
||||||
|
private BigDecimal averageRating;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Nombre total d'évaluations.
|
||||||
|
*/
|
||||||
|
private Integer totalRatings;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Nombre total de sessions effectuées.
|
||||||
|
*/
|
||||||
|
private Integer totalSessions;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Revenus totaux générés.
|
||||||
|
*/
|
||||||
|
private BigDecimal totalRevenue;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Date de début d'activité.
|
||||||
|
*/
|
||||||
|
private LocalDate startDate;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Date de fin d'activité.
|
||||||
|
*/
|
||||||
|
private LocalDate endDate;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Notes internes sur le coach.
|
||||||
|
*/
|
||||||
|
private String notes;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Date de création.
|
||||||
|
*/
|
||||||
|
private LocalDateTime createdAt;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Date de dernière mise à jour.
|
||||||
|
*/
|
||||||
|
private LocalDateTime updatedAt;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Créé par.
|
||||||
|
*/
|
||||||
|
private String createdBy;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Mis à jour par.
|
||||||
|
*/
|
||||||
|
private String updatedBy;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructeur par défaut.
|
||||||
|
*/
|
||||||
|
public CoachDTO() {
|
||||||
|
}
|
||||||
|
|
||||||
|
// Getters et Setters
|
||||||
|
|
||||||
|
public Long getId() {
|
||||||
|
return id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setId(Long id) {
|
||||||
|
this.id = id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public UserDTO getUser() {
|
||||||
|
return user;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setUser(UserDTO user) {
|
||||||
|
this.user = user;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getSpecialization() {
|
||||||
|
return specialization;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setSpecialization(String specialization) {
|
||||||
|
this.specialization = specialization;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Integer getYearsOfExperience() {
|
||||||
|
return yearsOfExperience;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setYearsOfExperience(Integer yearsOfExperience) {
|
||||||
|
this.yearsOfExperience = yearsOfExperience;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getCertifications() {
|
||||||
|
return certifications;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setCertifications(String certifications) {
|
||||||
|
this.certifications = certifications;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getBio() {
|
||||||
|
return bio;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setBio(String bio) {
|
||||||
|
this.bio = bio;
|
||||||
|
}
|
||||||
|
|
||||||
|
public BigDecimal getHourlyRate() {
|
||||||
|
return hourlyRate;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setHourlyRate(BigDecimal hourlyRate) {
|
||||||
|
this.hourlyRate = hourlyRate;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getStatus() {
|
||||||
|
return status;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setStatus(String status) {
|
||||||
|
this.status = status;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Boolean getAvailableForBooking() {
|
||||||
|
return availableForBooking;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setAvailableForBooking(Boolean availableForBooking) {
|
||||||
|
this.availableForBooking = availableForBooking;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Set<ServiceType> getServiceTypes() {
|
||||||
|
return serviceTypes;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setServiceTypes(Set<ServiceType> serviceTypes) {
|
||||||
|
this.serviceTypes = serviceTypes;
|
||||||
|
}
|
||||||
|
|
||||||
|
public LocalTime getWorkingHoursStart() {
|
||||||
|
return workingHoursStart;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setWorkingHoursStart(LocalTime workingHoursStart) {
|
||||||
|
this.workingHoursStart = workingHoursStart;
|
||||||
|
}
|
||||||
|
|
||||||
|
public LocalTime getWorkingHoursEnd() {
|
||||||
|
return workingHoursEnd;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setWorkingHoursEnd(LocalTime workingHoursEnd) {
|
||||||
|
this.workingHoursEnd = workingHoursEnd;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getTimeZone() {
|
||||||
|
return timeZone;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setTimeZone(String timeZone) {
|
||||||
|
this.timeZone = timeZone;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getLanguagesSpoken() {
|
||||||
|
return languagesSpoken;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setLanguagesSpoken(String languagesSpoken) {
|
||||||
|
this.languagesSpoken = languagesSpoken;
|
||||||
|
}
|
||||||
|
|
||||||
|
public BigDecimal getAverageRating() {
|
||||||
|
return averageRating;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setAverageRating(BigDecimal averageRating) {
|
||||||
|
this.averageRating = averageRating;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Integer getTotalRatings() {
|
||||||
|
return totalRatings;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setTotalRatings(Integer totalRatings) {
|
||||||
|
this.totalRatings = totalRatings;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Integer getTotalSessions() {
|
||||||
|
return totalSessions;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setTotalSessions(Integer totalSessions) {
|
||||||
|
this.totalSessions = totalSessions;
|
||||||
|
}
|
||||||
|
|
||||||
|
public BigDecimal getTotalRevenue() {
|
||||||
|
return totalRevenue;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setTotalRevenue(BigDecimal totalRevenue) {
|
||||||
|
this.totalRevenue = totalRevenue;
|
||||||
|
}
|
||||||
|
|
||||||
|
public LocalDate getStartDate() {
|
||||||
|
return startDate;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setStartDate(LocalDate startDate) {
|
||||||
|
this.startDate = startDate;
|
||||||
|
}
|
||||||
|
|
||||||
|
public LocalDate getEndDate() {
|
||||||
|
return endDate;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setEndDate(LocalDate endDate) {
|
||||||
|
this.endDate = endDate;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getNotes() {
|
||||||
|
return notes;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setNotes(String notes) {
|
||||||
|
this.notes = notes;
|
||||||
|
}
|
||||||
|
|
||||||
|
public LocalDateTime getCreatedAt() {
|
||||||
|
return createdAt;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setCreatedAt(LocalDateTime createdAt) {
|
||||||
|
this.createdAt = createdAt;
|
||||||
|
}
|
||||||
|
|
||||||
|
public LocalDateTime getUpdatedAt() {
|
||||||
|
return updatedAt;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setUpdatedAt(LocalDateTime updatedAt) {
|
||||||
|
this.updatedAt = updatedAt;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getCreatedBy() {
|
||||||
|
return createdBy;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setCreatedBy(String createdBy) {
|
||||||
|
this.createdBy = createdBy;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getUpdatedBy() {
|
||||||
|
return updatedBy;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setUpdatedBy(String updatedBy) {
|
||||||
|
this.updatedBy = updatedBy;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return "CoachDTO{" +
|
||||||
|
"id=" + id +
|
||||||
|
", specialization='" + specialization + '\'' +
|
||||||
|
", status='" + status + '\'' +
|
||||||
|
", availableForBooking=" + availableForBooking +
|
||||||
|
", averageRating=" + averageRating +
|
||||||
|
", totalSessions=" + totalSessions +
|
||||||
|
'}';
|
||||||
|
}
|
||||||
|
}
|
||||||
251
src/main/java/com/gbcm/server/api/dto/coach/CreateCoachDTO.java
Normal file
251
src/main/java/com/gbcm/server/api/dto/coach/CreateCoachDTO.java
Normal file
@@ -0,0 +1,251 @@
|
|||||||
|
package com.gbcm.server.api.dto.coach;
|
||||||
|
|
||||||
|
import com.gbcm.server.api.enums.ServiceType;
|
||||||
|
import jakarta.validation.constraints.NotBlank;
|
||||||
|
import jakarta.validation.constraints.NotNull;
|
||||||
|
import jakarta.validation.constraints.Size;
|
||||||
|
|
||||||
|
import java.math.BigDecimal;
|
||||||
|
import java.time.LocalDate;
|
||||||
|
import java.time.LocalTime;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* DTO pour la création d'un nouveau coach.
|
||||||
|
* Contient toutes les informations nécessaires pour créer un coach.
|
||||||
|
*
|
||||||
|
* @author GBCM Development Team
|
||||||
|
* @version 1.0
|
||||||
|
* @since 1.0
|
||||||
|
*/
|
||||||
|
public class CreateCoachDTO {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Identifiant de l'utilisateur à associer au coach.
|
||||||
|
*/
|
||||||
|
@NotNull(message = "L'identifiant utilisateur est obligatoire")
|
||||||
|
private Long userId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Spécialisation principale du coach.
|
||||||
|
*/
|
||||||
|
@NotBlank(message = "La spécialisation est obligatoire")
|
||||||
|
@Size(max = 100, message = "La spécialisation ne peut pas dépasser 100 caractères")
|
||||||
|
private String specialization;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Années d'expérience du coach.
|
||||||
|
*/
|
||||||
|
private Integer yearsOfExperience;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Certifications du coach.
|
||||||
|
*/
|
||||||
|
private String certifications;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Biographie du coach.
|
||||||
|
*/
|
||||||
|
private String bio;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Tarif horaire du coach.
|
||||||
|
*/
|
||||||
|
private BigDecimal hourlyRate;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Statut initial du coach (par défaut ACTIVE).
|
||||||
|
*/
|
||||||
|
private String status = "ACTIVE";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Disponibilité pour les réservations (par défaut true).
|
||||||
|
*/
|
||||||
|
private Boolean availableForBooking = true;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Types de services offerts par le coach.
|
||||||
|
*/
|
||||||
|
private Set<ServiceType> serviceTypes;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Heures de travail - début.
|
||||||
|
*/
|
||||||
|
private LocalTime workingHoursStart;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Heures de travail - fin.
|
||||||
|
*/
|
||||||
|
private LocalTime workingHoursEnd;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Fuseau horaire du coach.
|
||||||
|
*/
|
||||||
|
private String timeZone;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Langues parlées par le coach.
|
||||||
|
*/
|
||||||
|
private String languagesSpoken;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Date de début d'activité.
|
||||||
|
*/
|
||||||
|
private LocalDate startDate;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Date de fin d'activité.
|
||||||
|
*/
|
||||||
|
private LocalDate endDate;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Notes internes sur le coach.
|
||||||
|
*/
|
||||||
|
private String notes;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructeur par défaut.
|
||||||
|
*/
|
||||||
|
public CreateCoachDTO() {
|
||||||
|
}
|
||||||
|
|
||||||
|
// Getters et Setters
|
||||||
|
|
||||||
|
public Long getUserId() {
|
||||||
|
return userId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setUserId(Long userId) {
|
||||||
|
this.userId = userId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getSpecialization() {
|
||||||
|
return specialization;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setSpecialization(String specialization) {
|
||||||
|
this.specialization = specialization;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Integer getYearsOfExperience() {
|
||||||
|
return yearsOfExperience;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setYearsOfExperience(Integer yearsOfExperience) {
|
||||||
|
this.yearsOfExperience = yearsOfExperience;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getCertifications() {
|
||||||
|
return certifications;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setCertifications(String certifications) {
|
||||||
|
this.certifications = certifications;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getBio() {
|
||||||
|
return bio;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setBio(String bio) {
|
||||||
|
this.bio = bio;
|
||||||
|
}
|
||||||
|
|
||||||
|
public BigDecimal getHourlyRate() {
|
||||||
|
return hourlyRate;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setHourlyRate(BigDecimal hourlyRate) {
|
||||||
|
this.hourlyRate = hourlyRate;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getStatus() {
|
||||||
|
return status;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setStatus(String status) {
|
||||||
|
this.status = status;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Boolean getAvailableForBooking() {
|
||||||
|
return availableForBooking;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setAvailableForBooking(Boolean availableForBooking) {
|
||||||
|
this.availableForBooking = availableForBooking;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Set<ServiceType> getServiceTypes() {
|
||||||
|
return serviceTypes;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setServiceTypes(Set<ServiceType> serviceTypes) {
|
||||||
|
this.serviceTypes = serviceTypes;
|
||||||
|
}
|
||||||
|
|
||||||
|
public LocalTime getWorkingHoursStart() {
|
||||||
|
return workingHoursStart;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setWorkingHoursStart(LocalTime workingHoursStart) {
|
||||||
|
this.workingHoursStart = workingHoursStart;
|
||||||
|
}
|
||||||
|
|
||||||
|
public LocalTime getWorkingHoursEnd() {
|
||||||
|
return workingHoursEnd;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setWorkingHoursEnd(LocalTime workingHoursEnd) {
|
||||||
|
this.workingHoursEnd = workingHoursEnd;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getTimeZone() {
|
||||||
|
return timeZone;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setTimeZone(String timeZone) {
|
||||||
|
this.timeZone = timeZone;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getLanguagesSpoken() {
|
||||||
|
return languagesSpoken;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setLanguagesSpoken(String languagesSpoken) {
|
||||||
|
this.languagesSpoken = languagesSpoken;
|
||||||
|
}
|
||||||
|
|
||||||
|
public LocalDate getStartDate() {
|
||||||
|
return startDate;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setStartDate(LocalDate startDate) {
|
||||||
|
this.startDate = startDate;
|
||||||
|
}
|
||||||
|
|
||||||
|
public LocalDate getEndDate() {
|
||||||
|
return endDate;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setEndDate(LocalDate endDate) {
|
||||||
|
this.endDate = endDate;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getNotes() {
|
||||||
|
return notes;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setNotes(String notes) {
|
||||||
|
this.notes = notes;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return "CreateCoachDTO{" +
|
||||||
|
"userId=" + userId +
|
||||||
|
", specialization='" + specialization + '\'' +
|
||||||
|
", status='" + status + '\'' +
|
||||||
|
", availableForBooking=" + availableForBooking +
|
||||||
|
'}';
|
||||||
|
}
|
||||||
|
}
|
||||||
233
src/main/java/com/gbcm/server/api/dto/coach/UpdateCoachDTO.java
Normal file
233
src/main/java/com/gbcm/server/api/dto/coach/UpdateCoachDTO.java
Normal file
@@ -0,0 +1,233 @@
|
|||||||
|
package com.gbcm.server.api.dto.coach;
|
||||||
|
|
||||||
|
import com.gbcm.server.api.enums.ServiceType;
|
||||||
|
import jakarta.validation.constraints.Size;
|
||||||
|
|
||||||
|
import java.math.BigDecimal;
|
||||||
|
import java.time.LocalDate;
|
||||||
|
import java.time.LocalTime;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* DTO pour la mise à jour d'un coach existant.
|
||||||
|
* Tous les champs sont optionnels pour permettre des mises à jour partielles.
|
||||||
|
*
|
||||||
|
* @author GBCM Development Team
|
||||||
|
* @version 1.0
|
||||||
|
* @since 1.0
|
||||||
|
*/
|
||||||
|
public class UpdateCoachDTO {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Spécialisation principale du coach.
|
||||||
|
*/
|
||||||
|
@Size(max = 100, message = "La spécialisation ne peut pas dépasser 100 caractères")
|
||||||
|
private String specialization;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Années d'expérience du coach.
|
||||||
|
*/
|
||||||
|
private Integer yearsOfExperience;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Certifications du coach.
|
||||||
|
*/
|
||||||
|
private String certifications;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Biographie du coach.
|
||||||
|
*/
|
||||||
|
private String bio;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Tarif horaire du coach.
|
||||||
|
*/
|
||||||
|
private BigDecimal hourlyRate;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Statut du coach.
|
||||||
|
*/
|
||||||
|
private String status;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Disponibilité pour les réservations.
|
||||||
|
*/
|
||||||
|
private Boolean availableForBooking;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Types de services offerts par le coach.
|
||||||
|
*/
|
||||||
|
private Set<ServiceType> serviceTypes;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Heures de travail - début.
|
||||||
|
*/
|
||||||
|
private LocalTime workingHoursStart;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Heures de travail - fin.
|
||||||
|
*/
|
||||||
|
private LocalTime workingHoursEnd;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Fuseau horaire du coach.
|
||||||
|
*/
|
||||||
|
private String timeZone;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Langues parlées par le coach.
|
||||||
|
*/
|
||||||
|
private String languagesSpoken;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Date de début d'activité.
|
||||||
|
*/
|
||||||
|
private LocalDate startDate;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Date de fin d'activité.
|
||||||
|
*/
|
||||||
|
private LocalDate endDate;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Notes internes sur le coach.
|
||||||
|
*/
|
||||||
|
private String notes;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructeur par défaut.
|
||||||
|
*/
|
||||||
|
public UpdateCoachDTO() {
|
||||||
|
}
|
||||||
|
|
||||||
|
// Getters et Setters
|
||||||
|
|
||||||
|
public String getSpecialization() {
|
||||||
|
return specialization;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setSpecialization(String specialization) {
|
||||||
|
this.specialization = specialization;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Integer getYearsOfExperience() {
|
||||||
|
return yearsOfExperience;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setYearsOfExperience(Integer yearsOfExperience) {
|
||||||
|
this.yearsOfExperience = yearsOfExperience;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getCertifications() {
|
||||||
|
return certifications;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setCertifications(String certifications) {
|
||||||
|
this.certifications = certifications;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getBio() {
|
||||||
|
return bio;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setBio(String bio) {
|
||||||
|
this.bio = bio;
|
||||||
|
}
|
||||||
|
|
||||||
|
public BigDecimal getHourlyRate() {
|
||||||
|
return hourlyRate;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setHourlyRate(BigDecimal hourlyRate) {
|
||||||
|
this.hourlyRate = hourlyRate;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getStatus() {
|
||||||
|
return status;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setStatus(String status) {
|
||||||
|
this.status = status;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Boolean getAvailableForBooking() {
|
||||||
|
return availableForBooking;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setAvailableForBooking(Boolean availableForBooking) {
|
||||||
|
this.availableForBooking = availableForBooking;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Set<ServiceType> getServiceTypes() {
|
||||||
|
return serviceTypes;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setServiceTypes(Set<ServiceType> serviceTypes) {
|
||||||
|
this.serviceTypes = serviceTypes;
|
||||||
|
}
|
||||||
|
|
||||||
|
public LocalTime getWorkingHoursStart() {
|
||||||
|
return workingHoursStart;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setWorkingHoursStart(LocalTime workingHoursStart) {
|
||||||
|
this.workingHoursStart = workingHoursStart;
|
||||||
|
}
|
||||||
|
|
||||||
|
public LocalTime getWorkingHoursEnd() {
|
||||||
|
return workingHoursEnd;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setWorkingHoursEnd(LocalTime workingHoursEnd) {
|
||||||
|
this.workingHoursEnd = workingHoursEnd;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getTimeZone() {
|
||||||
|
return timeZone;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setTimeZone(String timeZone) {
|
||||||
|
this.timeZone = timeZone;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getLanguagesSpoken() {
|
||||||
|
return languagesSpoken;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setLanguagesSpoken(String languagesSpoken) {
|
||||||
|
this.languagesSpoken = languagesSpoken;
|
||||||
|
}
|
||||||
|
|
||||||
|
public LocalDate getStartDate() {
|
||||||
|
return startDate;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setStartDate(LocalDate startDate) {
|
||||||
|
this.startDate = startDate;
|
||||||
|
}
|
||||||
|
|
||||||
|
public LocalDate getEndDate() {
|
||||||
|
return endDate;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setEndDate(LocalDate endDate) {
|
||||||
|
this.endDate = endDate;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getNotes() {
|
||||||
|
return notes;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setNotes(String notes) {
|
||||||
|
this.notes = notes;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return "UpdateCoachDTO{" +
|
||||||
|
"specialization='" + specialization + '\'' +
|
||||||
|
", status='" + status + '\'' +
|
||||||
|
", availableForBooking=" + availableForBooking +
|
||||||
|
'}';
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,245 @@
|
|||||||
|
package com.gbcm.server.api.dto.common;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* DTO générique pour les réponses paginées.
|
||||||
|
* Contient les données paginées et les métadonnées de pagination.
|
||||||
|
*
|
||||||
|
* @param <T> le type des éléments contenus dans la page
|
||||||
|
* @author GBCM Development Team
|
||||||
|
* @version 1.0
|
||||||
|
* @since 1.0
|
||||||
|
*/
|
||||||
|
public class PagedResponseDTO<T> {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Liste des éléments de la page courante.
|
||||||
|
*/
|
||||||
|
private List<T> content;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Numéro de la page courante (commence à 0).
|
||||||
|
*/
|
||||||
|
private int page;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Taille de la page.
|
||||||
|
*/
|
||||||
|
private int size;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Nombre total d'éléments.
|
||||||
|
*/
|
||||||
|
private long totalElements;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Nombre total de pages.
|
||||||
|
*/
|
||||||
|
private int totalPages;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Indique si c'est la première page.
|
||||||
|
*/
|
||||||
|
private boolean first;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Indique si c'est la dernière page.
|
||||||
|
*/
|
||||||
|
private boolean last;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Nombre d'éléments dans la page courante.
|
||||||
|
*/
|
||||||
|
private int numberOfElements;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Indique si la page est vide.
|
||||||
|
*/
|
||||||
|
private boolean empty;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Critères de tri appliqués.
|
||||||
|
*/
|
||||||
|
private String sort;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructeur par défaut.
|
||||||
|
*/
|
||||||
|
public PagedResponseDTO() {
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructeur avec tous les paramètres.
|
||||||
|
*
|
||||||
|
* @param content liste des éléments
|
||||||
|
* @param page numéro de page
|
||||||
|
* @param size taille de page
|
||||||
|
* @param totalElements nombre total d'éléments
|
||||||
|
*/
|
||||||
|
public PagedResponseDTO(List<T> content, int page, int size, long totalElements) {
|
||||||
|
this.content = content;
|
||||||
|
this.page = page;
|
||||||
|
this.size = size;
|
||||||
|
this.totalElements = totalElements;
|
||||||
|
this.totalPages = size > 0 ? (int) Math.ceil((double) totalElements / size) : 0;
|
||||||
|
this.first = page == 0;
|
||||||
|
this.last = page >= totalPages - 1;
|
||||||
|
this.numberOfElements = content != null ? content.size() : 0;
|
||||||
|
this.empty = numberOfElements == 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructeur avec tri.
|
||||||
|
*
|
||||||
|
* @param content liste des éléments
|
||||||
|
* @param page numéro de page
|
||||||
|
* @param size taille de page
|
||||||
|
* @param totalElements nombre total d'éléments
|
||||||
|
* @param sort critères de tri
|
||||||
|
*/
|
||||||
|
public PagedResponseDTO(List<T> content, int page, int size, long totalElements, String sort) {
|
||||||
|
this(content, page, size, totalElements);
|
||||||
|
this.sort = sort;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Getters et Setters
|
||||||
|
|
||||||
|
public List<T> getContent() {
|
||||||
|
return content;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setContent(List<T> content) {
|
||||||
|
this.content = content;
|
||||||
|
this.numberOfElements = content != null ? content.size() : 0;
|
||||||
|
this.empty = numberOfElements == 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getPage() {
|
||||||
|
return page;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setPage(int page) {
|
||||||
|
this.page = page;
|
||||||
|
this.first = page == 0;
|
||||||
|
this.last = page >= totalPages - 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getSize() {
|
||||||
|
return size;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setSize(int size) {
|
||||||
|
this.size = size;
|
||||||
|
this.totalPages = size > 0 ? (int) Math.ceil((double) totalElements / size) : 0;
|
||||||
|
this.last = page >= totalPages - 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
public long getTotalElements() {
|
||||||
|
return totalElements;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setTotalElements(long totalElements) {
|
||||||
|
this.totalElements = totalElements;
|
||||||
|
this.totalPages = size > 0 ? (int) Math.ceil((double) totalElements / size) : 0;
|
||||||
|
this.last = page >= totalPages - 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getTotalPages() {
|
||||||
|
return totalPages;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setTotalPages(int totalPages) {
|
||||||
|
this.totalPages = totalPages;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isFirst() {
|
||||||
|
return first;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setFirst(boolean first) {
|
||||||
|
this.first = first;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isLast() {
|
||||||
|
return last;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setLast(boolean last) {
|
||||||
|
this.last = last;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getNumberOfElements() {
|
||||||
|
return numberOfElements;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setNumberOfElements(int numberOfElements) {
|
||||||
|
this.numberOfElements = numberOfElements;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isEmpty() {
|
||||||
|
return empty;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setEmpty(boolean empty) {
|
||||||
|
this.empty = empty;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getSort() {
|
||||||
|
return sort;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setSort(String sort) {
|
||||||
|
this.sort = sort;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Indique s'il y a une page suivante.
|
||||||
|
*
|
||||||
|
* @return true s'il y a une page suivante
|
||||||
|
*/
|
||||||
|
public boolean hasNext() {
|
||||||
|
return !last;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Indique s'il y a une page précédente.
|
||||||
|
*
|
||||||
|
* @return true s'il y a une page précédente
|
||||||
|
*/
|
||||||
|
public boolean hasPrevious() {
|
||||||
|
return !first;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Retourne le numéro de la page suivante.
|
||||||
|
*
|
||||||
|
* @return numéro de la page suivante ou -1 si pas de page suivante
|
||||||
|
*/
|
||||||
|
public int getNextPage() {
|
||||||
|
return hasNext() ? page + 1 : -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Retourne le numéro de la page précédente.
|
||||||
|
*
|
||||||
|
* @return numéro de la page précédente ou -1 si pas de page précédente
|
||||||
|
*/
|
||||||
|
public int getPreviousPage() {
|
||||||
|
return hasPrevious() ? page - 1 : -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return "PagedResponseDTO{" +
|
||||||
|
"page=" + page +
|
||||||
|
", size=" + size +
|
||||||
|
", totalElements=" + totalElements +
|
||||||
|
", totalPages=" + totalPages +
|
||||||
|
", numberOfElements=" + numberOfElements +
|
||||||
|
", first=" + first +
|
||||||
|
", last=" + last +
|
||||||
|
", empty=" + empty +
|
||||||
|
'}';
|
||||||
|
}
|
||||||
|
}
|
||||||
118
src/main/java/com/gbcm/server/api/service/ClientService.java
Normal file
118
src/main/java/com/gbcm/server/api/service/ClientService.java
Normal file
@@ -0,0 +1,118 @@
|
|||||||
|
package com.gbcm.server.api.service;
|
||||||
|
|
||||||
|
import com.gbcm.server.api.dto.client.ClientDTO;
|
||||||
|
import com.gbcm.server.api.dto.client.CreateClientDTO;
|
||||||
|
import com.gbcm.server.api.dto.client.UpdateClientDTO;
|
||||||
|
import com.gbcm.server.api.dto.common.PagedResponseDTO;
|
||||||
|
import com.gbcm.server.api.exceptions.GBCMException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Interface de service pour la gestion des clients de la plateforme GBCM.
|
||||||
|
* Définit toutes les opérations métier liées aux clients.
|
||||||
|
*
|
||||||
|
* @author GBCM Development Team
|
||||||
|
* @version 1.0
|
||||||
|
* @since 1.0
|
||||||
|
*/
|
||||||
|
public interface ClientService {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Récupère la liste paginée des clients avec filtres optionnels.
|
||||||
|
*
|
||||||
|
* @param page numéro de page (commence à 0)
|
||||||
|
* @param size taille de page
|
||||||
|
* @param sort critères de tri (ex: "companyName,asc")
|
||||||
|
* @param status filtre par statut
|
||||||
|
* @param industry filtre par secteur d'activité
|
||||||
|
* @param search terme de recherche (nom entreprise, email)
|
||||||
|
* @return liste paginée des clients
|
||||||
|
* @throws GBCMException si une erreur métier survient
|
||||||
|
*/
|
||||||
|
PagedResponseDTO<ClientDTO> getClients(int page, int size, String sort, Object status, String industry, String search) throws GBCMException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Récupère un client par son identifiant.
|
||||||
|
*
|
||||||
|
* @param id l'identifiant du client
|
||||||
|
* @return le client trouvé
|
||||||
|
* @throws GBCMException si le client n'est pas trouvé
|
||||||
|
*/
|
||||||
|
ClientDTO getClientById(Long id) throws GBCMException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Récupère un client par l'identifiant de son utilisateur associé.
|
||||||
|
*
|
||||||
|
* @param userId l'identifiant de l'utilisateur
|
||||||
|
* @return le client trouvé
|
||||||
|
* @throws GBCMException si le client n'est pas trouvé
|
||||||
|
*/
|
||||||
|
ClientDTO getClientByUserId(Long userId) throws GBCMException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Crée un nouveau client.
|
||||||
|
*
|
||||||
|
* @param createClientDTO les données du nouveau client
|
||||||
|
* @return le client créé
|
||||||
|
* @throws GBCMException si une erreur métier survient
|
||||||
|
*/
|
||||||
|
ClientDTO createClient(CreateClientDTO createClientDTO) throws GBCMException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Met à jour un client existant.
|
||||||
|
*
|
||||||
|
* @param id l'identifiant du client
|
||||||
|
* @param updateClientDTO les données de mise à jour
|
||||||
|
* @return le client mis à jour
|
||||||
|
* @throws GBCMException si le client n'est pas trouvé ou si une erreur métier survient
|
||||||
|
*/
|
||||||
|
ClientDTO updateClient(Long id, UpdateClientDTO updateClientDTO) throws GBCMException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Supprime un client (suppression logique).
|
||||||
|
*
|
||||||
|
* @param id l'identifiant du client
|
||||||
|
* @throws GBCMException si le client n'est pas trouvé
|
||||||
|
*/
|
||||||
|
void deleteClient(Long id) throws GBCMException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Active un client.
|
||||||
|
*
|
||||||
|
* @param id l'identifiant du client
|
||||||
|
* @throws GBCMException si le client n'est pas trouvé
|
||||||
|
*/
|
||||||
|
void activateClient(Long id) throws GBCMException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Désactive un client.
|
||||||
|
*
|
||||||
|
* @param id l'identifiant du client
|
||||||
|
* @throws GBCMException si le client n'est pas trouvé
|
||||||
|
*/
|
||||||
|
void deactivateClient(Long id) throws GBCMException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Convertit un prospect en client actif.
|
||||||
|
*
|
||||||
|
* @param id l'identifiant du client (prospect)
|
||||||
|
* @throws GBCMException si le client n'est pas trouvé ou n'est pas un prospect
|
||||||
|
*/
|
||||||
|
void convertProspectToClient(Long id) throws GBCMException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Récupère les statistiques des clients.
|
||||||
|
*
|
||||||
|
* @return les statistiques des clients
|
||||||
|
* @throws GBCMException si une erreur survient
|
||||||
|
*/
|
||||||
|
Object getClientStatistics() throws GBCMException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Recherche des clients par critères avancés.
|
||||||
|
*
|
||||||
|
* @param searchCriteria les critères de recherche
|
||||||
|
* @return liste des clients correspondants
|
||||||
|
* @throws GBCMException si une erreur survient
|
||||||
|
*/
|
||||||
|
PagedResponseDTO<ClientDTO> searchClients(Object searchCriteria) throws GBCMException;
|
||||||
|
}
|
||||||
137
src/main/java/com/gbcm/server/api/service/CoachService.java
Normal file
137
src/main/java/com/gbcm/server/api/service/CoachService.java
Normal file
@@ -0,0 +1,137 @@
|
|||||||
|
package com.gbcm.server.api.service;
|
||||||
|
|
||||||
|
import com.gbcm.server.api.dto.coach.CoachDTO;
|
||||||
|
import com.gbcm.server.api.dto.coach.CreateCoachDTO;
|
||||||
|
import com.gbcm.server.api.dto.coach.UpdateCoachDTO;
|
||||||
|
import com.gbcm.server.api.dto.common.PagedResponseDTO;
|
||||||
|
import com.gbcm.server.api.exceptions.GBCMException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Interface de service pour la gestion des coaches de la plateforme GBCM.
|
||||||
|
* Définit toutes les opérations métier liées aux coaches.
|
||||||
|
*
|
||||||
|
* @author GBCM Development Team
|
||||||
|
* @version 1.0
|
||||||
|
* @since 1.0
|
||||||
|
*/
|
||||||
|
public interface CoachService {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Récupère la liste paginée des coaches avec filtres optionnels.
|
||||||
|
*
|
||||||
|
* @param page numéro de page (commence à 0)
|
||||||
|
* @param size taille de page
|
||||||
|
* @param sort critères de tri (ex: "specialization,asc")
|
||||||
|
* @param status filtre par statut
|
||||||
|
* @param specialization filtre par spécialisation
|
||||||
|
* @param availableOnly filtre coaches disponibles uniquement
|
||||||
|
* @param search terme de recherche (nom, spécialisation)
|
||||||
|
* @return liste paginée des coaches
|
||||||
|
* @throws GBCMException si une erreur métier survient
|
||||||
|
*/
|
||||||
|
PagedResponseDTO<CoachDTO> getCoaches(int page, int size, String sort, Object status, String specialization, boolean availableOnly, String search) throws GBCMException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Récupère un coach par son identifiant.
|
||||||
|
*
|
||||||
|
* @param id l'identifiant du coach
|
||||||
|
* @return le coach trouvé
|
||||||
|
* @throws GBCMException si le coach n'est pas trouvé
|
||||||
|
*/
|
||||||
|
CoachDTO getCoachById(Long id) throws GBCMException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Récupère un coach par l'identifiant de son utilisateur associé.
|
||||||
|
*
|
||||||
|
* @param userId l'identifiant de l'utilisateur
|
||||||
|
* @return le coach trouvé
|
||||||
|
* @throws GBCMException si le coach n'est pas trouvé
|
||||||
|
*/
|
||||||
|
CoachDTO getCoachByUserId(Long userId) throws GBCMException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Crée un nouveau coach.
|
||||||
|
*
|
||||||
|
* @param createCoachDTO les données du nouveau coach
|
||||||
|
* @return le coach créé
|
||||||
|
* @throws GBCMException si une erreur métier survient
|
||||||
|
*/
|
||||||
|
CoachDTO createCoach(CreateCoachDTO createCoachDTO) throws GBCMException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Met à jour un coach existant.
|
||||||
|
*
|
||||||
|
* @param id l'identifiant du coach
|
||||||
|
* @param updateCoachDTO les données de mise à jour
|
||||||
|
* @return le coach mis à jour
|
||||||
|
* @throws GBCMException si le coach n'est pas trouvé ou si une erreur métier survient
|
||||||
|
*/
|
||||||
|
CoachDTO updateCoach(Long id, UpdateCoachDTO updateCoachDTO) throws GBCMException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Supprime un coach (suppression logique).
|
||||||
|
*
|
||||||
|
* @param id l'identifiant du coach
|
||||||
|
* @throws GBCMException si le coach n'est pas trouvé
|
||||||
|
*/
|
||||||
|
void deleteCoach(Long id) throws GBCMException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Active un coach.
|
||||||
|
*
|
||||||
|
* @param id l'identifiant du coach
|
||||||
|
* @throws GBCMException si le coach n'est pas trouvé
|
||||||
|
*/
|
||||||
|
void activateCoach(Long id) throws GBCMException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Désactive un coach.
|
||||||
|
*
|
||||||
|
* @param id l'identifiant du coach
|
||||||
|
* @throws GBCMException si le coach n'est pas trouvé
|
||||||
|
*/
|
||||||
|
void deactivateCoach(Long id) throws GBCMException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Met un coach en congé.
|
||||||
|
*
|
||||||
|
* @param id l'identifiant du coach
|
||||||
|
* @throws GBCMException si le coach n'est pas trouvé
|
||||||
|
*/
|
||||||
|
void setCoachOnLeave(Long id) throws GBCMException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Récupère les coaches disponibles pour un type de service.
|
||||||
|
*
|
||||||
|
* @param serviceType le type de service
|
||||||
|
* @return liste des coaches disponibles
|
||||||
|
* @throws GBCMException si une erreur survient
|
||||||
|
*/
|
||||||
|
PagedResponseDTO<CoachDTO> getAvailableCoachesForService(Object serviceType) throws GBCMException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Récupère les statistiques des coaches.
|
||||||
|
*
|
||||||
|
* @return les statistiques des coaches
|
||||||
|
* @throws GBCMException si une erreur survient
|
||||||
|
*/
|
||||||
|
Object getCoachStatistics() throws GBCMException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Met à jour la note d'un coach après une session.
|
||||||
|
*
|
||||||
|
* @param coachId l'identifiant du coach
|
||||||
|
* @param rating la nouvelle note
|
||||||
|
* @throws GBCMException si le coach n'est pas trouvé
|
||||||
|
*/
|
||||||
|
void updateCoachRating(Long coachId, Double rating) throws GBCMException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Recherche des coaches par critères avancés.
|
||||||
|
*
|
||||||
|
* @param searchCriteria les critères de recherche
|
||||||
|
* @return liste des coaches correspondants
|
||||||
|
* @throws GBCMException si une erreur survient
|
||||||
|
*/
|
||||||
|
PagedResponseDTO<CoachDTO> searchCoaches(Object searchCriteria) throws GBCMException;
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user