Explorar el Código

another commit

placidenduwayo hace 2 años
padre
commit
c4d9dbfc33
Se han modificado 43 ficheros con 723 adiciones y 64 borrados
  1. 32
    0
      address-microservice/Dockerfile
  2. 7
    0
      address-microservice/pom.xml
  3. 5
    0
      address-microservice/src/main/java/fr/natan/addressmicroservice/AddressMicroserviceApplication.java
  4. 2
    1
      address-microservice/src/main/java/fr/natan/addressmicroservice/entity/Address.java
  5. 4
    0
      address-microservice/src/main/java/fr/natan/addressmicroservice/exceptions/AddressAlreadyExistsException.java
  6. 7
    0
      address-microservice/src/main/java/fr/natan/addressmicroservice/exceptions/AddressNotFoundException.java
  7. 0
    7
      address-microservice/src/main/java/fr/natan/addressmicroservice/exceptions/AddressnotFoundException.java
  8. 31
    0
      address-microservice/src/main/java/fr/natan/addressmicroservice/exceptions_handler/AddressExceptionsHandler.java
  9. 7
    0
      address-microservice/src/main/java/fr/natan/addressmicroservice/repository/AddressRepository.java
  10. 8
    5
      address-microservice/src/main/java/fr/natan/addressmicroservice/service/contract/AddressContract.java
  11. 35
    11
      address-microservice/src/main/java/fr/natan/addressmicroservice/service/service/AddressService.java
  12. 7
    5
      address-microservice/src/main/java/fr/natan/addressmicroservice/t_controllers/AddressController.java
  13. 10
    7
      address-microservice/src/main/resources/application.properties
  14. 32
    0
      company-microservice/Dockerfile
  15. 7
    0
      company-microservice/pom.xml
  16. 31
    0
      company-microservice/src/main/java/fr/natan/companymicroservice/exceptions_handler/CompanyExceptionsHandler.java
  17. 7
    2
      company-microservice/src/main/resources/application.properties
  18. 102
    0
      docker-compose.yml
  19. 32
    0
      employee-microservice/Dockerfile
  20. 24
    0
      employee-microservice/pom.xml
  21. 70
    3
      employee-microservice/src/main/java/fr/natan/employeemicroservice/entity/Employee.java
  22. 38
    0
      employee-microservice/src/main/java/fr/natan/employeemicroservice/exceptions_handler/EmployeeExceptionHandler.java
  23. 5
    2
      employee-microservice/src/main/java/fr/natan/employeemicroservice/service/services/EmployeeService.java
  24. 2
    1
      employee-microservice/src/main/java/fr/natan/employeemicroservice/t_openFeign/address/Address.java
  25. 6
    2
      employee-microservice/src/main/resources/application.properties
  26. 0
    0
      eureka-discovery-server/.gitignore
  27. 0
    0
      eureka-discovery-server/.mvn/wrapper/maven-wrapper.jar
  28. 1
    1
      eureka-discovery-server/.mvn/wrapper/maven-wrapper.properties
  29. 32
    0
      eureka-discovery-server/Dockerfile
  30. 0
    0
      eureka-discovery-server/mvnw
  31. 0
    0
      eureka-discovery-server/mvnw.cmd
  32. 14
    5
      eureka-discovery-server/pom.xml
  33. 3
    3
      eureka-discovery-server/src/main/java/fr/natan/eurekadiscoveryserver/eurekadiscoveryserver/EurekaDiscoveryServerApplication.java
  34. 1
    1
      eureka-discovery-server/src/main/resources/application.properties
  35. 2
    2
      eureka-discovery-server/src/test/java/fr/natan/eurekadiscoveryserver/eurekadiscoveryserver/EurekaDiscoveryServerApplicationTests.java
  36. 32
    0
      project-microservice/Dockerfile
  37. 25
    0
      project-microservice/pom.xml
  38. 43
    0
      project-microservice/src/main/java/fr/natan/projectmicroservice/exceptions_handler/ProjectExceptionsHandler.java
  39. 5
    2
      project-microservice/src/main/java/fr/natan/projectmicroservice/service/service/ProjectService.java
  40. 6
    2
      project-microservice/src/main/resources/application.properties
  41. 32
    0
      spring-cloud-gateway-service/Dockerfile
  42. 9
    0
      spring-cloud-gateway-service/pom.xml
  43. 7
    2
      spring-cloud-gateway-service/src/main/resources/application.properties

+ 32
- 0
address-microservice/Dockerfile Ver fichero

@@ -0,0 +1,32 @@
1
+######
2
+##
3
+##  Stage 1: Building the app
4
+##
5
+#######
6
+
7
+FROM maven:3.8.3-adoptopenjdk-16 AS builder
8
+WORKDIR /build/
9
+COPY pom.xml /build/
10
+# fetch all dependencies
11
+#RUN mvn dependency:go-offline -B
12
+
13
+COPY src /build/src/
14
+RUN mvn package -DskipTests
15
+WORKDIR /build/target/
16
+RUN java -Djarmode=layertools -jar address-microservice-0.0.1-SNAPSHOT.jar extract
17
+######
18
+##
19
+##  Stage 2: Running the app
20
+##
21
+#######
22
+
23
+FROM adoptopenjdk:16_36-jre-hotspot
24
+RUN useradd -rm -d /home/zbook-pn-15-g3 -s /bin/bash -g root -G sudo -u 1001 simple-user
25
+USER simple-user
26
+WORKDIR application
27
+EXPOSE 8081
28
+ENTRYPOINT ["java", "org.springframework.boot.loader.JarLauncher"]
29
+COPY --from=builder /build/target/dependencies/ ./
30
+COPY --from=builder /build/target/spring-boot-loader/ ./
31
+COPY --from=builder /build/target/snapshot-dependencies/ ./
32
+COPY --from=builder /build/target/application/ ./

+ 7
- 0
address-microservice/pom.xml Ver fichero

@@ -90,6 +90,13 @@
90 90
 					</excludes>
91 91
 				</configuration>
92 92
 			</plugin>
93
+			<plugin>
94
+				<artifactId>maven-surefire-plugin</artifactId>
95
+				<version>2.10</version>
96
+				<configuration>
97
+					<useFile>false</useFile>
98
+				</configuration>
99
+			</plugin>
93 100
 		</plugins>
94 101
 	</build>
95 102
 

+ 5
- 0
address-microservice/src/main/java/fr/natan/addressmicroservice/AddressMicroserviceApplication.java Ver fichero

@@ -1,7 +1,12 @@
1 1
 package fr.natan.addressmicroservice;
2 2
 
3
+import fr.natan.addressmicroservice.entity.Address;
4
+import fr.natan.addressmicroservice.service.service.AddressService;
5
+import org.springframework.boot.CommandLineRunner;
3 6
 import org.springframework.boot.SpringApplication;
4 7
 import org.springframework.boot.autoconfigure.SpringBootApplication;
