Browse Source

second commit

placidenduwayo 2 years ago
parent
commit
b3500f4ce7
17 changed files with 663 additions and 544 deletions
  1. 123
    0
      README-COPY.md
  2. 0
    19
      address-microservice/src/main/java/fr/natan/microservices/addressmicroservice/service/contract/AddressContract.java
  3. 8
    68
      address-microservice/src/main/java/fr/natan/microservices/addressmicroservice/service/services/AddressService.java
  4. 78
    0
      address-microservice/src/main/java/fr/natan/microservices/addressmicroservice/service/services/AddressServiceImplement.java
  5. 3
    3
      address-microservice/src/main/java/fr/natan/microservices/addressmicroservice/t_controller/AddressController.java
  6. 0
    19
      company-microservice/src/main/java/fr/natan/microservices/companymicroservice/service/contract/CompanyContract.java
  7. 7
    70
      company-microservice/src/main/java/fr/natan/microservices/companymicroservice/service/services/CompanyService.java
  8. 81
    0
      company-microservice/src/main/java/fr/natan/microservices/companymicroservice/service/services/CompanyServiceImplement.java
  9. 3
    3
      company-microservice/src/main/java/fr/natan/microservices/companymicroservice/t_controller/CompanyController.java
  10. 0
    23
      project-microservice/src/main/java/fr/natan/microservices/projectmicroservice/service/contract/ProjectContract.java
  11. 15
    189
      project-microservice/src/main/java/fr/natan/microservices/projectmicroservice/service/services/ProjectService.java
  12. 196
    0
      project-microservice/src/main/java/fr/natan/microservices/projectmicroservice/service/services/ProjectServiceImplement.java
  13. 3
    3
      project-microservice/src/main/java/fr/natan/microservices/projectmicroservice/tt_controller/ProjectController.java
  14. 0
    20
      user-microservice/src/main/java/fr/natan/microservices/usermicroservice/service/contract/UserContract.java
  15. 9
    124
      user-microservice/src/main/java/fr/natan/microservices/usermicroservice/service/services/UserService.java
  16. 134
    0
      user-microservice/src/main/java/fr/natan/microservices/usermicroservice/service/services/UserServiceImplement.java
  17. 3
    3
      user-microservice/src/main/java/fr/natan/microservices/usermicroservice/tt_controller/UserController.java

+ 123
- 0
README-COPY.md View File

