diff --git a/pom.xml b/pom.xml
index 9528eca..8bff737 100644
--- a/pom.xml
+++ b/pom.xml
@@ -13,5 +13,48 @@
25
UTF-8
+
+
+
+ jakarta.persistence
+ jakarta.persistence-api
+ 3.2.0
+
+
+
+ org.hibernate
+ hibernate-core
+ 7.1.11.Final
+
+
+
+ org.postgresql
+ postgresql
+ 42.7.8
+
+
+ org.projectlombok
+ lombok
+ 1.18.42
+ provided
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+
+
+
+ org.projectlombok
+ lombok
+ 1.18.42
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/main/java/bzh/risotto/Main.java b/src/main/java/bzh/risotto/Main.java
index 2cf69e6..a58546d 100644
--- a/src/main/java/bzh/risotto/Main.java
+++ b/src/main/java/bzh/risotto/Main.java
@@ -1,17 +1,33 @@
package bzh.risotto;
-//TIP To Run code, press or
-// click the icon in the gutter.
-public class Main {
- static void main() {
- //TIP Press with your caret at the highlighted text
- // to see how IntelliJ IDEA suggests fixing it.
- IO.println(String.format("Hello and welcome!"));
+import bzh.risotto.dto.ClientDTO;
+import bzh.risotto.service.ClientService;
+import jakarta.persistence.EntityManager;
+import jakarta.persistence.EntityManagerFactory;
+import jakarta.persistence.Persistence;
+import java.util.Date;
- for (int i = 1; i <= 5; i++) {
- //TIP Press to start debugging your code. We have set one breakpoint
- // for you, but you can always add more by pressing .
- IO.println("i = " + i);
- }
+public class Main {
+ public static void main(String[] args) {
+ EntityManagerFactory emf = Persistence.createEntityManagerFactory("banquePU");
+ EntityManager em = emf.createEntityManager();
+
+ ClientService clientService = new ClientService(em);
+
+ // Exemple de creation d'un client
+ ClientDTO clientDTO = new ClientDTO();
+ clientDTO.setNumClient(1);
+ clientDTO.setNomClient("Dupont");
+ clientDTO.setPrenomClient("Jean");
+ clientDTO.setAdClient("123 Rue de Paris");
+ clientDTO.setDateNaissClient(new Date());
+ clientDTO.setAgeClient(30);
+ //clientDTO.setNumAgent(1);
+
+ ClientDTO createdClient = clientService.createClient(clientDTO);
+ System.out.println("Client cree: " + createdClient.getNomClient());
+
+ em.close();
+ emf.close();
}
}
diff --git a/src/main/java/bzh/risotto/dao/AbstractDAO.java b/src/main/java/bzh/risotto/dao/AbstractDAO.java
new file mode 100644
index 0000000..c668384
--- /dev/null
+++ b/src/main/java/bzh/risotto/dao/AbstractDAO.java
@@ -0,0 +1,72 @@
+package bzh.risotto.dao;
+
+import jakarta.persistence.EntityManager;
+import jakarta.persistence.EntityTransaction;
+import java.util.List;
+import java.util.Optional;
+
+public abstract class AbstractDAO implements DAO {
+ private final Class entityClass;
+ protected EntityManager entityManager;
+
+ public AbstractDAO(Class entityClass, EntityManager entityManager) {
+ this.entityClass = entityClass;
+ this.entityManager = entityManager;
+ }
+
+ @Override
+ public Optional find(K id) {
+ return Optional.ofNullable(entityManager.find(entityClass, id));
+ }
+
+ @Override
+ public List findAll() {
+ return entityManager.createQuery("SELECT e FROM " + entityClass.getSimpleName() + " e", entityClass)
+ .getResultList();
+ }
+
+ @Override
+ public void save(T entity) {
+ EntityTransaction transaction = entityManager.getTransaction();
+ try {
+ transaction.begin();
+ entityManager.persist(entity);
+ transaction.commit();
+ } catch (Exception e) {
+ if (transaction != null && transaction.isActive()) {
+ transaction.rollback();
+ }
+ throw e;
+ }
+ }
+
+ @Override
+ public void update(T entity) {
+ EntityTransaction transaction = entityManager.getTransaction();
+ try {
+ transaction.begin();
+ entityManager.merge(entity);
+ transaction.commit();
+ } catch (Exception e) {
+ if (transaction != null && transaction.isActive()) {
+ transaction.rollback();
+ }
+ throw e;
+ }
+ }
+
+ @Override
+ public void delete(T entity) {
+ EntityTransaction transaction = entityManager.getTransaction();
+ try {
+ transaction.begin();
+ entityManager.remove(entityManager.contains(entity) ? entity : entityManager.merge(entity));
+ transaction.commit();
+ } catch (Exception e) {
+ if (transaction != null && transaction.isActive()) {
+ transaction.rollback();
+ }
+ throw e;
+ }
+ }
+}
diff --git a/src/main/java/bzh/risotto/dao/ClientDAO.java b/src/main/java/bzh/risotto/dao/ClientDAO.java
new file mode 100644
index 0000000..94ecade
--- /dev/null
+++ b/src/main/java/bzh/risotto/dao/ClientDAO.java
@@ -0,0 +1,19 @@
+package bzh.risotto.dao;
+
+import bzh.risotto.model.Client;
+import jakarta.persistence.EntityManager;
+
+import java.util.List;
+
+public class ClientDAO extends AbstractDAO {
+ public ClientDAO(EntityManager entityManager) {
+ super(Client.class, entityManager);
+ }
+
+ public List findByAgent(int numAgent) {
+ return entityManager.createQuery(
+ "SELECT c FROM Client c WHERE c.agent.numAgent = :numAgent", Client.class)
+ .setParameter("numAgent", numAgent)
+ .getResultList();
+ }
+}
diff --git a/src/main/java/bzh/risotto/dao/DAO.java b/src/main/java/bzh/risotto/dao/DAO.java
new file mode 100644
index 0000000..1658ff3
--- /dev/null
+++ b/src/main/java/bzh/risotto/dao/DAO.java
@@ -0,0 +1,12 @@
+package bzh.risotto.dao;
+
+import java.util.List;
+import java.util.Optional;
+
+public interface DAO {
+ Optional find(K id);
+ List findAll();
+ void save(T entity);
+ void update(T entity);
+ void delete(T entity);
+}
diff --git a/src/main/java/bzh/risotto/dto/ClientDTO.java b/src/main/java/bzh/risotto/dto/ClientDTO.java
new file mode 100644
index 0000000..21a37e9
--- /dev/null
+++ b/src/main/java/bzh/risotto/dto/ClientDTO.java
@@ -0,0 +1,18 @@
+package bzh.risotto.dto;
+
+import lombok.Data;
+
+import java.util.Date;
+
+@Data
+public class ClientDTO {
+ private int numClient;
+ private String nomClient;
+ private String prenomClient;
+ private String adClient;
+ private Date dateNaissClient;
+ private int ageClient;
+ private int numAgent;
+
+ // Constructeurs, getters et setters
+}
diff --git a/src/main/java/bzh/risotto/mapper/ClientMapper.java b/src/main/java/bzh/risotto/mapper/ClientMapper.java
new file mode 100644
index 0000000..fe4114f
--- /dev/null
+++ b/src/main/java/bzh/risotto/mapper/ClientMapper.java
@@ -0,0 +1,30 @@
+package bzh.risotto.mapper;
+
+import bzh.risotto.dto.ClientDTO;
+import bzh.risotto.model.Client;
+
+public class ClientMapper {
+ public static ClientDTO toDTO(Client client) {
+ ClientDTO dto = new ClientDTO();
+ dto.setNumClient(client.getNumClient());
+ dto.setNomClient(client.getNomClient());
+ dto.setPrenomClient(client.getPrenomClient());
+ dto.setAdClient(client.getAdClient());
+ dto.setDateNaissClient(client.getDateNaissClient());
+ dto.setAgeClient(client.getAgeClient());
+ dto.setNumAgent(client.getAgent() != null ? client.getAgent().getNumAgent() : 0);
+ return dto;
+ }
+
+ public static Client toEntity(ClientDTO dto) {
+ Client client = new Client();
+ client.setNumClient(dto.getNumClient());
+ client.setNomClient(dto.getNomClient());
+ client.setPrenomClient(dto.getPrenomClient());
+ client.setAdClient(dto.getAdClient());
+ client.setDateNaissClient(dto.getDateNaissClient());
+ client.setAgeClient(dto.getAgeClient());
+ // Note: La relation avec Agent doit etre geree separement
+ return client;
+ }
+}
diff --git a/src/main/java/bzh/risotto/model/Agence.java b/src/main/java/bzh/risotto/model/Agence.java
new file mode 100644
index 0000000..170ed93
--- /dev/null
+++ b/src/main/java/bzh/risotto/model/Agence.java
@@ -0,0 +1,21 @@
+package bzh.risotto.model;
+
+import jakarta.persistence.*;
+import lombok.Data;
+
+@Entity
+@Data
+@Table(name = "Agence")
+public class Agence {
+
+ @Id
+ @GeneratedValue(strategy = GenerationType.IDENTITY)
+ @Column(name = "numAgence")
+ private int numAgence;
+
+ @Column(name = "telAgence")
+ private String telAgence;
+
+ @Column(name = "adAgence")
+ private String adAgence;
+}
diff --git a/src/main/java/bzh/risotto/model/Agent.java b/src/main/java/bzh/risotto/model/Agent.java
new file mode 100644
index 0000000..fb18750
--- /dev/null
+++ b/src/main/java/bzh/risotto/model/Agent.java
@@ -0,0 +1,27 @@
+package bzh.risotto.model;
+
+import jakarta.persistence.*;
+import lombok.Data;
+
+@Entity
+@Data
+@Table(name = "Agent")
+public class Agent {
+
+ @Id
+ @GeneratedValue(strategy = GenerationType.IDENTITY)
+ @Column(name = "numAgent")
+ private int numAgent;
+
+ @Column(name = "nomAgent")
+ private String nomAgent;
+
+ @Column(name = "prenomAgent")
+ private String prenomAgent;
+
+ @Column(name = "salaire")
+ private double salaire;
+
+ @Column(name = "estDirecteur")
+ private boolean estDirecteur;
+}
diff --git a/src/main/java/bzh/risotto/model/Client.java b/src/main/java/bzh/risotto/model/Client.java
new file mode 100644
index 0000000..9e30459
--- /dev/null
+++ b/src/main/java/bzh/risotto/model/Client.java
@@ -0,0 +1,46 @@
+package bzh.risotto.model;
+
+import jakarta.persistence.*;
+import lombok.Data;
+
+import java.util.Date;
+import java.util.List;
+@Entity
+@Data
+@Table(name = "Client")
+public class Client {
+ @Id
+ @GeneratedValue(strategy = GenerationType.IDENTITY)
+ @Column(name = "numClient")
+ private int numClient;
+
+ @Column(name = "nomClient", nullable = false)
+ private String nomClient;
+
+ @Column(name = "prenomClient", nullable = false)
+ private String prenomClient;
+
+ @Column(name = "adClient")
+ private String adClient;
+
+ @Column(name = "dateNaissClient")
+ @Temporal(TemporalType.DATE)
+ private Date dateNaissClient;
+
+ @Column(name = "ageClient")
+ private int ageClient;
+
+ @ManyToOne
+ @JoinColumn(name = "numAgent", referencedColumnName = "numAgent")
+ private Agent agent;
+
+ @ManyToMany
+ @JoinTable(
+ name = "Compte_Client",
+ joinColumns = @JoinColumn(name = "numClient"),
+ inverseJoinColumns = @JoinColumn(name = "numCompte")
+ )
+ private List comptes;
+
+ // Constructeurs, getters et setters
+}
diff --git a/src/main/java/bzh/risotto/model/Compte.java b/src/main/java/bzh/risotto/model/Compte.java
new file mode 100644
index 0000000..080fe3b
--- /dev/null
+++ b/src/main/java/bzh/risotto/model/Compte.java
@@ -0,0 +1,26 @@
+package bzh.risotto.model;
+import jakarta.persistence.*;
+import java.util.List;
+
+@Entity
+@Table(name = "Compte")
+public class Compte {
+ @Id
+ @GeneratedValue(strategy = GenerationType.IDENTITY)
+ @Column(name = "numCompte")
+ private int numCompte;
+
+ @Column(name = "solde")
+ private double solde;
+
+ @Column(name = "typeCompte", nullable = false)
+ private String typeCompte;
+
+ @OneToMany(mappedBy = "compte", cascade = CascadeType.ALL)
+ private List operations;
+
+ @ManyToMany(mappedBy = "comptes")
+ private List clients;
+
+ // Constructeurs, getters et setters
+}
diff --git a/src/main/java/bzh/risotto/model/Operation.java b/src/main/java/bzh/risotto/model/Operation.java
new file mode 100644
index 0000000..53a7b8f
--- /dev/null
+++ b/src/main/java/bzh/risotto/model/Operation.java
@@ -0,0 +1,31 @@
+package bzh.risotto.model;
+
+import jakarta.persistence.*;
+import lombok.Data;
+
+import java.sql.Date;
+import java.util.List;
+
+@Entity
+@Data
+@Table(name = "Operation")
+public class Operation {
+
+ @Id
+ @GeneratedValue(strategy = GenerationType.IDENTITY)
+ @Column(name = "numOperation")
+ private int numOperation;
+
+ @Column(name = "dateOperation")
+ private Date dateOperation;
+
+ @Column(name = "typeOperation")
+ private String typeOperation;
+
+ @Column(name = "montant")
+ private double montant;
+
+ @OneToOne()
+ @JoinColumn(name = "numCompte", referencedColumnName = "numCompte")
+ private Compte compte;
+}
diff --git a/src/main/java/bzh/risotto/service/ClientService.java b/src/main/java/bzh/risotto/service/ClientService.java
new file mode 100644
index 0000000..6b01ac0
--- /dev/null
+++ b/src/main/java/bzh/risotto/service/ClientService.java
@@ -0,0 +1,41 @@
+package bzh.risotto.service;
+
+import bzh.risotto.dao.ClientDAO;
+import bzh.risotto.dto.ClientDTO;
+import bzh.risotto.mapper.ClientMapper;
+import bzh.risotto.model.Client;
+import jakarta.persistence.EntityManager;
+import java.util.List;
+import java.util.stream.Collectors;
+
+public class ClientService {
+ private final ClientDAO clientDAO;
+
+ public ClientService(EntityManager entityManager) {
+ this.clientDAO = new ClientDAO(entityManager);
+ }
+
+ public ClientDTO createClient(ClientDTO clientDTO) {
+ Client client = ClientMapper.toEntity(clientDTO);
+ clientDAO.save(client);
+ return ClientMapper.toDTO(client);
+ }
+
+ public ClientDTO getClient(int id) {
+ return clientDAO.find(id)
+ .map(ClientMapper::toDTO)
+ .orElseThrow(() -> new RuntimeException("Client not found"));
+ }
+
+ public List getAllClients() {
+ return clientDAO.findAll().stream()
+ .map(ClientMapper::toDTO)
+ .collect(Collectors.toList());
+ }
+
+ public List getClientsByAgent(int numAgent) {
+ return clientDAO.findByAgent(numAgent).stream()
+ .map(ClientMapper::toDTO)
+ .collect(Collectors.toList());
+ }
+}
diff --git a/src/main/resources/META-INF/persistence.xml b/src/main/resources/META-INF/persistence.xml
new file mode 100644
index 0000000..71c5ccd
--- /dev/null
+++ b/src/main/resources/META-INF/persistence.xml
@@ -0,0 +1,20 @@
+
+
+ org.hibernate.jpa.HibernatePersistenceProvider
+ bzh.risotto.model.Client
+ bzh.risotto.model.Compte
+ bzh.risotto.model.Operation
+ bzh.risotto.model.Agent
+ bzh.risotto.model.Agence
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file