8
+import org.springframework.context.annotation.Bean;
9
+import org.springframework.data.rest.core.config.RepositoryRestConfiguration;
5 10
 
6 11
 @SpringBootApplication
7 12
 public class AddressMicroserviceApplication {

+ 2
- 1
address-microservice/src/main/java/fr/natan/addressmicroservice/entity/Address.java Ver fichero

@@ -20,5 +20,6 @@ public class Address {
20 20
     private String streetName;
21 21
     private String pb;
22 22
     private String city;
23
-    private String country;
23
+    private String residenceCountry;
24
+    private String birthCountry;
24 25
 }

+ 4
- 0
address-microservice/src/main/java/fr/natan/addressmicroservice/exceptions/AddressAlreadyExistsException.java Ver fichero

@@ -0,0 +1,4 @@
1
+package fr.natan.addressmicroservice.exceptions;
2
+
3
+public class AddressAlreadyExistsException extends Exception {
4
+}

+ 7
- 0
address-microservice/src/main/java/fr/natan/addressmicroservice/exceptions/AddressNotFoundException.java Ver fichero

@@ -0,0 +1,7 @@
1
+package fr.natan.addressmicroservice.exceptions;
2
+
3
+public class AddressNotFoundException extends Exception {
4
+    public AddressNotFoundException(String message) {
5
+        super(message);
6
+    }
7
+}

+ 0
- 7
address-microservice/src/main/java/fr/natan/addressmicroservice/exceptions/AddressnotFoundException.java Ver fichero

@@ -1,7 +0,0 @@
1
-package fr.natan.addressmicroservice.exceptions;
2
-
3
-public class AddressnotFoundException extends Exception {
4
-    public AddressnotFoundException(String message) {
5
-        super(message);
6
-    }
7
-}

+ 31
- 0
address-microservice/src/main/java/fr/natan/addressmicroservice/exceptions_handler/AddressExceptionsHandler.java Ver fichero

@@ -0,0 +1,31 @@
1
+package fr.natan.addressmicroservice.exceptions_handler;
2
+
3
+import fr.natan.addressmicroservice.exceptions.AddressAlreadyExistsException;
4
+import fr.natan.addressmicroservice.exceptions.AddressNotFoundException;
5
+import fr.natan.addressmicroservice.exceptions.AddressOneOrMoreFieldsEmptyException;
6
+import org.springframework.http.HttpStatus;
7
+import org.springframework.http.ResponseEntity;
8
+import org.springframework.web.bind.annotation.ControllerAdvice;
9
+import org.springframework.web.bind.annotation.ExceptionHandler;
10
+
11
+@ControllerAdvice
12
+public class AddressExceptionsHandler {
13
+
14
+    @ExceptionHandler(value = AddressNotFoundException.class)
15
+    private ResponseEntity<String> handleAddressNotFoundException(){
16
+        return new ResponseEntity<>("Address not found exception",
17
+                HttpStatus.NOT_FOUND);
18
+    }
19
+
20
+    @ExceptionHandler(value = AddressOneOrMoreFieldsEmptyException.class)
21
+    private ResponseEntity<String> handleAddressOneOrMoreFieldsEmptyException(){
22
+        return new ResponseEntity<>("Address, one or more fields empty exception",
23
+                HttpStatus.NOT_ACCEPTABLE);
24
+    }
25
+
26
+    @ExceptionHandler(value = AddressAlreadyExistsException.class)
27
+    private ResponseEntity<String> handleAddressAlreadyExistsException(){
28
+        return new ResponseEntity<>("Address already exists exception",
29
+                HttpStatus.NOT_ACCEPTABLE);
30
+    }
31
+}

+ 7
- 0
address-microservice/src/main/java/fr/natan/addressmicroservice/repository/AddressRepository.java Ver fichero

@@ -4,6 +4,13 @@ import fr.natan.addressmicroservice.entity.Address;
4 4
 import org.springframework.data.jpa.repository.JpaRepository;
5 5
 import org.springframework.data.rest.core.annotation.RepositoryRestResource;
6 6
 
7
+import java.util.List;
8
+
7 9
 @RepositoryRestResource
8 10
 public interface AddressRepository extends JpaRepository<Address, Long> {
11
+    List<Address> findByNumHouseAndStreetNameAndPbAndCity(
12
+            String numHouse,
13
+            String streetName,
14
+            String pb,
15
+            String city);
9 16
 }

+ 8
- 5
address-microservice/src/main/java/fr/natan/addressmicroservice/service/contract/AddressContract.java Ver fichero

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

+ 35
- 11
address-microservice/src/main/java/fr/natan/addressmicroservice/service/service/AddressService.java Ver fichero

@@ -1,8 +1,9 @@
1 1
 package fr.natan.addressmicroservice.service.service;
2 2
 
3 3
 import fr.natan.addressmicroservice.entity.Address;
4
+import fr.natan.addressmicroservice.exceptions.AddressAlreadyExistsException;
4 5
 import fr.natan.addressmicroservice.exceptions.AddressOneOrMoreFieldsEmptyException;
5
-import fr.natan.addressmicroservice.exceptions.AddressnotFoundException;
6
+import fr.natan.addressmicroservice.exceptions.AddressNotFoundException;
6 7
 import fr.natan.addressmicroservice.repository.AddressRepository;
7 8
 import fr.natan.addressmicroservice.service.contract.AddressContract;
8 9
 import org.springframework.stereotype.Service;
@@ -23,8 +24,8 @@ public class AddressService  implements AddressContract {
23 24
         address.setStreetName(address.getStreetName().strip());
24 25
         address.setPb(address.getPb().strip());
25 26
         address.setCity(address.getCity().strip());
26
-        address.setCountry(address.getCountry().strip());
27
-
27
+        address.setResidenceCountry(address.getResidenceCountry().strip());
28
+        address.setBirthCountry(address.getBirthCountry().strip());
28 29
         return address;
29 30
     }
30 31
 
@@ -34,7 +35,8 @@ public class AddressService  implements AddressContract {
34 35
                 || address.getStreetName().isEmpty()
35 36
                 || address.getPb().isEmpty()
36 37
                 || address.getCity().isEmpty()
37
-                || address.getCountry().isEmpty()
38
+                || address.getResidenceCountry().isEmpty()
39
+                || address.getBirthCountry().isEmpty()
38 40
         ){
39 41
             isInvalid=true;
40 42
         }
@@ -43,11 +45,21 @@ public class AddressService  implements AddressContract {
43 45
 
44 46
     }
45 47
     @Override
46
-    public Address createAddress(Address address) throws AddressOneOrMoreFieldsEmptyException {
48
+    public Address createAddress(Address address) throws AddressOneOrMoreFieldsEmptyException,
49
+            AddressAlreadyExistsException {
47 50
         address = addressNormalize(address);
48 51
        if(isValidAddress(address)){
49 52
            throw new AddressOneOrMoreFieldsEmptyException("one or more fields are empty");
50 53
        }
54
+
55
+        if(getAddressByNumHouseAndStreetNameAndPbAndCity(
56
+                address.getNumHouse(),
57
+                address.getStreetName(),
58
+                address.getPb(),
59
+                address.getCity()).size() > 0){
60
+
61
+            throw new AddressAlreadyExistsException();
62
+        }
51 63
         return addressRepository.save(address);
52 64
     }
53 65
 
@@ -57,24 +69,36 @@ public class AddressService  implements AddressContract {
57 69
     }
58 70
 
59 71
     @Override
60
-    public Address getAddressByID(Long addressID) throws AddressnotFoundException {
72
+    public Address getAddressByID(Long addressID) throws AddressNotFoundException {
61 73
         return addressRepository.findById(addressID).orElseThrow(
62
-                ()-> new AddressnotFoundException("address not found")
74
+                ()-> new AddressNotFoundException("address not found")
75
+        );
76
+    }
77
+
78
+    @Override
79
+    public List<Address> getAddressByNumHouseAndStreetNameAndPbAndCity(
80
+            String numHouse, String streetName, String pb, String city) {
81
+
82
+        return addressRepository.findByNumHouseAndStreetNameAndPbAndCity(
83
+                numHouse,
84
+                streetName,
85
+                pb,
86
+                city
63 87
         );
64 88
     }
65 89
 
66 90
     @Override
67
-    public void deleteAddress(Long addressID) throws AddressnotFoundException {
91
+    public void deleteAddress(Long addressID) throws AddressNotFoundException {
68 92
         Address address = addressRepository.findById(addressID).orElseThrow(
69
-                ()-> new AddressnotFoundException("address not found")
93
+                ()-> new AddressNotFoundException("address not found")
70 94
         );
71 95
         addressRepository.delete(address);
72 96
     }
73 97
 
74 98
     @Override
75
-    public Address updateAddress(Long addressID, Address address) throws AddressnotFoundException {
99
+    public Address updateAddress(Long addressID, Address address) throws AddressNotFoundException {
76 100
         if(getAddressByID(addressID)==null){
77
-            throw new AddressnotFoundException("address not found");
101
+            throw new AddressNotFoundException("address not found");
78 102
         }
79 103
 
80 104
         return addressRepository.save(address);

+ 7
- 5
address-microservice/src/main/java/fr/natan/addressmicroservice/t_controllers/AddressController.java Ver fichero

@@ -1,8 +1,9 @@
1 1
 package fr.natan.addressmicroservice.t_controllers;
2 2
 
3 3
 import fr.natan.addressmicroservice.entity.Address;
4
+import fr.natan.addressmicroservice.exceptions.AddressAlreadyExistsException;
4 5
 import fr.natan.addressmicroservice.exceptions.AddressOneOrMoreFieldsEmptyException;
5
-import fr.natan.addressmicroservice.exceptions.AddressnotFoundException;
6
+import fr.natan.addressmicroservice.exceptions.AddressNotFoundException;
6 7
 import fr.natan.addressmicroservice.service.service.AddressService;
7 8
 import org.springframework.web.bind.annotation.*;
8 9
 
@@ -17,12 +18,13 @@ public class AddressController {
17 18
     }
18 19
 
19 20
     @RequestMapping(value = "/addresses", method = RequestMethod.POST)
20
-    private Address createAddress(@RequestBody Address address) throws AddressOneOrMoreFieldsEmptyException {
21
+    private Address createAddress(@RequestBody Address address) throws AddressOneOrMoreFieldsEmptyException,
22
+            AddressAlreadyExistsException {
21 23
         return addressService.createAddress(address);
22 24
     }
23 25
 
24 26
     @RequestMapping(value = "/addresses/{addressID}", method = RequestMethod.DELETE)
25
-    private void deleteAddress(@PathVariable(name = "addressID") Long addressID) throws AddressnotFoundException {
27
+    private void deleteAddress(@PathVariable(name = "addressID") Long addressID) throws AddressNotFoundException {
26 28
         addressService.deleteAddress(addressID);
27 29
     }
28 30
 
@@ -32,12 +34,12 @@ public class AddressController {
32 34
     }
33 35
 
34 36
     @RequestMapping(value = "/addresses/{addressID}", method = RequestMethod.GET)
35
-    private Address getAddress(@PathVariable(name = "addressID") Long addressID) throws AddressnotFoundException {
37
+    private Address getAddress(@PathVariable(name = "addressID") Long addressID) throws AddressNotFoundException {
36 38
         return addressService.getAddressByID(addressID);
37 39
     }
38 40
 
39 41
     @RequestMapping(value = "/addresses/{addressID}")
40
-    private Address updateAddress(@PathVariable(name = "addressID") Long addressID, @RequestBody Address address) throws AddressnotFoundException {
42
+    private Address updateAddress(@PathVariable(name = "addressID") Long addressID, @RequestBody Address address) throws AddressNotFoundException {
41 43
         return addressService.updateAddress(addressID, address);
42 44
     }
43 45
 }

+ 10
- 7
address-microservice/src/main/resources/application.properties Ver fichero

@@ -1,12 +1,15 @@
1 1
 server.port=8081
2 2
 spring.application.name=address-service
3 3
 spring.cloud.discovery.enabled=true
4
-eureka.client.service-url.defaultZone=http://localhost:8761/eureka
4
+#eureka.client.service-url.defaultZone=http://localhost:8761/eureka
5
+#for deployment in docker image, replace http://localhost:8761/eureka by the name of image in
6
+# docker compose, here the name of image is eureka-discovery-server
7
+eureka.client.service-url.defaultZone=http://eureka-discovery-server:8761/eureka
5 8
 ## address microservice database
6
-spring.datasource.url=jdbc:mysql://localhost:3306/address_microservice?createDatabaseIfNotExist=true
7
-spring.datasource.username =root
8
-spring.datasource.password = root
9
-spring.jpa.show-sql = true
10
-spring.jpa.hibernate.ddl-auto = update
11
-spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.MySQL8Dialect
9
+spring.datasource.url=jdbc:mysql://mysqldb:3306/address_microservice_db?createDatabaseIfNotExist=true
10
+spring.datasource.username=root
11
+spring.datasource.password=root
12
+spring.jpa.show-sql=true
13
+spring.jpa.hibernate.ddl-auto=update
14
+spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL8Dialect
12 15
 server.error.include-message=always

+ 32
- 0
company-microservice/Dockerfile Ver fichero

@@ -0,0 +1,32 @@
1
+######
2
+##
3
+##  Stage 1: Building the app
4
+##
5
+#######
6
+
7
+FROM maven:3.8.3-adoptopenjdk-16 AS builder
8
+WORKDIR /build/
9
+COPY pom.xml /build/
10
+# fetch all dependencies
11
+#RUN mvn dependency:go-offline -B
12
+
13
+COPY src /build/src/
14
+RUN mvn package -DskipTests
15
+WORKDIR /build/target/
16
+RUN java -Djarmode=layertools -jar company-microservice-0.0.1-SNAPSHOT.jar extract
17
+######
18
+##
19
+##  Stage 2: Running the app
20
+##
21
+#######
22
+
23
+FROM adoptopenjdk:16_36-jre-hotspot
24
+RUN useradd -rm -d /home/zbook-pn-15-g3 -s /bin/bash -g root -G sudo -u 1001 simple-user
25
+USER simple-user
26
+WORKDIR application
27
+EXPOSE 8083
28
+ENTRYPOINT ["java", "org.springframework.boot.loader.JarLauncher"]
29
+COPY --from=builder /build/target/dependencies/ ./
30
+COPY --from=builder /build/target/spring-boot-loader/ ./
31
+COPY --from=builder /build/target/snapshot-dependencies/ ./
32
+COPY --from=builder /build/target/application/ ./

+ 7
- 0
company-microservice/pom.xml Ver fichero

@@ -87,6 +87,13 @@
87 87
 					</excludes>
88 88
 				</configuration>
89 89
 			</plugin>
90
+			<plugin>
91
+				<artifactId>maven-surefire-plugin</artifactId>
92
+				<version>2.10</version>
93
+				<configuration>
94
+					<useFile>false</useFile>
95
+				</configuration>
96
+			</plugin>
90 97
 		</plugins>
91 98
 	</build>
92 99
 

+ 31
- 0
company-microservice/src/main/java/fr/natan/companymicroservice/exceptions_handler/CompanyExceptionsHandler.java Ver fichero

@@ -0,0 +1,31 @@
1
+package fr.natan.companymicroservice.exceptions_handler;
2
+
3
+import fr.natan.companymicroservice.exceptions.CompanyNameAlreadyExistsException;
4
+import fr.natan.companymicroservice.exceptions.CompanyNameEmptyException;
5
+import fr.natan.companymicroservice.exceptions.CompanyNotFoundException;
6
+import org.springframework.http.HttpStatus;
7
+import org.springframework.http.ResponseEntity;
8
+import org.springframework.web.bind.annotation.ControllerAdvice;
9
+import org.springframework.web.bind.annotation.ExceptionHandler;
10
+
11
+@ControllerAdvice
12
+public class CompanyExceptionsHandler {
13
+
14
+    @ExceptionHandler(value = CompanyNameAlreadyExistsException.class)
15
+    private ResponseEntity<String> handleCompanyNameAlreadyExistsException(){
16
+        return new ResponseEntity<>("Company name already exists exception",
17
+        HttpStatus.NOT_ACCEPTABLE);
18
+    }
19
+
20
+    @ExceptionHandler(value = CompanyNameEmptyException.class)
21
+    private ResponseEntity<String> handleCompanyNameEmptyException(){
22
+        return new ResponseEntity<>("Company name is empty exception",
23
+                HttpStatus.NOT_ACCEPTABLE);
24
+    }
25
+
26
+    @ExceptionHandler(value = CompanyNotFoundException.class)
27
+    private ResponseEntity<String> handleCompanyNotFoundException(){
28
+        return new ResponseEntity<>("Company not found exception",
29
+                HttpStatus.NOT_FOUND);
30
+    }
31
+}

+ 7
- 2
company-microservice/src/main/resources/application.properties Ver fichero

@@ -1,10 +1,15 @@
1 1
 server.port=8083
2 2
 spring.application.name=company-service
3 3
 spring.cloud.discovery.enabled=true
4
-eureka.client.service-url.defaultZone=http://localhost:8761/eureka
4
+
5
+#eureka.client.service-url.defaultZone=http://localhost:8761/eureka
6
+#eureka.client.service-url.defaultZone=http://localhost:8761/eureka
7
+#for deployment in docker image, replace http://localhost:8761/eureka by the name of image in
8
+# docker compose, here the name of image is eureka-discovery-server
9
+eureka.client.service-url.defaultZone=http://eureka-discovery-server:8761/eureka
5 10
 
6 11
 ## company microservice database
7
-spring.datasource.url=jdbc:mysql://localhost:3306/company_microservice?createDatabaseIfNotExist=true
12
+spring.datasource.url=jdbc:mysql://mysqldb:3306/company_microservice_db?createDatabaseIfNotExist=true
8 13
 spring.datasource.username =root
9 14
 spring.datasource.password = root
10 15
 spring.jpa.show-sql = true

+ 102
- 0
docker-compose.yml Ver fichero

@@ -0,0 +1,102 @@
1
+version: '3.4'
2
+
3
+services:
4
+    
5
+    mysqldb:
6
+        image: mysql:8.0
7
+        container_name: mysqldb
8
+        restart: always
9
+        ports:
10
+          - "3036:3036"
11
+        networks:
12
+            - microservices
13
+        environment:
14
+            MYSQL_ROOT_PASSWORD: root
15
+    
16
+    eureka-discovery-server:
17
+        image: eureka-discovery-server:latest
18
+        container_name: eureka-discovery-server
19
+        build:
20
+            context: ./eureka-discovery-server
21
+            dockerfile: Dockerfile
22
+        ports:
23
+            - "8761:8761"
24
+        networks:
25
+            - microservices
26
+
27
+    spring-cloug-gateway:
28
+        image: spring-cloug-gateway:latest
29
+        container_name: spring-cloud-gateway
30
+        build:
31
+            context: ./spring-cloud-gateway-service
32
+            dockerfile: Dockerfile
33
+        ports:
34
+            - "8888:8888"
35
+        links:
36
+            - eureka-discovery-server
37
+        networks:
38
+            - microservices
39
+        depends_on:
40
+            - eureka-discovery-server
41
+
42
+    address-microservice:
43
+        image: address-microservice:latest
44
+        container_name: address-microservice
45
+        build:
46
+            context: ./address-microservice
47
+            dockerfile: Dockerfile
48
+        ports:
49
+              - "8081:8081"
50
+        links:
51
+            - eureka-discovery-server
52
+        networks:
53
+            - microservices
54
+        depends_on:
55
+            - eureka-discovery-server
56
+
57
+    employee-microservice:
58
+        image: employee-microservice:latest
59
+        container_name: employee-microservice
60
+        build:
61
+            context: ./employee-microservice
62
+            dockerfile: Dockerfile
63
+        ports:
64
+              - "8082:8082"
65
+        links:
66
+            - eureka-discovery-server
67
+        networks:
68
+            - microservices
69
+        depends_on:
70
+            - eureka-discovery-server
71
+
72
+    company-microservice:
73
+        image: company-microservice:latest
74
+        container_name: company-microservice
75
+        build:
76
+            context: ./company-microservice
77
+            dockerfile: Dockerfile
78
+        ports:
79
+            - "8083:8083"
80
+        links:
81
+            - eureka-discovery-server
82
+        networks:
83
+            - microservices
84
+        depends_on:
85
+            - eureka-discovery-server
86
+
87
+    project-microservice:
88
+        image: project-microservice:latest
89
+        container_name: project-microservice
90
+        build:
91
+            context: ./project-microservice
92
+            dockerfile: Dockerfile
93
+        ports:
94
+            - "8084:8084"
95
+        links:
96
+            - eureka-discovery-server
97
+        networks:
98
+            - microservices
99
+        depends_on:
100
+            - eureka-discovery-server
101
+networks:
102
+    microservices:

+ 32
- 0
employee-microservice/Dockerfile Ver fichero

@@ -0,0 +1,32 @@
1
+######
2
+##
3
+##  Stage 1: Building the app
4
+##
5
+#######
6
+
7
+FROM maven:3.8.3-adoptopenjdk-16 AS builder
8
+WORKDIR /build/
9
+COPY pom.xml /build/
10
+# fetch all dependencies
11
+#RUN mvn dependency:go-offline -B
12
+
13
+COPY src /build/src/
14
+RUN mvn package -DskipTests
15
+WORKDIR /build/target/
16
+RUN java -Djarmode=layertools -jar employee-microservice-0.0.1-SNAPSHOT.jar extract
17
+######
18
+##
19
+##  Stage 2: Running the app
20
+##
21
+#######
22
+
23
+FROM adoptopenjdk:16_36-jre-hotspot
24
+RUN useradd -rm -d /home/zbook-pn-15-g3 -s /bin/bash -g root -G sudo -u 1001 simple-user
25
+USER simple-user
26
+WORKDIR application
27
+EXPOSE 8082
28
+ENTRYPOINT ["java", "org.springframework.boot.loader.JarLauncher"]
29
+COPY --from=builder /build/target/dependencies/ ./
30
+COPY --from=builder /build/target/spring-boot-loader/ ./
31
+COPY --from=builder /build/target/snapshot-dependencies/ ./
32
+COPY --from=builder /build/target/application/ ./

+ 24
- 0
employee-microservice/pom.xml Ver fichero

@@ -78,5 +78,29 @@
78 78
 		</dependencies>
79 79
 	</dependencyManagement>
80 80
 
81
+	<build>
82
+		<plugins>
83
+			<plugin>
84
+				<groupId>org.springframework.boot</groupId>
85
+				<artifactId>spring-boot-maven-plugin</artifactId>
86
+				<configuration>
87
+					<excludes>
88
+						<exclude>
89
+							<groupId>org.project-lombok</groupId>
90
+							<artifactId>lombok</artifactId>
91
+						</exclude>
92
+					</excludes>
93
+				</configuration>
94
+			</plugin>
95
+			<plugin>
96
+				<artifactId>maven-surefire-plugin</artifactId>
97
+				<version>2.10</version>
98
+				<configuration>
99
+					<useFile>false</useFile>
100
+				</configuration>
101
+			</plugin>
102
+		</plugins>
103
+	</build>
104
+
81 105
 
82 106
 </project>

+ 70
- 3
employee-microservice/src/main/java/fr/natan/employeemicroservice/entity/Employee.java Ver fichero

@@ -8,9 +8,6 @@ import lombok.NoArgsConstructor;
8 8
 import javax.persistence.*;
9 9
 
10 10
 @Entity
11
-@Data
12
-@AllArgsConstructor
13
-@NoArgsConstructor
14 11
 public class Employee {
15 12
     @Id
16 13
     @GeneratedValue(strategy = GenerationType.IDENTITY)
@@ -22,4 +19,74 @@ public class Employee {
22 19
     private Long addressID;
23 20
     @Transient
24 21
     private Address address;
22
+
23
+    public Employee(Long employeeID, String firstname, String lastname, String email, String createdDate,
24
+                    Long addressID, Address address) {
25
+        this.employeeID = employeeID;
26
+        this.firstname = firstname;
27
+        this.lastname = lastname;
28
+        this.email = email;
29
+        this.createdDate = createdDate;
30
+        this.addressID = addressID;
31
+        this.address = address;
32
+    }
33
+
34
+    public Employee() {
35
+    }
36
+
37
+    public Long getEmployeeID() {
38
+        return employeeID;
39
+    }
40
+
41
+    public void setEmployeeID(Long employeeID) {
42
+        this.employeeID = employeeID;
43
+    }
44
+
45
+    public String getFirstname() {
46
+        return firstname;
47
+    }
48
+
49
+    public void setFirstname(String firstname) {
50
+        this.firstname = firstname;
51
+    }
52
+
53
+    public String getLastname() {
54
+        return lastname;
55
+    }
56
+
57
+    public void setLastname(String lastname) {
58
+        this.lastname = lastname;
59
+    }
60
+
61
+    public String getEmail() {
62
+        return email;
63
+    }
64
+
65
+    public void setEmail(String email) {
66
+        this.email = email;
67
+    }
68
+
69
+    public String getCreatedDate() {
70
+        return createdDate;
71
+    }
72
+
73
+    public void setCreatedDate(String createdDate) {
74
+        this.createdDate = createdDate;
75
+    }
76
+
77
+    public Long getAddressID() {
78
+        return addressID;
79
+    }
80
+
81
+    public void setAddressID(Long addressID) {
82
+        this.addressID = addressID;
83
+    }
84
+
85
+    public Address getAddress() {
86
+        return address;
87
+    }
88
+
89
+    public void setAddress(Address address) {
90
+        this.address = address;
91
+    }
25 92
 }

+ 38
- 0
employee-microservice/src/main/java/fr/natan/employeemicroservice/exceptions_handler/EmployeeExceptionHandler.java Ver fichero

@@ -0,0 +1,38 @@
1
+package fr.natan.employeemicroservice.exceptions_handler;
2
+
3
+import fr.natan.employeemicroservice.exceptions.AddressNotFoundException;
4
+import fr.natan.employeemicroservice.exceptions.EmployeeAlreadyExistsException;
5
+import fr.natan.employeemicroservice.exceptions.EmployeeNotFoundException;
6
+import fr.natan.employeemicroservice.exceptions.EmployeeOneOrMoreFieldsEmptyException;
7
+import org.springframework.http.HttpStatus;
8
+import org.springframework.http.ResponseEntity;
9
+import org.springframework.web.bind.annotation.ControllerAdvice;
10
+import org.springframework.web.bind.annotation.ExceptionHandler;
11
+
12
+@ControllerAdvice
13
+public class EmployeeExceptionHandler {
14
+
15
+    @ExceptionHandler(value = AddressNotFoundException.class)
16
+    private ResponseEntity<String> handlerAddressNotFoundException(){
17
+        return new ResponseEntity<>("Address to affect employee not found exception",
18
+                HttpStatus.NOT_FOUND);
19
+    }
20
+
21
+    @ExceptionHandler(value = EmployeeAlreadyExistsException.class)
22
+    private ResponseEntity<String> handleEmployeeAlreadyExistsException(){
23
+        return new ResponseEntity<>("Employee with same firstname and lastname already exists exception",
24
+                HttpStatus.NOT_ACCEPTABLE);
25
+    }
26
+
27
+    @ExceptionHandler(value = EmployeeNotFoundException.class)
28
+    private ResponseEntity<String> handleEmployeeNotFoundException(){
29
+        return new ResponseEntity<>("Employee not found exception",
30
+                HttpStatus.NOT_FOUND);
31
+    }
32
+
33
+    @ExceptionHandler(value = EmployeeOneOrMoreFieldsEmptyException.class)
34
+    private ResponseEntity<String> handleEmployeeOneOrMoreFieldsEmptyException(){
35
+        return new ResponseEntity<>("Employee, one or more fields empty exception",
36
+                HttpStatus.NOT_ACCEPTABLE);
37
+    }
38
+}

+ 5
- 2
employee-microservice/src/main/java/fr/natan/employeemicroservice/service/services/EmployeeService.java Ver fichero

@@ -29,6 +29,7 @@ public class EmployeeService implements EmployeeContract {
29 29
     private Employee normalizeEmployee(Employee employee){
30 30
         employee.setFirstname(employee.getFirstname().strip());
31 31
         employee.setLastname(employee.getLastname().strip());
32
+        employee.setLastname(employee.getLastname().toUpperCase());
32 33
 
33 34
         return employee;
34 35
     }
@@ -58,8 +59,8 @@ public class EmployeeService implements EmployeeContract {
58 59
         if(address==null){
59 60
             throw new AddressNotFoundException("Address to affect new employee is not found");
60 61
         }
61
-        Employee saveEmployee = getEmployeeByName(employee.getFirstname(), employee.getLastname());
62
-        if(saveEmployee!= null){
62
+        Employee saveToEmployee = getEmployeeByName(employee.getFirstname(), employee.getLastname());
63
+        if(saveToEmployee!= null){
63 64
             throw new EmployeeAlreadyExistsException("employee already exists");
64 65
         }
65 66
         employee.setEmail(
@@ -68,7 +69,9 @@ public class EmployeeService implements EmployeeContract {
68 69
                 )
69 70
         );
70 71
         employee.setAddressID(addressID);
72
+        employee.setAddress(address);
71 73
         employee.setCreatedDate(new Date(System.currentTimeMillis()) +" : "+ new Time(System.currentTimeMillis()));
74
+
72 75
         return employeeRepository.save(employee);
73 76
     }
74 77
 

+ 2
- 1
employee-microservice/src/main/java/fr/natan/employeemicroservice/t_openFeign/address/Address.java Ver fichero

@@ -9,5 +9,6 @@ public class Address {
9 9
     private String streetName;
10 10
     private int pb;
11 11
     private String city;
12
-    private String country;
12
+    private String residenceCountry;
13
+    private String birthCountry;
13 14
 }

+ 6
- 2
employee-microservice/src/main/resources/application.properties Ver fichero

@@ -1,10 +1,14 @@
1 1
 server.port=8082
2 2
 spring.application.name=employee-service
3 3
 spring.cloud.discovery.enabled=true
4
-eureka.client.service-url.defaultZone=http://localhost:8761/eureka
4
+#eureka.client.service-url.defaultZone=http://localhost:8761/eureka
5
+#eureka.client.service-url.defaultZone=http://localhost:8761/eureka
6
+#for deployment in docker image, replace http://localhost:8761/eureka by the name of image in
7
+# docker compose, here the name of image is eureka-discovery-server
8
+eureka.client.service-url.defaultZone=http://eureka-discovery-server:8761/eureka
5 9
 
6 10
 ## employee microservice database
7
-spring.datasource.url=jdbc:mysql://localhost:3306/employee_microservice?createDatabaseIfNotExist=true
11
+spring.datasource.url=jdbc:mysql://mysqldb:3306/employee_microservice_db?createDatabaseIfNotExist=true
8 12
 spring.datasource.username =root
9 13
 spring.datasource.password = root
10 14
 spring.jpa.show-sql = true

eureka-discovery-service/.gitignore → eureka-discovery-server/.gitignore Ver fichero


eureka-discovery-service/.mvn/wrapper/maven-wrapper.jar → eureka-discovery-server/.mvn/wrapper/maven-wrapper.jar Ver fichero


eureka-discovery-service/.mvn/wrapper/maven-wrapper.properties → eureka-discovery-server/.mvn/wrapper/maven-wrapper.properties Ver fichero

@@ -1,2 +1,2 @@
1
-distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.8.5/apache-maven-3.8.5-bin.zip
1
+distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.8.6/apache-maven-3.8.6-bin.zip
2 2
 wrapperUrl=https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.1.0/maven-wrapper-3.1.0.jar

+ 32
- 0
eureka-discovery-server/Dockerfile Ver fichero

@@ -0,0 +1,32 @@
1
+######
2
+##
3
+##  Stage 1: Building the app
4
+##
5
+#######
6
+
7
+FROM maven:3.8.3-adoptopenjdk-16 AS builder
8
+WORKDIR /build/
9
+COPY pom.xml /build/
10
+# fetch all dependencies
11
+#RUN mvn dependency:go-offline -B
12
+
13
+COPY src /build/src/
14
+RUN mvn package -DskipTests
15
+WORKDIR /build/target/
16
+RUN java -Djarmode=layertools -jar eureka-discovery-server-0.0.1-SNAPSHOT.jar extract
17
+######
18
+##
19
+##  Stage 2: Running the app
20
+##
21
+#######
22
+
23
+FROM adoptopenjdk:16_36-jre-hotspot
24
+RUN useradd -rm -d /home/zbook-pn-15-g3 -s /bin/bash -g root -G sudo -u 1001 simple-user
25
+USER simple-user
26
+WORKDIR application
27
+EXPOSE 8761
28
+ENTRYPOINT ["java", "org.springframework.boot.loader.JarLauncher"]
29
+COPY --from=builder /build/target/dependencies/ ./
30
+COPY --from=builder /build/target/spring-boot-loader/ ./
31
+COPY --from=builder /build/target/snapshot-dependencies/ ./
32
+COPY --from=builder /build/target/application/ ./

eureka-discovery-service/mvnw → eureka-discovery-server/mvnw Ver fichero


eureka-discovery-service/mvnw.cmd → eureka-discovery-server/mvnw.cmd Ver fichero


eureka-discovery-service/pom.xml → eureka-discovery-server/pom.xml Ver fichero

@@ -5,17 +5,17 @@
5 5
 	<parent>
6 6
 		<groupId>org.springframework.boot</groupId>
7 7
 		<artifactId>spring-boot-starter-parent</artifactId>
8
-		<version>2.7.1</version>
8
+		<version>2.7.3</version>
9 9
 		<relativePath/> <!-- lookup parent from repository -->
10 10
 	</parent>
11
-	<groupId>fr.natan</groupId>
12
-	<artifactId>eureka-discovery-service</artifactId>
11
+	<groupId>fr.natan.eurekadiscoveryserver</groupId>
12
+	<artifactId>eureka-discovery-server</artifactId>
13 13
 	<version>0.0.1-SNAPSHOT</version>
14
-	<name>eureka-discovery-service</name>
14
+	<name>eureka-discovery-server</name>
15 15
 	<description>service d enregistrement des microservices</description>
16 16
 	<properties>
17 17
 		<java.version>11</java.version>
18
-		<spring-cloud.version>2021.0.3</spring-cloud.version>
18
+		<spring-cloud.version>2021.0.4</spring-cloud.version>
19 19
 	</properties>
20 20
 	<dependencies>
21 21
 		<dependency>
@@ -41,4 +41,13 @@
41 41
 		</dependencies>
42 42
 	</dependencyManagement>
43 43
 
44
+	<build>
45
+		<plugins>
46
+			<plugin>
47
+				<groupId>org.springframework.boot</groupId>
48
+				<artifactId>spring-boot-maven-plugin</artifactId>
49
+			</plugin>
50
+		</plugins>
51
+	</build>
52
+
44 53
 </project>

eureka-discovery-service/src/main/java/fr/natan/eurekadiscoveryservice/EurekaDiscoveryServiceApplication.java → eureka-discovery-server/src/main/java/fr/natan/eurekadiscoveryserver/eurekadiscoveryserver/EurekaDiscoveryServerApplication.java Ver fichero

@@ -1,4 +1,4 @@
1
-package fr.natan.eurekadiscoveryservice;
1
+package fr.natan.eurekadiscoveryserver.eurekadiscoveryserver;
2 2
 
3 3
 import org.springframework.boot.SpringApplication;
4 4
 import org.springframework.boot.autoconfigure.SpringBootApplication;
@@ -6,10 +6,10 @@ import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
6 6
 
7 7
 @SpringBootApplication
8 8
 @EnableEurekaServer
9
-public class EurekaDiscoveryServiceApplication {
9
+public class EurekaDiscoveryServerApplication {
10 10
 
11 11
 	public static void main(String[] args) {
12
-		SpringApplication.run(EurekaDiscoveryServiceApplication.class, args);
12
+		SpringApplication.run(EurekaDiscoveryServerApplication.class, args);
13 13
 	}
14 14
 
15 15
 }

eureka-discovery-service/src/main/resources/application.properties → eureka-discovery-server/src/main/resources/application.properties Ver fichero

@@ -1,3 +1,3 @@
1 1
 server.port=8761
2 2
 eureka.client.register-with-eureka=false
3
-eureka.client.fetch-registry=false
3
+eureka.client.fetch-registry=false

eureka-discovery-service/src/test/java/fr/natan/eurekadiscoveryservice/EurekaDiscoveryServiceApplicationTests.java → eureka-discovery-server/src/test/java/fr/natan/eurekadiscoveryserver/eurekadiscoveryserver/EurekaDiscoveryServerApplicationTests.java Ver fichero

@@ -1,10 +1,10 @@
1
-package fr.natan.eurekadiscoveryservice;
1
+package fr.natan.eurekadiscoveryserver.eurekadiscoveryserver;
2 2
 
3 3
 import org.junit.jupiter.api.Test;
4 4
 import org.springframework.boot.test.context.SpringBootTest;
5 5
 
6 6
 @SpringBootTest
7
-class EurekaDiscoveryServiceApplicationTests {
7
+class EurekaDiscoveryServerApplicationTests {
8 8
 
9 9
 	@Test
10 10
 	void contextLoads() {

+ 32
- 0
project-microservice/Dockerfile Ver fichero

@@ -0,0 +1,32 @@
1
+######
2
+##
3
+##  Stage 1: Building the app
4
+##
5
+#######
6
+
7
+FROM maven:3.8.3-adoptopenjdk-16 AS builder
8
+WORKDIR /build/
9
+COPY pom.xml /build/
10
+# fetch all dependencies
11
+#RUN mvn dependency:go-offline -B
12
+
13
+COPY src /build/src/
14
+RUN mvn package -DskipTests
15
+WORKDIR /build/target/
16
+RUN java -Djarmode=layertools -jar project-microservice-0.0.1-SNAPSHOT.jar extract
17
+######
18
+##
19
+##  Stage 2: Running the app
20
+##
21
+#######
22
+
23
+FROM adoptopenjdk:16_36-jre-hotspot
24
+RUN useradd -rm -d /home/zbook-pn-15-g3 -s /bin/bash -g root -G sudo -u 1001 simple-user
25
+USER simple-user
26
+WORKDIR application
27
+EXPOSE 8084
28
+ENTRYPOINT ["java", "org.springframework.boot.loader.JarLauncher"]
29
+COPY --from=builder /build/target/dependencies/ ./
30
+COPY --from=builder /build/target/spring-boot-loader/ ./
31
+COPY --from=builder /build/target/snapshot-dependencies/ ./
32
+COPY --from=builder /build/target/application/ ./

+ 25
- 0
project-microservice/pom.xml Ver fichero

@@ -80,4 +80,29 @@
80 80
 		</dependencies>
81 81
 	</dependencyManagement>
82 82
 
83
+	<build>
84
+		<plugins>
85
+			<plugin>
86
+				<groupId>org.springframework.boot</groupId>
87
+				<artifactId>spring-boot-maven-plugin</artifactId>
88
+				<configuration>
89
+					<excludes>
90
+						<exclude>
91
+							<groupId>org.project-lombok</groupId>
92
+							<artifactId>lombok</artifactId>
93
+						</exclude>
94
+					</excludes>
95
+				</configuration>
96
+			</plugin>
97
+			<plugin>
98
+				<artifactId>maven-surefire-plugin</artifactId>
99
+				<version>2.10</version>
100
+				<configuration>
101
+					<useFile>false</useFile>
102
+				</configuration>
103
+			</plugin>
104
+		</plugins>
105
+
106
+	</build>
107
+
83 108
 </project>

+ 43
- 0
project-microservice/src/main/java/fr/natan/projectmicroservice/exceptions_handler/ProjectExceptionsHandler.java Ver fichero

@@ -0,0 +1,43 @@
1
+package fr.natan.projectmicroservice.exceptions_handler;
2
+
3
+import fr.natan.projectmicroservice.exceptions.*;
4
+import org.springframework.http.HttpStatus;
5
+import org.springframework.http.ResponseEntity;
6
+import org.springframework.web.bind.annotation.ControllerAdvice;
7
+import org.springframework.web.bind.annotation.ExceptionHandler;
8
+
9
+@ControllerAdvice
10
+public class ProjectExceptionsHandler {
11
+
12
+    @ExceptionHandler(value = CompanyNotFoundException.class)
13
+    private ResponseEntity<String> handleCompanyNotFoundException(){
14
+        return new ResponseEntity<>("Company for this project not found exception",
15
+                HttpStatus.NOT_ACCEPTABLE);
16
+    }
17
+
18
+    @ExceptionHandler(value = EmployeeNotFoundException.class)
19
+    private ResponseEntity<String> handleEmployeeNotFoundException(){
20
+        return new ResponseEntity<>("Employee for this project not found exception",
21
+                HttpStatus.NOT_ACCEPTABLE);
22
+    }
23
+    @ExceptionHandler(value = ProjectAlreadyExistsException.class)
24
+    private ResponseEntity<String> handleProjectAlreadyExistsException(){
25
+        return new ResponseEntity<>("Project already exists exception",
26
+                HttpStatus.NOT_ACCEPTABLE);
27
+    }
28
+    @ExceptionHandler(value = ProjectDescriptionShortException.class)
29
+    private ResponseEntity<String> handleProjectDescriptionShortException(){
30
+        return new ResponseEntity<>("Project description is short exception",
31
+                HttpStatus.NOT_ACCEPTABLE);
32
+    }
33
+    @ExceptionHandler(value = ProjectNotFoundException.class)
34
+    private ResponseEntity<String> handleProjectNotFoundException(){
35
+        return new ResponseEntity<>("Project not found exception",
36
+                HttpStatus.NOT_FOUND);
37
+    }
38
+    @ExceptionHandler(value = ProjectOneOrMoreFieldsInvalidException.class)
39
+    private ResponseEntity<String> handleProjectOneOrMoreFieldsInvalidException(){
40
+        return new ResponseEntity<>("Project, one or more fields empty exception",
41
+                HttpStatus.NOT_ACCEPTABLE);
42
+    }
43
+}

+ 5
- 2
project-microservice/src/main/java/fr/natan/projectmicroservice/service/service/ProjectService.java Ver fichero

@@ -87,8 +87,8 @@ public class ProjectService implements ProjectContract {
87 87
             throw new ProjectDescriptionShortException("short project description");
88 88
         }
89 89
         //test if employee and company to which project is affected exist
90
-        getEmployee(employeeID);
91
-        getCompany(companyID);
90
+        Employee employee = getEmployee(employeeID);
91
+        Company company = getCompany(companyID);
92 92
 
93 93
         Project savedProject = getProjectByName(project.getProjectName());
94 94
         if(savedProject!=null){
@@ -97,6 +97,9 @@ public class ProjectService implements ProjectContract {
97 97
         project.setCreatedDate(new Date(System.currentTimeMillis())+" : "+new Time(System.currentTimeMillis()));
98 98
         project.setEmployeeID(employeeID);
99 99
         project.setCompanyID(companyID);
100
+        project.setEmployee(employee);
101
+        project.setCompany(company);
102
+
100 103
         return projectRepository.save(project);
101 104
     }
102 105
 

+ 6
- 2
project-microservice/src/main/resources/application.properties Ver fichero

@@ -1,10 +1,14 @@
1 1
 server.port=8084
2 2
 spring.application.name=project-service
3 3
 spring.cloud.discovery.enabled=true
4
-eureka.client.service-url.defaultZone=http://localhost:8761/eureka
4
+#eureka.client.service-url.defaultZone=http://localhost:8761/eureka
5
+#eureka.client.service-url.defaultZone=http://localhost:8761/eureka
6
+#for deployment in docker image, replace http://localhost:8761/eureka by the name of image in
7
+# docker compose, here the name of image is eureka-discovery-server
8
+eureka.client.service-url.defaultZone=http://eureka-discovery-server:8761/eureka
5 9
 
6 10
 ## project microservice database
7
-spring.datasource.url=jdbc:mysql://localhost:3306/project_microservice?createDatabaseIfNotExist=true
11
+spring.datasource.url=jdbc:mysql://mysqldb:3306/project_microservice_db?createDatabaseIfNotExist=true
8 12
 spring.datasource.username =root
9 13
 spring.datasource.password = root
10 14
 spring.jpa.show-sql = true

+ 32
- 0
spring-cloud-gateway-service/Dockerfile Ver fichero

@@ -0,0 +1,32 @@
1
+######
2
+##
3
+##  Stage 1: Building the app
4
+##
5
+#######
6
+
7
+FROM maven:3.8.3-adoptopenjdk-16 AS builder
8
+WORKDIR /build/
9
+COPY pom.xml /build/
10
+# fetch all dependencies
11
+#RUN mvn dependency:go-offline -B
12
+
13
+COPY src /build/src/
14
+RUN mvn package -DskipTests
15
+WORKDIR /build/target/
16
+RUN java -Djarmode=layertools -jar spring-cloud-gateway-service-0.0.1-SNAPSHOT.jar extract
17
+######
18
+##
19
+##  Stage 2: Running the app
20
+##
21
+#######
22
+
23
+FROM adoptopenjdk:16_36-jre-hotspot
24
+RUN useradd -rm -d /home/zbook-pn-15-g3 -s /bin/bash -g root -G sudo -u 1001 simple-user
25
+USER simple-user
26
+WORKDIR application
27
+EXPOSE 8888
28
+ENTRYPOINT ["java", "org.springframework.boot.loader.JarLauncher"]
29
+COPY --from=builder /build/target/dependencies/ ./
30
+COPY --from=builder /build/target/spring-boot-loader/ ./
31
+COPY --from=builder /build/target/snapshot-dependencies/ ./
32
+COPY --from=builder /build/target/application/ ./

+ 9
- 0
spring-cloud-gateway-service/pom.xml Ver fichero

@@ -49,4 +49,13 @@
49 49
 		</dependencies>
50 50
 	</dependencyManagement>
51 51
 
52
+	<build>
53
+		<plugins>
54
+			<plugin>
55
+				<groupId>org.springframework.boot</groupId>
56
+				<artifactId>spring-boot-maven-plugin</artifactId>
57
+			</plugin>
58
+		</plugins>
59
+	</build>
60
+
52 61
 </project>

+ 7
- 2
spring-cloud-gateway-service/src/main/resources/application.properties Ver fichero

@@ -1,3 +1,8 @@
1 1
 server.port=8888
2
-spring.application.name=gateway-service
3
-spring.cloud.discovery.enabled=true
2
+spring.application.name=spring-cloud-gateway-service
3
+spring.cloud.discovery.enabled=true
4
+#eureka.client.service-url.defaultZone=http://localhost:8761/eureka
5
+#eureka.client.service-url.defaultZone=http://localhost:8761/eureka
6
+#for deployment in docker image, replace http://localhost:8761/eureka by the name of image in
7
+# docker compose, here the name of image is eureka-discovery-server
8
+eureka.client.service-url.defaultZone=http://eureka-discovery-server:8761/eureka

Powered by TurnKey Linux.