@@ -0,0 +1,123 @@
1
+# 1. Partie backend: application orientée microservices
2
+## 1.1. Introduction
3
+Nous mettons en place une application orientée microservices avec Spring MVC et Spring Cloud OpenFeign. Simulation d'un scénario de gestion de projets.
4
+
5
+* **Scénario nominal**: Un utilisateur est affecté à une adresse <> **Scénario alternatif**: Si l’adresse n’existe pas, erreur.
6
+* **Scénario nominal**: Un projet est affecté à un utilisateur et une société <> **Scénario alternatif**: Si l’utilisateur et / ou la société n’existent pas, erreur.
7
+* ++ des contrôles d'intégrités pour le fonctionnement de l'application.
8
+
9
+
10
+L’application est consistituée de deux types microservices:
11
+
12
+* Quatre microservices métiers pour le fonctionnement de l’application.
13
+* Deux services intermédiaires pour faire fonctionner les microservices métiers.
14
+
15
+Les répertoires des microservices métiers:
16
+
17
+* address-microservice
18
+* employee-microservice
19
+* company-microservice
20
+* project-microservice
21
+
22
+Les répertoires des microservices qui font fonctionner les microservices métiers:
23
+
24
+* spring-cloud-gateway-service
25
+* eureka-discovery-service
26
+
27
+Le répertoire de déploiement contenant un fichier docker-compose pour créer et agencer les images dockers des tous ces microservices:
28
+* application-deployment
29
+
30
+Chaque microservice métier possède ses propres ressources:
31
+
32
+* Sa base de données
33
+* Son propre code source
34
+* Son propre fichier de configuration
35
+* Ses propres dépendances
36
+* etc.
37
+
38
+La figure ![class diagram](https://drive.google.com/file/d/1iylBvr-rxKSOlGPnNklpHuD7RcKwk5fi/view?usp=sharing) présente le diagramme de classe de l'application.
39
+
40
+## 1.3. Communication entre microservices
41
+Les microservices communiquent entre eux pour le fonctionnement de l'applications.
42
+* **user-microservice** a besoin de **address-microservice** pour persister un utlisateur.
43
+- **project-microservice** a de **user-microservice** et **company-microservice** pour périsiter un projet.
44
+
45
+Pour faire communiquer les microservices, nous utilisons le pattern **Spring Cloud OpenFeign**. L'architechure d'enregistrement et de découverte des microservice de l'application backend peut se présenter ainsi: [architecture](https://drive.google.com/file/d/15pj4TvCu4DyqUZS3dLLRY7KKUgYpTBuZ/view?usp=sharing)
46
+
47
+#### Pourquoi Spring Cloud OpenFeign plutôt que Spring Boot RestTemplate?
48
+
49
+Spring Cloud OpenFeign présente plusieurs avantages:
50
+* Avec **RestTemplate**, un microservice qui a besoin d'appeler un autre microservice doit écrire en dur l'url de ce dernier dans son code source. **<> Spring Cloud OpenFeign** fournit l'autoconfiguration des microservices. Les microservices métiers s'enregistrent dans un service d'annuaire, un client qui a besoin de consommer un microservice métier donne le nom de ce dernier à la gateway qui le cherche à sa place. ==> le client n'a pas besoin de connâitre l'adresse complète du microservice qu'il veut consommer.
51
+
52
+* **RestTemplate** met en question l'évolutivité de l'application. En effet, RestTemplate se base sur une classe dans laquelle on écrit en dur l'url complète du microservice que l'autre microservice veut appeler. Ainsi, s'il arrive que le microservice change d'url, on est obligé de modifier le code source de la classe dans l'autre microservice qui utilise le premier microservice. **<> Spring Cloud OpenFeign** assure l'évolutivité de l'application grâce à l'autoconfiguration des microservices métiers. En effet, OpenFeign est basé sur une interface qu'il marque comme un service. Spring Cloud OpenFein avec le server d'enregistrement, permet aux microservices de s'autoenregistrer.
53
+
54
+## 1.4. Déploiement des microservices
55
+1. Construction d'une image docker pour chaque microservice avec un simple fichier Dockerfile placé à la racine du dossier du microservice.
56
+2. Lancement avec un fichier **docke-compose** de la stack des microservices composant toute l'application backend.
57
+
58
+### Lancement de l'application backend
59
+1) Créer un répertoire que l'on nomme à son choix, **projet-microservices** par exemple.
60
+
61
+2) Cloner le git suivant de l'application dans ce répertoire:
62
+- Dans le terminal, se placer dans ce répetoire.
63
+- Saisir`git clone`: https://gitea.natan.fr/placidenduwayo/projects-management-microservices-backend.git
64
+
65
+Les microservices métiers, les microservices intermédiaires et application-deployment (le répertoire pour déployer l'application) sont téléchargés dans ce répertoire **projet-microservices**.
66
+
67
+Il faut avoir les application Docker et Docker-compose installées  sur la machine. Docker pour créer les images docker des microservices et docker-compose pour agencer et lancer en une seule ligne de commandes les images de toute l'application.
68
+
69
+Pour en savoir sur docker et docker-compose, voir les liens ![docker](https://docs.docker.com/get-started/) et [docker-compose](https://docs.docker.com/compose/)
70
+
71
+ 3) Dans le terminal:
72
+  - Se placer dans le sous-répertoire **application-deployment** du répertoire **projet-microservice**.
73
+  - Le fichier **docker-compose** sous ce répertoire application-deployment agence les images à créer via leurs Dockerfiles
74
+  - Saisir la ligne de commandes :`docker-compose build`:
75
+     - `docker-compose build` builde les sources de chaque microservice
76
+     - Ensuite, à partir du Dockerfile de chaque microservice, il créera des images docker pour les microservices
77
+
78
+Après le build de l'application backend:
79
+- Toujours dans le répertoire des microservices
80
+- Saisir la ligne de commande: `docker-compose up`. Cette ligne de commande va lancer toutes les images agencées dans le fichier docker-compose
81
+
82
+### 1.5. Services intermédiaires
83
+Les services **eureka-discovery-server** et **spring-cloud-gateway-service** sont de simples applications.
84
+- Le service spring-cloud-gateway-service n'expose aucun Endpoint.
85
+- Le service eureka-discovery-server expose un seul endepoint http://localhost:8180 pour explorer les microservices enregistrés
86
+
87
+### 1.5.1. eureka-discovery-server
88
+Ce service joue le rôle de serveur d'annuaire des microservices. eureka-discovery-server est lancé en premier. Lorsqu'ils sont lancés, les microservices métiers et le service gateway s'enregistrent dans le serveur d'annuaire. Ils s'enregistrent par leur nom configuré dans leur fichier de configuration **application.properties**.
89
+
90
+Le lien suivant présente la documentation de ce service d'annuaire [eureka service registration](https://spring.io/guides/gs/service-registration-and-discovery/).
91
+
92
+### 1.5.2. spring-cloud-gateway
93
+
94
+- Le service gateway **spring-cloud-gateway-service** peut être lancé avant ou après les microservices métiers. Ce service sert de gateway entre le frontend et le serveur d'annuaire qui contient les noms des microservices métiers.
95
+- Dans la requête HTTP, le client a juste besoin de connaître l'adresse de la gateway et le nom du microservice qu'il veut consommer. Sa requête est de la forme: **http://gateway-address:gateway-port/NOM-MICROSERVICE/endpoint**.
96
+- Le service gateway va chercher dans le serveur d'annuaire (ici nous avons utilisé Eureka de Netflix) le nom du microservice que le client HTTP a spécifié dans sa requête.
97
+- Si la gateway trouve le service demandé, le client peut commencer à consommer le microservice.
98
+
99
+
100
+# 2. Partie frontend: application Angular
101
+Le côté frontend est une application Angular (Angular 13). Le repository de cette application frontend peut être trouvé sur le lien suivant: [frontend](https://gitea.natan.fr/placidenduwayo/projects-management-microservices-frontend.git)
102
+
103
+Pour communiquer avec la partie backend, dans le fichier `environment.ts` d'Angular nous y configurons l'adresse du service gateway avec les noms des microservices pour la backend:
104
+
105
+```
106
+export const environment = {
107
+  ADDRESSES_SERVER:"http://localhost:8181/ADDRESS-MICROSERVICE",
108
+  USERS_SERVER:"http://localhost:8181/USER-MICROSERVICE",
109
+  COMPANIES_SERVER:"http://localhost:8181/COMPANY-MICROSERVICE",
110
+  PROJECTS_SERVER:"http://localhost:8181/PROJECT-MICROSERVICE"
111
+
112
+};
113
+```
114
+
115
+# 3. Lancement de l'application fullstack:
116
+## 3.1. La partie backend
117
+- Cloner la partie backend: `git clone` https://gitea.natan.fr/placidenduwayo/projects-management-microservices-backend.git
118
+- Lancer l'application backend en suivant la procédure décrite au sous titre **1.4 Déploiement des microservices**. 
119
+## 3.2. La partie frontend
120
+- cloner la partie frontend: `git clone` https://gitea.natan.fr/placidenduwayo/projects-management-microservices-frontend.git
121
+- Suivre la procédure telle que détaillée dans le README du repository
122
+- Aller sur http://localhost:4200 
123
+    - ![application front](https://drive.google.com/file/d/1CfXun5Sov_q5f045fJGCv0lk2XUq7_DN/view?usp=sharing) 

+ 0
- 19
address-microservice/src/main/java/fr/natan/microservices/addressmicroservice/service/contract/AddressContract.java View File

@@ -1,19 +0,0 @@
1
-package fr.natan.microservices.addressmicroservice.service.contract;
2
-
3
-import fr.natan.microservices.addressmicroservice.exceptions.AddressAlreadyExistsException;
4
-import fr.natan.microservices.addressmicroservice.exceptions.AddressFieldsEmptyException;
5
-import fr.natan.microservices.addressmicroservice.exceptions.AddressNotFoundException;
6
-import fr.natan.microservices.addressmicroservice.model.Address;
7
-
8
-import java.util.List;
9
-
10
-public interface AddressContract {
11
-
12
-    Address createAddress (Address address) throws AddressAlreadyExistsException, AddressFieldsEmptyException;
13
-    List<Address> getAddresses();
14
-    List<Address> getAddressByNumHouseStreetNamePBCity(
15
-            String numHouse, String streetName, String pb, String city);
16
-    Address getAddress(Long addressID) throws AddressNotFoundException;
17
-    void deleteAddress(Long addressID) throws AddressNotFoundException;
18
-    Address updateAddress(Long addressID, Address address) throws AddressNotFoundException;
19
-}

+ 8
- 68
address-microservice/src/main/java/fr/natan/microservices/addressmicroservice/service/services/AddressService.java View File

@@ -4,76 +4,16 @@ import fr.natan.microservices.addressmicroservice.exceptions.AddressAlreadyExist
4 4
 import fr.natan.microservices.addressmicroservice.exceptions.AddressFieldsEmptyException;
5 5
 import fr.natan.microservices.addressmicroservice.exceptions.AddressNotFoundException;
6 6
 import fr.natan.microservices.addressmicroservice.model.Address;
7
-import fr.natan.microservices.addressmicroservice.repository.AddressRepository;
8
-import fr.natan.microservices.addressmicroservice.service.contract.AddressContract;
9
-import fr.natan.microservices.addressmicroservice.service.utilities.AddressValidator;
10
-import org.springframework.stereotype.Service;
11 7
 
12
-import javax.transaction.Transactional;
13 8
 import java.util.List;
14 9
 
15
-@Service
16
-public class AddressService implements AddressContract {
17
-    private final AddressRepository addressRepository;
10
+public interface AddressService {
18 11
 
19
-    public AddressService(AddressRepository addressRepository) {
20
-        this.addressRepository = addressRepository;
21
-    }
22
-
23
-
24
-    @Override
25
-    public List<Address> getAddressByNumHouseStreetNamePBCity(String numHouse, String streetName, String pb, String city) {
26
-
27
-        return addressRepository.findByNumHouseAndStreetNameAndPbAndCity(numHouse,
28
-                streetName, pb, city);
29
-    }
30
-
31
-    @Override
32
-    public Address createAddress(Address address) throws AddressAlreadyExistsException, AddressFieldsEmptyException {
33
-        if(!AddressValidator.isValidAddress(address)){
34
-            throw new AddressFieldsEmptyException();
35
-        }
36
-
37
-        Address formattedAddress = AddressValidator.formatAddress(address);
38
-        if (getAddressByNumHouseStreetNamePBCity(
39
-                formattedAddress.getNumHouse(),
40
-                formattedAddress.getStreetName(),
41
-                formattedAddress.getPb(),
42
-                formattedAddress.getCity() ).size() > 0) {
43
-
44
-            throw new AddressAlreadyExistsException();
45
-        }
46
-
47
-        return addressRepository.save(formattedAddress);
48
-    }
49
-
50
-    @Override
51
-    public List<Address> getAddresses() {
52
-        return addressRepository.findAll();
53
-    }
54
-
55
-    @Override
56
-    public Address getAddress(Long addressID) throws AddressNotFoundException {
57
-        return addressRepository.findById(addressID).orElseThrow(
58
-                AddressNotFoundException::new
59
-        );
60
-    }
61
-
62
-    @Override
63
-    public void deleteAddress(Long addressID) throws AddressNotFoundException {
64
-        addressRepository.delete(getAddress(addressID));
65
-    }
66
-
67
-    @Override
68
-    @Transactional
69
-    public Address updateAddress(Long addressID, Address address) throws AddressNotFoundException {
70
-        Address savedAddress = getAddress(addressID);
71
-        savedAddress.setNumHouse(address.getNumHouse());
72
-        savedAddress.setStreetName(address.getStreetName());
73
-        savedAddress.setPb(address.getPb());
74
-        savedAddress.setCity(address.getCity());
75
-        savedAddress.setCountry(address.getCountry());
76
-
77
-        return savedAddress;
78
-    }
12
+    Address createAddress (Address address) throws AddressAlreadyExistsException, AddressFieldsEmptyException;
13
+    List<Address> getAddresses();
14
+    List<Address> getAddressByNumHouseStreetNamePBCity(
15
+            String numHouse, String streetName, String pb, String city);
16
+    Address getAddress(Long addressID) throws AddressNotFoundException;
17
+    void deleteAddress(Long addressID) throws AddressNotFoundException;
18
+    Address updateAddress(Long addressID, Address address) throws AddressNotFoundException;
79 19
 }

+ 78
- 0
address-microservice/src/main/java/fr/natan/microservices/addressmicroservice/service/services/AddressServiceImplement.java View File

@@ -0,0 +1,78 @@
1
+package fr.natan.microservices.addressmicroservice.service.services;
2
+
3
+import fr.natan.microservices.addressmicroservice.exceptions.AddressAlreadyExistsException;
4
+import fr.natan.microservices.addressmicroservice.exceptions.AddressFieldsEmptyException;
5
+import fr.natan.microservices.addressmicroservice.exceptions.AddressNotFoundException;
6
+import fr.natan.microservices.addressmicroservice.model.Address;
7
+import fr.natan.microservices.addressmicroservice.repository.AddressRepository;
8
+import fr.natan.microservices.addressmicroservice.service.utilities.AddressValidator;
9
+import org.springframework.stereotype.Service;
10
+
11
+import javax.transaction.Transactional;
12
+import java.util.List;
13
+
14
+@Service
15
+public class AddressServiceImplement implements AddressService {
16
+    private final AddressRepository addressRepository;
17
+
18
+    public AddressServiceImplement(AddressRepository addressRepository) {
19
+        this.addressRepository = addressRepository;
20
+    }
21
+
22
+
23
+    @Override
24
+    public List<Address> getAddressByNumHouseStreetNamePBCity(String numHouse, String streetName, String pb, String city) {
25
+
26
+        return addressRepository.findByNumHouseAndStreetNameAndPbAndCity(numHouse,
27
+                streetName, pb, city);
28
+    }
29
+
30
+    @Override
31
+    public Address createAddress(Address address) throws AddressAlreadyExistsException, AddressFieldsEmptyException {
32
+        if(!AddressValidator.isValidAddress(address)){
33
+            throw new AddressFieldsEmptyException();
34
+        }
35
+
36
+        Address formattedAddress = AddressValidator.formatAddress(address);
37
+        if (getAddressByNumHouseStreetNamePBCity(
38
+                formattedAddress.getNumHouse(),
39
+                formattedAddress.getStreetName(),
40
+                formattedAddress.getPb(),
41
+                formattedAddress.getCity() ).size() > 0) {
42
+
43
+            throw new AddressAlreadyExistsException();
44
+        }
45
+
46
+        return addressRepository.save(formattedAddress);
47
+    }
48
+
49
+    @Override
50
+    public List<Address> getAddresses() {
51
+        return addressRepository.findAll();
52
+    }
53
+
54
+    @Override
55
+    public Address getAddress(Long addressID) throws AddressNotFoundException {
56
+        return addressRepository.findById(addressID).orElseThrow(
57
+                AddressNotFoundException::new
58
+        );
59
+    }
60
+
61
+    @Override
62
+    public void deleteAddress(Long addressID) throws AddressNotFoundException {
63
+        addressRepository.delete(getAddress(addressID));
64
+    }
65
+
66
+    @Override
67
+    @Transactional
68
+    public Address updateAddress(Long addressID, Address address) throws AddressNotFoundException {
69
+        Address savedAddress = getAddress(addressID);
70
+        savedAddress.setNumHouse(address.getNumHouse());
71
+        savedAddress.setStreetName(address.getStreetName());
72
+        savedAddress.setPb(address.getPb());
73
+        savedAddress.setCity(address.getCity());
74
+        savedAddress.setCountry(address.getCountry());
75
+
76
+        return savedAddress;
77
+    }
78
+}

+ 3
- 3
address-microservice/src/main/java/fr/natan/microservices/addressmicroservice/t_controller/AddressController.java View File

@@ -4,16 +4,16 @@ import fr.natan.microservices.addressmicroservice.exceptions.AddressAlreadyExist
4 4
 import fr.natan.microservices.addressmicroservice.exceptions.AddressFieldsEmptyException;
5 5
 import fr.natan.microservices.addressmicroservice.exceptions.AddressNotFoundException;
6 6
 import fr.natan.microservices.addressmicroservice.model.Address;
7
-import fr.natan.microservices.addressmicroservice.service.contract.AddressContract;
7
+import fr.natan.microservices.addressmicroservice.service.services.AddressService;
8 8
 import org.springframework.web.bind.annotation.*;
9 9
 
10 10
 import java.util.List;
11 11
 
12 12
 @RestController
13 13
 public class AddressController {
14
-    private final AddressContract addressContract;
14
+    private final AddressService addressContract;
15 15
 
16
-    public AddressController(AddressContract addressContract) {
16
+    public AddressController(AddressService addressContract) {
17 17
         this.addressContract = addressContract;
18 18
     }
19 19
 

+ 0
- 19
company-microservice/src/main/java/fr/natan/microservices/companymicroservice/service/contract/CompanyContract.java View File

@@ -1,19 +0,0 @@
1
-package fr.natan.microservices.companymicroservice.service.contract;
2
-
3
-import fr.natan.microservices.companymicroservice.exceptions.CompanyAlreadyExistsException;
4
-import fr.natan.microservices.companymicroservice.exceptions.CompanyFieldsEmptyException;
5
-import fr.natan.microservices.companymicroservice.exceptions.CompanyNotFoundException;
6
-import fr.natan.microservices.companymicroservice.exceptions.CompanyTypesInvalidException;
7
-import fr.natan.microservices.companymicroservice.model.company.Company;
8
-
9
-import java.util.Collection;
10
-import java.util.List;
11
-
12
-public interface CompanyContract {
13
-    Company createCompany(Company company) throws CompanyAlreadyExistsException, CompanyFieldsEmptyException, CompanyTypesInvalidException;
14
-    Collection<Company> getCompanies();
15
-    List<Company> getCompanyByName(String companyName);
16
-    Company getCompany(Long companyID) throws CompanyNotFoundException;
17
-    void deleteCompany(Long companyID) throws CompanyNotFoundException;
18
-    Company updateCompany(Long companyID, Company company) throws CompanyNotFoundException, CompanyFieldsEmptyException;
19
-}

+ 7
- 70
company-microservice/src/main/java/fr/natan/microservices/companymicroservice/service/services/CompanyService.java View File

@@ -5,78 +5,15 @@ import fr.natan.microservices.companymicroservice.exceptions.CompanyFieldsEmptyE
5 5
 import fr.natan.microservices.companymicroservice.exceptions.CompanyNotFoundException;
6 6
 import fr.natan.microservices.companymicroservice.exceptions.CompanyTypesInvalidException;
7 7
 import fr.natan.microservices.companymicroservice.model.company.Company;
8
-import fr.natan.microservices.companymicroservice.repository.CompanyRepository;
9
-import fr.natan.microservices.companymicroservice.service.contract.CompanyContract;
10
-import fr.natan.microservices.companymicroservice.service.utilities.CompanyValidator;
11
-import org.springframework.stereotype.Service;
12 8
 
13
-import javax.transaction.Transactional;
14
-import java.sql.Date;
15
-import java.sql.Time;
16 9
 import java.util.Collection;
17 10
 import java.util.List;
18 11
 
19
-@Service
20
-public class CompanyService implements CompanyContract {
21
-
22
-    private final CompanyRepository companyRepository;
23
-
24
-    public CompanyService(CompanyRepository companyRepository) {
25
-        this.companyRepository = companyRepository;
26
-    }
27
-
28
-    @Override
29
-    public List<Company> getCompanyByName(String companyName) {
30
-        return companyRepository.findByCompanyName(companyName);
31
-    }
32
-    @Override
33
-    public Company createCompany(Company company) throws CompanyAlreadyExistsException, CompanyFieldsEmptyException,
34
-            CompanyTypesInvalidException {
35
-        if(! CompanyValidator.isValidCompany(company)){
36
-            throw new CompanyFieldsEmptyException();
37
-        }
38
-        else if(!CompanyValidator.validCompanyTypes(company)){
39
-            throw new CompanyTypesInvalidException();
40
-        }
41
-        Company formattedCompany = CompanyValidator.formatCompany(company);
42
-        if(getCompanyByName(formattedCompany.getCompanyName()).size()>0){
43
-            throw new CompanyAlreadyExistsException();
44
-        }
45
-
46
-        company.setConnectionDate(new Date(System.currentTimeMillis())+" : "+new Time(System.currentTimeMillis()));
47
-
48
-        return companyRepository.save(formattedCompany);
49
-    }
50
-
51
-    @Override
52
-    public Collection<Company> getCompanies() {
53
-        return companyRepository.findAll();
54
-    }
55
-
56
-    @Override
57
-    public Company getCompany(Long companyID) throws CompanyNotFoundException {
58
-        return companyRepository.findById(companyID).orElseThrow(
59
-                ()-> new CompanyNotFoundException()
60
-        );
61
-    }
62
-
63
-    @Override
64
-    public void deleteCompany(Long companyID) throws CompanyNotFoundException {
65
-        companyRepository.delete(getCompany(companyID));
66
-    }
67
-
68
-    @Override
69
-    @Transactional
70
-    public Company updateCompany(Long companyID, Company company) throws CompanyNotFoundException,
71
-            CompanyFieldsEmptyException {
72
-        if(!CompanyValidator.isValidCompany(company))
73
-            throw new CompanyFieldsEmptyException();
74
-
75
-       Company savedCompany = getCompany(companyID);
76
-       savedCompany.setCompanyName(company.getCompanyName());
77
-       savedCompany.setCompanyType1(company.getCompanyType1());
78
-       savedCompany.setCompanyType2(company.getCompanyType2());
79
-
80
-        return savedCompany;
81
-    }
12
+public interface CompanyService {
13
+    Company createCompany(Company company) throws CompanyAlreadyExistsException, CompanyFieldsEmptyException, CompanyTypesInvalidException;
14
+    Collection<Company> getCompanies();
15
+    List<Company> getCompanyByName(String companyName);
16
+    Company getCompany(Long companyID) throws CompanyNotFoundException;
17
+    void deleteCompany(Long companyID) throws CompanyNotFoundException;
18
+    Company updateCompany(Long companyID, Company company) throws CompanyNotFoundException, CompanyFieldsEmptyException;
82 19
 }

+ 81
- 0
company-microservice/src/main/java/fr/natan/microservices/companymicroservice/service/services/CompanyServiceImplement.java View File

@@ -0,0 +1,81 @@
1
+package fr.natan.microservices.companymicroservice.service.services;
2
+
3
+import fr.natan.microservices.companymicroservice.exceptions.CompanyAlreadyExistsException;
4
+import fr.natan.microservices.companymicroservice.exceptions.CompanyFieldsEmptyException;
5
+import fr.natan.microservices.companymicroservice.exceptions.CompanyNotFoundException;
6
+import fr.natan.microservices.companymicroservice.exceptions.CompanyTypesInvalidException;
7
+import fr.natan.microservices.companymicroservice.model.company.Company;
8
+import fr.natan.microservices.companymicroservice.repository.CompanyRepository;
9
+import fr.natan.microservices.companymicroservice.service.utilities.CompanyValidator;
10
+import org.springframework.stereotype.Service;
11
+
12
+import javax.transaction.Transactional;
13
+import java.sql.Date;
14
+import java.sql.Time;
15
+import java.util.Collection;
16
+import java.util.List;
17
+
18
+@Service
19
+public class CompanyServiceImplement implements CompanyService {
20
+
21
+    private final CompanyRepository companyRepository;
22
+
23
+    public CompanyServiceImplement(CompanyRepository companyRepository) {
24
+        this.companyRepository = companyRepository;
25
+    }
26
+
27
+    @Override
28
+    public List<Company> getCompanyByName(String companyName) {
29
+        return companyRepository.findByCompanyName(companyName);
30
+    }
31
+    @Override
32
+    public Company createCompany(Company company) throws CompanyAlreadyExistsException, CompanyFieldsEmptyException,
33
+            CompanyTypesInvalidException {
34
+        if(! CompanyValidator.isValidCompany(company)){
35
+            throw new CompanyFieldsEmptyException();
36
+        }
37
+        else if(!CompanyValidator.validCompanyTypes(company)){
38
+            throw new CompanyTypesInvalidException();
39
+        }
40
+        Company formattedCompany = CompanyValidator.formatCompany(company);
41
+        if(getCompanyByName(formattedCompany.getCompanyName()).size()>0){
42
+            throw new CompanyAlreadyExistsException();
43
+        }
44
+
45
+        company.setConnectionDate(new Date(System.currentTimeMillis())+" : "+new Time(System.currentTimeMillis()));
46
+
47
+        return companyRepository.save(formattedCompany);
48
+    }
49
+
50
+    @Override
51
+    public Collection<Company> getCompanies() {
52
+        return companyRepository.findAll();
53
+    }
54
+
55
+    @Override
56
+    public Company getCompany(Long companyID) throws CompanyNotFoundException {
57
+        return companyRepository.findById(companyID).orElseThrow(
58
+                ()-> new CompanyNotFoundException()
59
+        );
60
+    }
61
+
62
+    @Override
63
+    public void deleteCompany(Long companyID) throws CompanyNotFoundException {
64
+        companyRepository.delete(getCompany(companyID));
65
+    }
66
+
67
+    @Override
68
+    @Transactional
69
+    public Company updateCompany(Long companyID, Company company) throws CompanyNotFoundException,
70
+            CompanyFieldsEmptyException {
71
+        if(!CompanyValidator.isValidCompany(company))
72
+            throw new CompanyFieldsEmptyException();
73
+
74
+       Company savedCompany = getCompany(companyID);
75
+       savedCompany.setCompanyName(company.getCompanyName());
76
+       savedCompany.setCompanyType1(company.getCompanyType1());
77
+       savedCompany.setCompanyType2(company.getCompanyType2());
78
+
79
+        return savedCompany;
80
+    }
81
+}

+ 3
- 3
company-microservice/src/main/java/fr/natan/microservices/companymicroservice/t_controller/CompanyController.java View File

@@ -5,7 +5,7 @@ import fr.natan.microservices.companymicroservice.exceptions.CompanyFieldsEmptyE
5 5
 import fr.natan.microservices.companymicroservice.exceptions.CompanyNotFoundException;
6 6
 import fr.natan.microservices.companymicroservice.exceptions.CompanyTypesInvalidException;
7 7
 import fr.natan.microservices.companymicroservice.model.company.Company;
8
-import fr.natan.microservices.companymicroservice.service.contract.CompanyContract;
8
+import fr.natan.microservices.companymicroservice.service.services.CompanyService;
9 9
 import org.springframework.web.bind.annotation.*;
10 10
 
11 11
 import java.util.Collection;
@@ -13,9 +13,9 @@ import java.util.Collection;
13 13
 @RestController
14 14
 public class CompanyController {
15 15
 
16
-    private final CompanyContract companyContract;
16
+    private final CompanyService companyContract;
17 17
 
18
-    public CompanyController(CompanyContract companyContract) {
18
+    public CompanyController(CompanyService companyContract) {
19 19
         this.companyContract = companyContract;
20 20
     }
21 21
 

+ 0
- 23
project-microservice/src/main/java/fr/natan/microservices/projectmicroservice/service/contract/ProjectContract.java View File

@@ -1,23 +0,0 @@
1
-package fr.natan.microservices.projectmicroservice.service.contract;
2
-
3
-import fr.natan.microservices.projectmicroservice.model.entity.Project;
4
-import fr.natan.microservices.projectmicroservice.module_exception.exceptions.*;
5
-
6
-import java.util.Collection;
7
-
8
-public interface ProjectContract {
9
-    Collection<Project> getProjects(String projectName);
10
-    Project createProject(Project project) throws ProjectAlreadyExistsException,
11
-            ProjectFieldsEmptyException, ProjectDescriptionShortException, UserNotFoundException,
12
-            AddressNotFoundException, CompanyNotFoundException, ProjectPriorityInvalidException, ProjectStateInvalidException;
13
-    Collection<Project> getProjects();
14
-    Project getProject(Long projectID) throws ProjectNotFoundException, CompanyNotFoundException, UserNotFoundException;
15
-    Collection<Project> getProjectForUser(Long userID) throws UserNotFoundException;
16
-    Collection<Project> getProjectForCompany(Long companyID) throws CompanyNotFoundException;
17
-    Collection<Project> getProjectForUserInCompany(Long userID, Long companyID) throws UserNotFoundException,
18
-    CompanyNotFoundException;
19
-
20
-    Project updateProject(Long projectID, Project project) throws ProjectNotFoundException,
21
-            ProjectFieldsEmptyException, ProjectDescriptionShortException, UserNotFoundException, CompanyNotFoundException;
22
-    void deleteProject(Long projectID) throws ProjectNotFoundException, UserNotFoundException, CompanyNotFoundException;
23
-}

+ 15
- 189
project-microservice/src/main/java/fr/natan/microservices/projectmicroservice/service/services/ProjectService.java View File

@@ -2,196 +2,22 @@ package fr.natan.microservices.projectmicroservice.service.services;
2 2
 
3 3
 import fr.natan.microservices.projectmicroservice.model.entity.Project;
4 4
 import fr.natan.microservices.projectmicroservice.module_exception.exceptions.*;
5
-import fr.natan.microservices.projectmicroservice.repository.ProjectRepository;
6
-import fr.natan.microservices.projectmicroservice.service.contract.ProjectContract;
7
-import fr.natan.microservices.projectmicroservice.service.utilities.ProjectValidator;
8
-import fr.natan.microservices.projectmicroservice.t_openfeign.models.address.Address;
9
-import fr.natan.microservices.projectmicroservice.t_openfeign.models.company.entity.Company;
10
-import fr.natan.microservices.projectmicroservice.t_openfeign.models.user.User;
11
-import fr.natan.microservices.projectmicroservice.t_openfeign.services.AddressService;
12
-import fr.natan.microservices.projectmicroservice.t_openfeign.services.CompanyService;
13
-import fr.natan.microservices.projectmicroservice.t_openfeign.services.UserService;
14
-import org.springframework.stereotype.Service;
15 5
 
16
-import javax.transaction.Transactional;
17
-import java.sql.Date;
18
-import java.sql.Time;
19 6
 import java.util.Collection;
20 7
 
21
-@Service
22
-public class ProjectService implements ProjectContract {
23
-    private final ProjectRepository projectRepository;
24
-    private  final AddressService addressService;
25
-    private final UserService userService;
26
-    private final CompanyService companyService;
27
-
28
-    public ProjectService(ProjectRepository projectRepository,
29
-                          AddressService addressService, UserService userService,
30
-                          CompanyService companyService) {
31
-        this.projectRepository = projectRepository;
32
-        this.addressService = addressService;
33
-        this.userService = userService;
34
-        this.companyService = companyService;
35
-    }
36
-
37
-    @Override
38
-    public Collection<Project> getProjects(String projectName) {
39
-        return projectRepository.findByProjectName(projectName);
40
-    }
41
-
42
-    @Override
43
-    public Project createProject(Project project) throws ProjectAlreadyExistsException, ProjectFieldsEmptyException,
44
-            ProjectDescriptionShortException, UserNotFoundException, AddressNotFoundException,
45
-            CompanyNotFoundException, ProjectPriorityInvalidException, ProjectStateInvalidException {
46
-        //check fields
47
-        if(!ProjectValidator.areValidProjectFields(project)){
48
-            throw new ProjectFieldsEmptyException();
49
-        }
50
-        //check size of description
51
-        else if(! ProjectValidator.isValidProjectDescription(project)){
52
-            throw new ProjectDescriptionShortException();
53
-        }
54
-
55
-        //check if input priority is in the enum
56
-        if(!ProjectValidator.isValidProjectPriority(project)){
57
-            throw new ProjectPriorityInvalidException();
58
-        }
59
-
60
-        if(!ProjectValidator.isValidProjectState(project)){
61
-            throw new ProjectStateInvalidException();
62
-        }
63
-        if(getProjects(project.getProjectName()).size()>0){
64
-            throw new ProjectAlreadyExistsException();
65
-        }
66
-
67
-        Project formattedProject = ProjectValidator.formatProject(project);
68
-        User user = userService.getUserByID(project.getUserID());
69
-        Address address = addressService.getAddressByID(user.getAddressID());
70
-        user.setAddress(address);
71
-
72
-        formattedProject.setCreatedDate(
73
-                new Date(System.currentTimeMillis())+" : "
74
-                        + new Time(System.currentTimeMillis())
75
-        );
76
-
77
-        formattedProject.setUser(user);
78
-
79
-        Company company = companyService.getCompanyByID(project.getCompanyID());
80
-        formattedProject.setCompany(company);
81
-
82
-        return projectRepository.save(formattedProject);
83
-    }
84
-
85
-    @Override
86
-    public Collection<Project> getProjects() {
87
-        Collection<Project> projects = projectRepository.findAll();
88
-        projects.forEach(project -> {
89
-            try {
90
-                project.setUser(userService.getUserByID(project.getUserID()));
91
-                project.setCompany(companyService.getCompanyByID(project.getCompanyID()));
92
-            } catch (UserNotFoundException | CompanyNotFoundException e) {
93
-                e.printStackTrace();
94
-            }
95
-        });
96
-
97
-        return projects;
98
-    }
99
-
100
-    @Override
101
-    public Project getProject(Long projectID) throws ProjectNotFoundException, CompanyNotFoundException, UserNotFoundException {
102
-        Project project = projectRepository.findById(projectID).orElseThrow(
103
-                ()-> new ProjectNotFoundException()
104
-        );
105
-        project.setCompany(companyService.getCompanyByID(project.getCompanyID()));
106
-        project.setUser(userService.getUserByID(project.getUserID()));
107
-        return project;
108
-    }
109
-
110
-    @Override
111
-    public Collection<Project> getProjectForUser(Long userID) throws UserNotFoundException {
112
-        if(userService.getUserByID(userID)== null){
113
-            throw new UserNotFoundException();
114
-        }
115
-        Collection<Project> projects = projectRepository.findByUserID(userID);
116
-
117
-        projects.forEach(project -> {
118
-            try {
119
-                project.setUser(userService.getUserByID(project.getUserID()));
120
-                project.setCompany(companyService.getCompanyByID(project.getCompanyID()));
121
-            } catch (UserNotFoundException | CompanyNotFoundException e) {
122
-                e.printStackTrace();
123
-            }
124
-        });
125
-        return projects;
126
-    }
127
-
128
-    @Override
129
-    public Collection<Project> getProjectForCompany(Long companyID) throws CompanyNotFoundException {
130
-        if(companyService.getCompanyByID(companyID)==null){
131
-            throw new CompanyNotFoundException();
132
-        }
133
-        Collection<Project> projects = projectRepository.findByCompanyID(companyID);
134
-        projects.forEach(project -> {
135
-            try {
136
-                project.setUser(userService.getUserByID(project.getUserID()));
137
-                project.setCompany(companyService.getCompanyByID(project.getCompanyID()));
138
-            } catch (UserNotFoundException | CompanyNotFoundException e) {
139
-                e.printStackTrace();
140
-            }
141
-        });
142
-        return projects;
143
-    }
144
-
145
-    @Override
146
-    public Collection<Project> getProjectForUserInCompany(Long userID, Long companyID) throws
147
-            UserNotFoundException, CompanyNotFoundException {
148
-        if(userService.getUserByID(userID)==null){
149
-            throw new UserNotFoundException();
150
-        }
151
-        if(companyService.getCompanyByID(companyID)==null){
152
-            throw new CompanyNotFoundException();
153
-        }
154
-        Collection<Project> projects = projectRepository.findByUserIDAndCompanyID(userID, companyID);
155
-        projects.forEach(project -> {
156
-            try {
157
-                project.setUser(userService.getUserByID(userID));
158
-                project.setCompany(companyService.getCompanyByID(companyID));
159
-            } catch (UserNotFoundException | CompanyNotFoundException e) {
160
-                throw new RuntimeException(e);
161
-            }
162
-        });
163
-
164
-        return projects;
165
-    }
166
-
167
-    @Override
168
-    @Transactional
169
-    public Project updateProject(Long projectID, Project project) throws ProjectNotFoundException,
170
-            ProjectFieldsEmptyException, ProjectDescriptionShortException, UserNotFoundException, CompanyNotFoundException {
171
-
172
-        if(!ProjectValidator.areValidProjectFields(project)){
173
-            throw new ProjectFieldsEmptyException();
174
-        }
175
-        else if(!ProjectValidator.isValidProjectDescription(project)){
176
-            throw new ProjectDescriptionShortException();
177
-        }
178
-        Project formattedProject = ProjectValidator.formatProject(project);
179
-        Project savedProject = getProject(projectID);
180
-
181
-        savedProject.setProjectName(formattedProject.getProjectName());
182
-        savedProject.setPriority(formattedProject.getPriority());
183
-        savedProject.setDescription(project.getDescription());
184
-        savedProject.setUserID(project.getUserID());
185
-        savedProject.setUser(userService.getUserByID(project.getUserID()));
186
-        savedProject.setCompanyID(project.getCompanyID());
187
-        savedProject.setCompany(companyService.getCompanyByID(project.getCompanyID()));
188
-        savedProject.setProjState(project.getProjState());
189
-
190
-        return savedProject;
191
-    }
192
-
193
-    @Override
194
-    public void deleteProject(Long projectID) throws ProjectNotFoundException, UserNotFoundException, CompanyNotFoundException {
195
-        projectRepository.delete(getProject(projectID));
196
-    }
8
+public interface ProjectService {
9
+    Collection<Project> getProjects(String projectName);
10
+    Project createProject(Project project) throws ProjectAlreadyExistsException,
11
+            ProjectFieldsEmptyException, ProjectDescriptionShortException, UserNotFoundException,
12
+            AddressNotFoundException, CompanyNotFoundException, ProjectPriorityInvalidException, ProjectStateInvalidException;
13
+    Collection<Project> getProjects();
14
+    Project getProject(Long projectID) throws ProjectNotFoundException, CompanyNotFoundException, UserNotFoundException;
15
+    Collection<Project> getProjectForUser(Long userID) throws UserNotFoundException;
16
+    Collection<Project> getProjectForCompany(Long companyID) throws CompanyNotFoundException;
17
+    Collection<Project> getProjectForUserInCompany(Long userID, Long companyID) throws UserNotFoundException,
18
+    CompanyNotFoundException;
19
+
20
+    Project updateProject(Long projectID, Project project) throws ProjectNotFoundException,
21
+            ProjectFieldsEmptyException, ProjectDescriptionShortException, UserNotFoundException, CompanyNotFoundException;
22
+    void deleteProject(Long projectID) throws ProjectNotFoundException, UserNotFoundException, CompanyNotFoundException;
197 23
 }

+ 196
- 0
project-microservice/src/main/java/fr/natan/microservices/projectmicroservice/service/services/ProjectServiceImplement.java View File

@@ -0,0 +1,196 @@
1
+package fr.natan.microservices.projectmicroservice.service.services;
2
+
3
+import fr.natan.microservices.projectmicroservice.model.entity.Project;
4
+import fr.natan.microservices.projectmicroservice.module_exception.exceptions.*;
5
+import fr.natan.microservices.projectmicroservice.repository.ProjectRepository;
6
+import fr.natan.microservices.projectmicroservice.service.utilities.ProjectValidator;
7
+import fr.natan.microservices.projectmicroservice.t_openfeign.models.address.Address;
8
+import fr.natan.microservices.projectmicroservice.t_openfeign.models.company.entity.Company;
9
+import fr.natan.microservices.projectmicroservice.t_openfeign.models.user.User;
10
+import fr.natan.microservices.projectmicroservice.t_openfeign.services.AddressService;
11
+import fr.natan.microservices.projectmicroservice.t_openfeign.services.CompanyService;
12
+import fr.natan.microservices.projectmicroservice.t_openfeign.services.UserService;
13
+import org.springframework.stereotype.Service;
14
+
15
+import javax.transaction.Transactional;
16
+import java.sql.Date;
17
+import java.sql.Time;
18
+import java.util.Collection;
19
+
20
+@Service
21
+public class ProjectServiceImplement implements ProjectService {
22
+    private final ProjectRepository projectRepository;
23
+    private  final AddressService addressService;
24
+    private final UserService userService;
25
+    private final CompanyService companyService;
26
+
27
+    public ProjectServiceImplement(ProjectRepository projectRepository,
28
+                                   AddressService addressService, UserService userService,
29
+                                   CompanyService companyService) {
30
+        this.projectRepository = projectRepository;
31
+        this.addressService = addressService;
32
+        this.userService = userService;
33
+        this.companyService = companyService;
34
+    }
35
+
36
+    @Override
37
+    public Collection<Project> getProjects(String projectName) {
38
+        return projectRepository.findByProjectName(projectName);
39
+    }
40
+
41
+    @Override
42
+    public Project createProject(Project project) throws ProjectAlreadyExistsException, ProjectFieldsEmptyException,
43
+            ProjectDescriptionShortException, UserNotFoundException, AddressNotFoundException,
44
+            CompanyNotFoundException, ProjectPriorityInvalidException, ProjectStateInvalidException {
45
+        //check fields
46
+        if(!ProjectValidator.areValidProjectFields(project)){
47
+            throw new ProjectFieldsEmptyException();
48
+        }
49
+        //check size of description
50
+        else if(! ProjectValidator.isValidProjectDescription(project)){
51
+            throw new ProjectDescriptionShortException();
52
+        }
53
+
54
+        //check if input priority is in the enum
55
+        if(!ProjectValidator.isValidProjectPriority(project)){
56
+            throw new ProjectPriorityInvalidException();
57
+        }
58
+
59
+        if(!ProjectValidator.isValidProjectState(project)){
60
+            throw new ProjectStateInvalidException();
61
+        }
62
+        if(getProjects(project.getProjectName()).size()>0){
63
+            throw new ProjectAlreadyExistsException();
64
+        }
65
+
66
+        Project formattedProject = ProjectValidator.formatProject(project);
67
+        User user = userService.getUserByID(project.getUserID());
68
+        Address address = addressService.getAddressByID(user.getAddressID());
69
+        user.setAddress(address);
70
+
71
+        formattedProject.setCreatedDate(
72
+                new Date(System.currentTimeMillis())+" : "
73
+                        + new Time(System.currentTimeMillis())
74
+        );
75
+
76
+        formattedProject.setUser(user);
77
+
78
+        Company company = companyService.getCompanyByID(project.getCompanyID());
79
+        formattedProject.setCompany(company);
80
+
81
+        return projectRepository.save(formattedProject);
82
+    }
83
+
84
+    @Override
85
+    public Collection<Project> getProjects() {
86
+        Collection<Project> projects = projectRepository.findAll();
87
+        projects.forEach(project -> {
88
+            try {
89
+                project.setUser(userService.getUserByID(project.getUserID()));
90
+                project.setCompany(companyService.getCompanyByID(project.getCompanyID()));
91
+            } catch (UserNotFoundException | CompanyNotFoundException e) {
92
+                e.printStackTrace();
93
+            }
94
+        });
95
+
96
+        return projects;
97
+    }
98
+
99
+    @Override
100
+    public Project getProject(Long projectID) throws ProjectNotFoundException, CompanyNotFoundException, UserNotFoundException {
101
+        Project project = projectRepository.findById(projectID).orElseThrow(
102
+                ()-> new ProjectNotFoundException()
103
+        );
104
+        project.setCompany(companyService.getCompanyByID(project.getCompanyID()));
105
+        project.setUser(userService.getUserByID(project.getUserID()));
106
+        return project;
107
+    }
108
+
109
+    @Override
110
+    public Collection<Project> getProjectForUser(Long userID) throws UserNotFoundException {
111
+        if(userService.getUserByID(userID)== null){
112
+            throw new UserNotFoundException();
113
+        }
114
+        Collection<Project> projects = projectRepository.findByUserID(userID);
115
+
116
+        projects.forEach(project -> {
117
+            try {
118
+                project.setUser(userService.getUserByID(project.getUserID()));
119
+                project.setCompany(companyService.getCompanyByID(project.getCompanyID()));
120
+            } catch (UserNotFoundException | CompanyNotFoundException e) {
121
+                e.printStackTrace();
122
+            }
123
+        });
124
+        return projects;
125
+    }
126
+
127
+    @Override
128
+    public Collection<Project> getProjectForCompany(Long companyID) throws CompanyNotFoundException {
129
+        if(companyService.getCompanyByID(companyID)==null){
130
+            throw new CompanyNotFoundException();
131
+        }
132
+        Collection<Project> projects = projectRepository.findByCompanyID(companyID);
133
+        projects.forEach(project -> {
134
+            try {
135
+                project.setUser(userService.getUserByID(project.getUserID()));
136
+                project.setCompany(companyService.getCompanyByID(project.getCompanyID()));
137
+            } catch (UserNotFoundException | CompanyNotFoundException e) {
138
+                e.printStackTrace();
139
+            }
140
+        });
141
+        return projects;
142
+    }
143
+
144
+    @Override
145
+    public Collection<Project> getProjectForUserInCompany(Long userID, Long companyID) throws
146
+            UserNotFoundException, CompanyNotFoundException {
147
+        if(userService.getUserByID(userID)==null){
148
+            throw new UserNotFoundException();
149
+        }
150
+        if(companyService.getCompanyByID(companyID)==null){
151
+            throw new CompanyNotFoundException();
152
+        }
153
+        Collection<Project> projects = projectRepository.findByUserIDAndCompanyID(userID, companyID);
154
+        projects.forEach(project -> {
155
+            try {
156
+                project.setUser(userService.getUserByID(userID));
157
+                project.setCompany(companyService.getCompanyByID(companyID));
158
+            } catch (UserNotFoundException | CompanyNotFoundException e) {
159
+                throw new RuntimeException(e);
160
+            }
161
+        });
162
+
163
+        return projects;
164
+    }
165
+
166
+    @Override
167
+    @Transactional
168
+    public Project updateProject(Long projectID, Project project) throws ProjectNotFoundException,
169
+            ProjectFieldsEmptyException, ProjectDescriptionShortException, UserNotFoundException, CompanyNotFoundException {
170
+
171
+        if(!ProjectValidator.areValidProjectFields(project)){
172
+            throw new ProjectFieldsEmptyException();
173
+        }
174
+        else if(!ProjectValidator.isValidProjectDescription(project)){
175
+            throw new ProjectDescriptionShortException();
176
+        }
177
+        Project formattedProject = ProjectValidator.formatProject(project);
178
+        Project savedProject = getProject(projectID);
179
+
180
+        savedProject.setProjectName(formattedProject.getProjectName());
181
+        savedProject.setPriority(formattedProject.getPriority());
182
+        savedProject.setDescription(project.getDescription());
183
+        savedProject.setUserID(project.getUserID());
184
+        savedProject.setUser(userService.getUserByID(project.getUserID()));
185
+        savedProject.setCompanyID(project.getCompanyID());
186
+        savedProject.setCompany(companyService.getCompanyByID(project.getCompanyID()));
187
+        savedProject.setProjState(project.getProjState());
188
+
189
+        return savedProject;
190
+    }
191
+
192
+    @Override
193
+    public void deleteProject(Long projectID) throws ProjectNotFoundException, UserNotFoundException, CompanyNotFoundException {
194
+        projectRepository.delete(getProject(projectID));
195
+    }
196
+}

+ 3
- 3
project-microservice/src/main/java/fr/natan/microservices/projectmicroservice/tt_controller/ProjectController.java View File

@@ -2,7 +2,7 @@ package fr.natan.microservices.projectmicroservice.tt_controller;
2 2
 
3 3
 import fr.natan.microservices.projectmicroservice.model.entity.Project;
4 4
 import fr.natan.microservices.projectmicroservice.module_exception.exceptions.*;
5
-import fr.natan.microservices.projectmicroservice.service.contract.ProjectContract;
5
+import fr.natan.microservices.projectmicroservice.service.services.ProjectService;
6 6
 import org.springframework.web.bind.annotation.*;
7 7
 
8 8
 import java.util.Collection;
@@ -10,9 +10,9 @@ import java.util.Collection;
10 10
 @RestController
11 11
 public class ProjectController {
12 12
 
13
-    private final ProjectContract projectContract;
13
+    private final ProjectService projectContract;
14 14
 
15
-    public ProjectController(ProjectContract projectContract) {
15
+    public ProjectController(ProjectService projectContract) {
16 16
         this.projectContract = projectContract;
17 17
     }
18 18
 

+ 0
- 20
user-microservice/src/main/java/fr/natan/microservices/usermicroservice/service/contract/UserContract.java View File

@@ -1,20 +0,0 @@
1
-package fr.natan.microservices.usermicroservice.service.contract;
2
-
3
-import fr.natan.microservices.usermicroservice.exceptions.AddressNotFoundException;
4
-import fr.natan.microservices.usermicroservice.exceptions.UserAlreadyExistsException;
5
-import fr.natan.microservices.usermicroservice.exceptions.UserFieldsEmptyException;
6
-import fr.natan.microservices.usermicroservice.exceptions.UserNotFoundException;
7
-import fr.natan.microservices.usermicroservice.model.User;
8
-
9
-import java.util.Collection;
10
-
11
-public interface UserContract {
12
-    User createUser(User user) throws UserAlreadyExistsException, UserFieldsEmptyException, AddressNotFoundException;
13
-    Collection<User> getUsers();
14
-    Collection<User> getUsers(String firstname, String lastname);
15
-    User getUser(Long userID) throws UserNotFoundException, AddressNotFoundException;
16
-    User updateUser(Long userID, User user) throws UserNotFoundException, UserFieldsEmptyException, AddressNotFoundException;
17
-    void deleteUser(Long userID) throws UserNotFoundException, AddressNotFoundException;
18
-    void deleteAllUsers();
19
-    Collection<User> getUsersLivingAtAddress(Long addressID) throws AddressNotFoundException;
20
-}

+ 9
- 124
user-microservice/src/main/java/fr/natan/microservices/usermicroservice/service/services/UserService.java View File

@@ -5,131 +5,16 @@ import fr.natan.microservices.usermicroservice.exceptions.UserAlreadyExistsExcep
5 5
 import fr.natan.microservices.usermicroservice.exceptions.UserFieldsEmptyException;
6 6
 import fr.natan.microservices.usermicroservice.exceptions.UserNotFoundException;
7 7
 import fr.natan.microservices.usermicroservice.model.User;
8
-import fr.natan.microservices.usermicroservice.repository.UserRepository;
9
-import fr.natan.microservices.usermicroservice.service.contract.UserContract;
10
-import fr.natan.microservices.usermicroservice.service.utilities.UserValidator;
11
-import fr.natan.microservices.usermicroservice.t_openfeign.model.Address;
12
-import fr.natan.microservices.usermicroservice.t_openfeign.service.AddressService;
13
-import org.springframework.stereotype.Service;
14 8
 
15
-import javax.transaction.Transactional;
16
-import java.sql.Date;
17
-import java.sql.Time;
18 9
 import java.util.Collection;
19 10
 
20
-@Service
21
-public class UserService implements UserContract {
22
-
23
-    private final UserRepository userRepository;
24
-    private final AddressService addressService;
25
-
26
-    public UserService(UserRepository userRepository, AddressService addressService) {
27
-        this.userRepository = userRepository;
28
-        this.addressService = addressService;
29
-    }
30
-
31
-    @Override
32
-    public Collection<User> getUsers(String firstname, String lastname) {
33
-        return userRepository.findByFirstnameAndLastname(firstname, lastname);
34
-    }
35
-
36
-    @Override
37
-    public User createUser(User user) throws UserAlreadyExistsException, UserFieldsEmptyException, AddressNotFoundException {
38
-        if(!UserValidator.isValidUser(user)){
39
-            throw new UserFieldsEmptyException();
40
-        }
41
-        User formattedUser = UserValidator.formatUser(user);
42
-        if(getUsers(formattedUser.getFirstname(), formattedUser.getLastname()).size()>0){
43
-            throw new UserAlreadyExistsException();
44
-        }
45
-
46
-        user.setCreatedDate(new Date(System.currentTimeMillis()) + " : " + new Time(System.currentTimeMillis()));
47
-
48
-
49
-        Address address = addressService.getAddress(user.getAddressID());
50
-        if(address==null){
51
-            throw new AddressNotFoundException();
52
-        }
53
-        user.setAddressID(user.getAddressID());
54
-        user.setAddress(address);
55
-        return userRepository.save(user);
56
-    }
57
-
58
-    @Override
59
-    public Collection<User> getUsers() {
60
-        Collection<User> users = userRepository.findAll();
61
-        users.forEach(user -> {
62
-            try {
63
-                user.setAddress(addressService.getAddress(user.getAddressID()));
64
-            } catch (AddressNotFoundException e) {
65
-                throw new RuntimeException(e);
66
-            }
67
-        });
68
-        return users;
69
-    }
70
-
71
-    @Override
72
-    public User getUser(Long userID) throws UserNotFoundException, AddressNotFoundException {
73
-        User user = userRepository.findById(userID).orElseThrow(
74
-                ()-> new UserNotFoundException()
75
-        );
76
-        Address address = addressService.getAddress(user.getAddressID());
77
-        user.setAddress(address);
78
-
79
-        return user;
80
-    }
81
-
82
-    @Override
83
-    @Transactional
84
-    public User updateUser(Long userID, User user) throws UserNotFoundException, UserFieldsEmptyException,
85
-            AddressNotFoundException {
86
-        if (!UserValidator.isValidUser(user)){
87
-            throw new UserFieldsEmptyException();
88
-        }
89
-        Address address = addressService.getAddress(user.getAddressID());
90
-        if(address==null){
91
-            throw new AddressNotFoundException();
92
-        }
93
-
94
-        user = UserValidator.formatUser(user);
95
-
96
-        User savedUser = getUser(userID);
97
-        savedUser.setLastname(user.getLastname());
98
-        savedUser.setFirstname(user.getFirstname());
99
-        savedUser.setEmail(user.getEmail());
100
-        savedUser.setUserType(user.getUserType());
101
-        savedUser.setAddressID(user.getAddressID());
102
-        savedUser.setAddress(address);
103
-
104
-        return savedUser;
105
-    }
106
-
107
-    @Override
108
-    public void deleteUser(Long userID) throws UserNotFoundException, AddressNotFoundException {
109
-        userRepository.delete(getUser(userID));
110
-    }
111
-
112
-    @Override
113
-    public void deleteAllUsers() {
114
-        userRepository.deleteAll();
115
-    }
116
-
117
-    @Override
118
-    public Collection<User> getUsersLivingAtAddress(Long addressID) throws AddressNotFoundException {
119
-        Address address = addressService.getAddress(addressID);
120
-        if(address==null){
121
-            throw new AddressNotFoundException();
122
-        }
123
-
124
-        Collection<User> users = userRepository.findByAddressID(addressID);
125
-        users.forEach(user -> {
126
-            try {
127
-                user.setAddress(addressService.getAddress(user.getAddressID()));
128
-            } catch (AddressNotFoundException e) {
129
-                throw new RuntimeException(e);
130
-            }
131
-        });
132
-        return users;
133
-    }
134
-
11
+public interface UserService {
12
+    User createUser(User user) throws UserAlreadyExistsException, UserFieldsEmptyException, AddressNotFoundException;
13
+    Collection<User> getUsers();
14
+    Collection<User> getUsers(String firstname, String lastname);
15
+    User getUser(Long userID) throws UserNotFoundException, AddressNotFoundException;
16
+    User updateUser(Long userID, User user) throws UserNotFoundException, UserFieldsEmptyException, AddressNotFoundException;
17
+    void deleteUser(Long userID) throws UserNotFoundException, AddressNotFoundException;
18
+    void deleteAllUsers();
19
+    Collection<User> getUsersLivingAtAddress(Long addressID) throws AddressNotFoundException;
135 20
 }

+ 134
- 0
user-microservice/src/main/java/fr/natan/microservices/usermicroservice/service/services/UserServiceImplement.java View File

@@ -0,0 +1,134 @@
1
+package fr.natan.microservices.usermicroservice.service.services;
2
+
3
+import fr.natan.microservices.usermicroservice.exceptions.AddressNotFoundException;
4
+import fr.natan.microservices.usermicroservice.exceptions.UserAlreadyExistsException;
5
+import fr.natan.microservices.usermicroservice.exceptions.UserFieldsEmptyException;
6
+import fr.natan.microservices.usermicroservice.exceptions.UserNotFoundException;
7
+import fr.natan.microservices.usermicroservice.model.User;
8
+import fr.natan.microservices.usermicroservice.repository.UserRepository;
9
+import fr.natan.microservices.usermicroservice.service.utilities.UserValidator;
10
+import fr.natan.microservices.usermicroservice.t_openfeign.model.Address;
11
+import fr.natan.microservices.usermicroservice.t_openfeign.service.AddressService;
12
+import org.springframework.stereotype.Service;
13
+
14
+import javax.transaction.Transactional;
15
+import java.sql.Date;
16
+import java.sql.Time;
17
+import java.util.Collection;
18
+
19
+@Service
20
+public class UserServiceImplement implements UserService {
21
+
22
+    private final UserRepository userRepository;
23
+    private final AddressService addressService;
24
+
25
+    public UserServiceImplement(UserRepository userRepository, AddressService addressService) {
26
+        this.userRepository = userRepository;
27
+        this.addressService = addressService;
28
+    }
29
+
30
+    @Override
31
+    public Collection<User> getUsers(String firstname, String lastname) {
32
+        return userRepository.findByFirstnameAndLastname(firstname, lastname);
33
+    }
34
+
35
+    @Override
36
+    public User createUser(User user) throws UserAlreadyExistsException, UserFieldsEmptyException, AddressNotFoundException {
37
+        if(!UserValidator.isValidUser(user)){
38
+            throw new UserFieldsEmptyException();
39
+        }
40
+        User formattedUser = UserValidator.formatUser(user);
41
+        if(getUsers(formattedUser.getFirstname(), formattedUser.getLastname()).size()>0){
42
+            throw new UserAlreadyExistsException();
43
+        }
44
+
45
+        user.setCreatedDate(new Date(System.currentTimeMillis()) + " : " + new Time(System.currentTimeMillis()));
46
+
47
+
48
+        Address address = addressService.getAddress(user.getAddressID());
49
+        if(address==null){
50
+            throw new AddressNotFoundException();
51
+        }
52
+        user.setAddressID(user.getAddressID());
53
+        user.setAddress(address);
54
+        return userRepository.save(user);
55
+    }
56
+
57
+    @Override
58
+    public Collection<User> getUsers() {
59
+        Collection<User> users = userRepository.findAll();
60
+        users.forEach(user -> {
61
+            try {
62
+                user.setAddress(addressService.getAddress(user.getAddressID()));
63
+            } catch (AddressNotFoundException e) {
64
+                throw new RuntimeException(e);
65
+            }
66
+        });
67
+        return users;
68
+    }
69
+
70
+    @Override
71
+    public User getUser(Long userID) throws UserNotFoundException, AddressNotFoundException {
72
+        User user = userRepository.findById(userID).orElseThrow(
73
+                ()-> new UserNotFoundException()
74
+        );
75
+        Address address = addressService.getAddress(user.getAddressID());
76
+        user.setAddress(address);
77
+
78
+        return user;
79
+    }
80
+
81
+    @Override
82
+    @Transactional
83
+    public User updateUser(Long userID, User user) throws UserNotFoundException, UserFieldsEmptyException,
84
+            AddressNotFoundException {
85
+        if (!UserValidator.isValidUser(user)){
86
+            throw new UserFieldsEmptyException();
87
+        }
88
+        Address address = addressService.getAddress(user.getAddressID());
89
+        if(address==null){
90
+            throw new AddressNotFoundException();
91
+        }
92
+
93
+        user = UserValidator.formatUser(user);
94
+
95
+        User savedUser = getUser(userID);
96
+        savedUser.setLastname(user.getLastname());
97
+        savedUser.setFirstname(user.getFirstname());
98
+        savedUser.setEmail(user.getEmail());
99
+        savedUser.setUserType(user.getUserType());
100
+        savedUser.setAddressID(user.getAddressID());
101
+        savedUser.setAddress(address);
102
+
103
+        return savedUser;
104
+    }
105
+
106
+    @Override
107
+    public void deleteUser(Long userID) throws UserNotFoundException, AddressNotFoundException {
108
+        userRepository.delete(getUser(userID));
109
+    }
110
+
111
+    @Override
112
+    public void deleteAllUsers() {
113
+        userRepository.deleteAll();
114
+    }
115
+
116
+    @Override
117
+    public Collection<User> getUsersLivingAtAddress(Long addressID) throws AddressNotFoundException {
118
+        Address address = addressService.getAddress(addressID);
119
+        if(address==null){
120
+            throw new AddressNotFoundException();
121
+        }
122
+
123
+        Collection<User> users = userRepository.findByAddressID(addressID);
124
+        users.forEach(user -> {
125
+            try {
126
+                user.setAddress(addressService.getAddress(user.getAddressID()));
127
+            } catch (AddressNotFoundException e) {
128
+                throw new RuntimeException(e);
129
+            }
130
+        });
131
+        return users;
132
+    }
133
+
134
+}

+ 3
- 3
user-microservice/src/main/java/fr/natan/microservices/usermicroservice/tt_controller/UserController.java View File

@@ -5,7 +5,7 @@ import fr.natan.microservices.usermicroservice.exceptions.UserAlreadyExistsExcep
5 5
 import fr.natan.microservices.usermicroservice.exceptions.UserFieldsEmptyException;
6 6
 import fr.natan.microservices.usermicroservice.exceptions.UserNotFoundException;
7 7
 import fr.natan.microservices.usermicroservice.model.User;
8
-import fr.natan.microservices.usermicroservice.service.contract.UserContract;
8
+import fr.natan.microservices.usermicroservice.service.services.UserService;
9 9
 import fr.natan.microservices.usermicroservice.t_openfeign.service.AddressService;
10 10
 import org.springframework.web.bind.annotation.*;
11 11
 
@@ -13,10 +13,10 @@ import java.util.Collection;
13 13
 
14 14
 @RestController
15 15
 public class UserController {
16
-    private final UserContract userContract;
16
+    private final UserService userContract;
17 17
     private final AddressService addressService;
18 18
 
19
-    public UserController(UserContract userContract, AddressService addressService) {
19
+    public UserController(UserService userContract, AddressService addressService) {
20 20
         this.userContract = userContract;
21 21
         this.addressService = addressService;
22 22
     }

Powered by TurnKey Linux.