feat: Real data integration - Repository pattern, DTOs, REST services, dashboard metrics
This commit is contained in:
@@ -21,20 +21,16 @@ import java.util.List;
|
||||
*/
|
||||
@Entity
|
||||
@Table(name = "clients", indexes = {
|
||||
@Index(name = "idx_clients_user_id", columnList = "user_id", unique = true),
|
||||
@Index(name = "idx_clients_company", columnList = "company_name"),
|
||||
@Index(name = "idx_clients_status", columnList = "status"),
|
||||
@Index(name = "idx_clients_deleted", columnList = "deleted")
|
||||
@Index(name = "idx_clients_user_id", columnList = "user_id", unique = true),
|
||||
@Index(name = "idx_clients_company", columnList = "company_name"),
|
||||
@Index(name = "idx_clients_status", columnList = "status"),
|
||||
@Index(name = "idx_clients_deleted", columnList = "deleted")
|
||||
})
|
||||
@NamedQueries({
|
||||
@NamedQuery(name = "Client.findByUserId",
|
||||
query = "SELECT c FROM Client c WHERE c.user.id = :userId AND c.deleted = false"),
|
||||
@NamedQuery(name = "Client.findByStatus",
|
||||
query = "SELECT c FROM Client c WHERE c.status = :status AND c.deleted = false"),
|
||||
@NamedQuery(name = "Client.findByCompanyName",
|
||||
query = "SELECT c FROM Client c WHERE LOWER(c.companyName) LIKE LOWER(:companyName) AND c.deleted = false"),
|
||||
@NamedQuery(name = "Client.findActiveClients",
|
||||
query = "SELECT c FROM Client c WHERE c.status = 'ACTIVE' AND c.deleted = false")
|
||||
@NamedQuery(name = "Client.findByUserId", query = "SELECT c FROM Client c WHERE c.user.id = :userId AND c.deleted = false"),
|
||||
@NamedQuery(name = "Client.findByStatus", query = "SELECT c FROM Client c WHERE c.status = :status AND c.deleted = false"),
|
||||
@NamedQuery(name = "Client.findByCompanyName", query = "SELECT c FROM Client c WHERE LOWER(c.companyName) LIKE LOWER(:companyName) AND c.deleted = false"),
|
||||
@NamedQuery(name = "Client.findActiveClients", query = "SELECT c FROM Client c WHERE c.status = 'ACTIVE' AND c.deleted = false")
|
||||
})
|
||||
public class Client extends BaseEntity {
|
||||
|
||||
@@ -50,8 +46,7 @@ public class Client extends BaseEntity {
|
||||
* Relation one-to-one obligatoire.
|
||||
*/
|
||||
@OneToOne(fetch = FetchType.LAZY, optional = false)
|
||||
@JoinColumn(name = "user_id", nullable = false, unique = true,
|
||||
foreignKey = @ForeignKey(name = "fk_clients_user_id"))
|
||||
@JoinColumn(name = "user_id", nullable = false, unique = true, foreignKey = @ForeignKey(name = "fk_clients_user_id"))
|
||||
@NotNull(message = "L'utilisateur associé est obligatoire")
|
||||
private User user;
|
||||
|
||||
@@ -82,6 +77,20 @@ public class Client extends BaseEntity {
|
||||
@Column(name = "annual_revenue", precision = 15, scale = 2)
|
||||
private BigDecimal annualRevenue;
|
||||
|
||||
/**
|
||||
* Devise du chiffre d'affaires.
|
||||
*/
|
||||
@Column(name = "revenue_currency", length = 3)
|
||||
@Size(min = 3, max = 3, message = "Le code devise doit faire 3 caractères")
|
||||
private String revenueCurrency = "USD";
|
||||
|
||||
/**
|
||||
* Locale préférée.
|
||||
*/
|
||||
@Column(name = "preferred_locale", length = 20)
|
||||
@Size(max = 20, message = "La locale ne peut pas dépasser 20 caractères")
|
||||
private String preferredLocale = "fr-FR";
|
||||
|
||||
/**
|
||||
* Adresse de l'entreprise - ligne 1.
|
||||
*/
|
||||
@@ -199,7 +208,7 @@ public class Client extends BaseEntity {
|
||||
/**
|
||||
* Constructeur avec les champs obligatoires.
|
||||
*
|
||||
* @param user l'utilisateur associé
|
||||
* @param user l'utilisateur associé
|
||||
* @param companyName le nom de l'entreprise
|
||||
*/
|
||||
public Client(User user, String companyName) {
|
||||
@@ -251,36 +260,41 @@ public class Client extends BaseEntity {
|
||||
*/
|
||||
public String getFullAddress() {
|
||||
StringBuilder address = new StringBuilder();
|
||||
|
||||
|
||||
if (addressLine1 != null && !addressLine1.trim().isEmpty()) {
|
||||
address.append(addressLine1);
|
||||
}
|
||||
|
||||
|
||||
if (addressLine2 != null && !addressLine2.trim().isEmpty()) {
|
||||
if (address.length() > 0) address.append(", ");
|
||||
if (address.length() > 0)
|
||||
address.append(", ");
|
||||
address.append(addressLine2);
|
||||
}
|
||||
|
||||
|
||||
if (city != null && !city.trim().isEmpty()) {
|
||||
if (address.length() > 0) address.append(", ");
|
||||
if (address.length() > 0)
|
||||
address.append(", ");
|
||||
address.append(city);
|
||||
}
|
||||
|
||||
|
||||
if (state != null && !state.trim().isEmpty()) {
|
||||
if (address.length() > 0) address.append(", ");
|
||||
if (address.length() > 0)
|
||||
address.append(", ");
|
||||
address.append(state);
|
||||
}
|
||||
|
||||
|
||||
if (postalCode != null && !postalCode.trim().isEmpty()) {
|
||||
if (address.length() > 0) address.append(" ");
|
||||
if (address.length() > 0)
|
||||
address.append(" ");
|
||||
address.append(postalCode);
|
||||
}
|
||||
|
||||
|
||||
if (country != null && !country.trim().isEmpty()) {
|
||||
if (address.length() > 0) address.append(", ");
|
||||
if (address.length() > 0)
|
||||
address.append(", ");
|
||||
address.append(country);
|
||||
}
|
||||
|
||||
|
||||
return address.toString();
|
||||
}
|
||||
|
||||
@@ -392,6 +406,22 @@ public class Client extends BaseEntity {
|
||||
this.annualRevenue = annualRevenue;
|
||||
}
|
||||
|
||||
public String getRevenueCurrency() {
|
||||
return revenueCurrency;
|
||||
}
|
||||
|
||||
public void setRevenueCurrency(String revenueCurrency) {
|
||||
this.revenueCurrency = revenueCurrency;
|
||||
}
|
||||
|
||||
public String getPreferredLocale() {
|
||||
return preferredLocale;
|
||||
}
|
||||
|
||||
public void setPreferredLocale(String preferredLocale) {
|
||||
this.preferredLocale = preferredLocale;
|
||||
}
|
||||
|
||||
public String getAddressLine1() {
|
||||
return addressLine1;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user