Browse Source

another commit

placidenduwayo 2 years ago
parent
commit
c4d9dbfc33
43 changed files with 723 additions and 64 deletions
  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 View File

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 View File

90
 					</excludes>
90
 					</excludes>
91
 				</configuration>
91
 				</configuration>
92
 			</plugin>
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
 		</plugins>
100
 		</plugins>
94
 	</build>
101
 	</build>
95
 
102
 

+ 5
- 0
address-microservice/src/main/java/fr/natan/addressmicroservice/AddressMicroserviceApplication.java View File

1
 package fr.natan.addressmicroservice;
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
 import org.springframework.boot.SpringApplication;
6
 import org.springframework.boot.SpringApplication;
4
 import org.springframework.boot.autoconfigure.SpringBootApplication;
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
 @SpringBootApplication
11
 @SpringBootApplication
7
 public class AddressMicroserviceApplication {
12
 public class AddressMicroserviceApplication {

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

20
     private String streetName;
20
     private String streetName;
21
     private String pb;
21
     private String pb;
22
     private String city;
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 View File

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 View File

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 View File

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 View File

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 View File

4
 import org.springframework.data.jpa.repository.JpaRepository;
4
 import org.springframework.data.jpa.repository.JpaRepository;
5
 import org.springframework.data.rest.core.annotation.RepositoryRestResource;
5
 import org.springframework.data.rest.core.annotation.RepositoryRestResource;
6
 
6
 
7
+import java.util.List;
8
+
7
 @RepositoryRestResource
9
 @RepositoryRestResource
8
 public interface AddressRepository extends JpaRepository<Address, Long> {
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 View File

1
 package fr.natan.addressmicroservice.service.contract;
1
 package fr.natan.addressmicroservice.service.contract;
2
 
2
 
3
 import fr.natan.addressmicroservice.entity.Address;
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
 import fr.natan.addressmicroservice.exceptions.AddressOneOrMoreFieldsEmptyException;
6
 import fr.natan.addressmicroservice.exceptions.AddressOneOrMoreFieldsEmptyException;
6
 
7
 
7
 import java.util.List;
8
 import java.util.List;
8
 
9
 
9
 public interface AddressContract {
10
 public interface AddressContract {
10
-    Address createAddress(Address address) throws AddressOneOrMoreFieldsEmptyException;
11
+    Address createAddress(Address address) throws AddressOneOrMoreFieldsEmptyException, AddressAlreadyExistsException;
11
     List<Address> getAllAddresses();
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 View File

1
 package fr.natan.addressmicroservice.service.service;
1
 package fr.natan.addressmicroservice.service.service;
2
 
2
 
3
 import fr.natan.addressmicroservice.entity.Address;
3
 import fr.natan.addressmicroservice.entity.Address;
4
+import fr.natan.addressmicroservice.exceptions.AddressAlreadyExistsException;
4
 import fr.natan.addressmicroservice.exceptions.AddressOneOrMoreFieldsEmptyException;
5
 import fr.natan.addressmicroservice.exceptions.AddressOneOrMoreFieldsEmptyException;
5
-import fr.natan.addressmicroservice.exceptions.AddressnotFoundException;
6
+import fr.natan.addressmicroservice.exceptions.AddressNotFoundException;
6
 import fr.natan.addressmicroservice.repository.AddressRepository;
7
 import fr.natan.addressmicroservice.repository.AddressRepository;
7
 import fr.natan.addressmicroservice.service.contract.AddressContract;
8
 import fr.natan.addressmicroservice.service.contract.AddressContract;
8
 import org.springframework.stereotype.Service;
9
 import org.springframework.stereotype.Service;
23
         address.setStreetName(address.getStreetName().strip());
24
         address.setStreetName(address.getStreetName().strip());
24
         address.setPb(address.getPb().strip());
25
         address.setPb(address.getPb().strip());
25
         address.setCity(address.getCity().strip());
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
         return address;
29
         return address;
29
     }
30
     }
30
 
31
 
34
                 || address.getStreetName().isEmpty()
35
                 || address.getStreetName().isEmpty()
35
                 || address.getPb().isEmpty()
36
                 || address.getPb().isEmpty()
36
                 || address.getCity().isEmpty()
37
                 || address.getCity().isEmpty()
37
-                || address.getCountry().isEmpty()
38
+                || address.getResidenceCountry().isEmpty()
39
+                || address.getBirthCountry().isEmpty()
38
         ){
40
         ){
39
             isInvalid=true;
41
             isInvalid=true;
40
         }
42
         }
43
 
45
 
44
     }
46
     }
45
     @Override
47
     @Override
46
-    public Address createAddress(Address address) throws AddressOneOrMoreFieldsEmptyException {
48
+    public Address createAddress(Address address) throws AddressOneOrMoreFieldsEmptyException,
49
+            AddressAlreadyExistsException {
47
         address = addressNormalize(address);
50
         address = addressNormalize(address);
48
        if(isValidAddress(address)){
51
        if(isValidAddress(address)){
49
            throw new AddressOneOrMoreFieldsEmptyException("one or more fields are empty");
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
         return addressRepository.save(address);
63
         return addressRepository.save(address);
52
     }
64
     }
53
 
65
 
57
     }
69
     }
58
 
70
 
59
     @Override
71
     @Override
60
-    public Address getAddressByID(Long addressID) throws AddressnotFoundException {
72
+    public Address getAddressByID(Long addressID) throws AddressNotFoundException {
61
         return addressRepository.findById(addressID).orElseThrow(
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
     @Override
90
     @Override
67
-    public void deleteAddress(Long addressID) throws AddressnotFoundException {
91
+    public void deleteAddress(Long addressID) throws AddressNotFoundException {
68
         Address address = addressRepository.findById(addressID).orElseThrow(
92
         Address address = addressRepository.findById(addressID).orElseThrow(
69
-                ()-> new AddressnotFoundException("address not found")
93
+                ()-> new AddressNotFoundException("address not found")
70
         );
94
         );
71
         addressRepository.delete(address);
95
         addressRepository.delete(address);
72
     }
96
     }
73
 
97
 
74
     @Override
98
     @Override
75
-    public Address updateAddress(Long addressID, Address address) throws AddressnotFoundException {
99
+    public Address updateAddress(Long addressID, Address address) throws AddressNotFoundException {
76
         if(getAddressByID(addressID)==null){
100
         if(getAddressByID(addressID)==null){
77
-            throw new AddressnotFoundException("address not found");
101
+            throw new AddressNotFoundException("address not found");
78
         }
102
         }
79
 
103
 
80
         return addressRepository.save(address);
104
         return addressRepository.save(address);

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

1
 package fr.natan.addressmicroservice.t_controllers;
1
 package fr.natan.addressmicroservice.t_controllers;
2
 
2
 
3
 import fr.natan.addressmicroservice.entity.Address;
3
 import fr.natan.addressmicroservice.entity.Address;
4
+import fr.natan.addressmicroservice.exceptions.AddressAlreadyExistsException;
4
 import fr.natan.addressmicroservice.exceptions.AddressOneOrMoreFieldsEmptyException;
5
 import fr.natan.addressmicroservice.exceptions.AddressOneOrMoreFieldsEmptyException;
5
-import fr.natan.addressmicroservice.exceptions.AddressnotFoundException;
6
+import fr.natan.addressmicroservice.exceptions.AddressNotFoundException;
6
 import fr.natan.addressmicroservice.service.service.AddressService;
7
 import fr.natan.addressmicroservice.service.service.AddressService;
7
 import org.springframework.web.bind.annotation.*;
8
 import org.springframework.web.bind.annotation.*;
8
 
9
 
17
     }
18
     }
18
 
19
 
19
     @RequestMapping(value = "/addresses", method = RequestMethod.POST)
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
         return addressService.createAddress(address);
23
         return addressService.createAddress(address);
22
     }
24
     }
23
 
25
 
24
     @RequestMapping(value = "/addresses/{addressID}", method = RequestMethod.DELETE)
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
         addressService.deleteAddress(addressID);
28
         addressService.deleteAddress(addressID);
27
     }
29
     }
28
 
30
 
32
     }
34
     }
33
 
35
 
34
     @RequestMapping(value = "/addresses/{addressID}", method = RequestMethod.GET)
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
         return addressService.getAddressByID(addressID);
38
         return addressService.getAddressByID(addressID);
37
     }
39
     }
38
 
40
 
39
     @RequestMapping(value = "/addresses/{addressID}")
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
         return addressService.updateAddress(addressID, address);
43
         return addressService.updateAddress(addressID, address);
42
     }
44
     }
43
 }
45
 }

+ 10
- 7
address-microservice/src/main/resources/application.properties View File

1
 server.port=8081
1
 server.port=8081
2
 spring.application.name=address-service
2
 spring.application.name=address-service
3
 spring.cloud.discovery.enabled=true
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
 ## address microservice database
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
 server.error.include-message=always
15
 server.error.include-message=always

+ 32
- 0
company-microservice/Dockerfile View File

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 View File

87
 					</excludes>
87
 					</excludes>
88
 				</configuration>
88
 				</configuration>
89
 			</plugin>
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
 		</plugins>
97
 		</plugins>
91
 	</build>
98
 	</build>
92
 
99
 

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

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 View File

1
 server.port=8083
1
 server.port=8083
2
 spring.application.name=company-service
2
 spring.application.name=company-service
3
 spring.cloud.discovery.enabled=true
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
 ## company microservice database
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
 spring.datasource.username =root
13
 spring.datasource.username =root
9
 spring.datasource.password = root
14
 spring.datasource.password = root
10
 spring.jpa.show-sql = true
15
 spring.jpa.show-sql = true

+ 102
- 0
docker-compose.yml View File

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 View File

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 View File

78
 		</dependencies>
78
 		</dependencies>
79
 	</dependencyManagement>
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
 </project>
106
 </project>

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

8
 import javax.persistence.*;
8
 import javax.persistence.*;
9
 
9
 
10
 @Entity
10
 @Entity
11
-@Data
12
-@AllArgsConstructor
13
-@NoArgsConstructor
14
 public class Employee {
11
 public class Employee {
15
     @Id
12
     @Id
16
     @GeneratedValue(strategy = GenerationType.IDENTITY)
13
     @GeneratedValue(strategy = GenerationType.IDENTITY)
22
     private Long addressID;
19
     private Long addressID;
23
     @Transient
20
     @Transient
24
     private Address address;
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 View File

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 View File

29
     private Employee normalizeEmployee(Employee employee){
29
     private Employee normalizeEmployee(Employee employee){
30
         employee.setFirstname(employee.getFirstname().strip());
30
         employee.setFirstname(employee.getFirstname().strip());
31
         employee.setLastname(employee.getLastname().strip());
31
         employee.setLastname(employee.getLastname().strip());
32
+        employee.setLastname(employee.getLastname().toUpperCase());
32
 
33
 
33
         return employee;
34
         return employee;
34
     }
35
     }
58
         if(address==null){
59
         if(address==null){
59
             throw new AddressNotFoundException("Address to affect new employee is not found");
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
             throw new EmployeeAlreadyExistsException("employee already exists");
64
             throw new EmployeeAlreadyExistsException("employee already exists");
64
         }
65
         }
65
         employee.setEmail(
66
         employee.setEmail(
68
                 )
69
                 )
69
         );
70
         );
70
         employee.setAddressID(addressID);
71
         employee.setAddressID(addressID);
72
+        employee.setAddress(address);
71
         employee.setCreatedDate(new Date(System.currentTimeMillis()) +" : "+ new Time(System.currentTimeMillis()));
73
         employee.setCreatedDate(new Date(System.currentTimeMillis()) +" : "+ new Time(System.currentTimeMillis()));
74
+
72
         return employeeRepository.save(employee);
75
         return employeeRepository.save(employee);
73
     }
76
     }
74
 
77
 

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

9
     private String streetName;
9
     private String streetName;
10
     private int pb;
10
     private int pb;
11
     private String city;
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 View File

1
 server.port=8082
1
 server.port=8082
2
 spring.application.name=employee-service
2
 spring.application.name=employee-service
3
 spring.cloud.discovery.enabled=true
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
 ## employee microservice database
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
 spring.datasource.username =root
12
 spring.datasource.username =root
9
 spring.datasource.password = root
13
 spring.datasource.password = root
10
 spring.jpa.show-sql = true
14
 spring.jpa.show-sql = true

eureka-discovery-service/.gitignore → eureka-discovery-server/.gitignore View File


eureka-discovery-service/.mvn/wrapper/maven-wrapper.jar → eureka-discovery-server/.mvn/wrapper/maven-wrapper.jar View File


eureka-discovery-service/.mvn/wrapper/maven-wrapper.properties → eureka-discovery-server/.mvn/wrapper/maven-wrapper.properties View File

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
 wrapperUrl=https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.1.0/maven-wrapper-3.1.0.jar
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 View File

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 View File


eureka-discovery-service/mvnw.cmd → eureka-discovery-server/mvnw.cmd View File


eureka-discovery-service/pom.xml → eureka-discovery-server/pom.xml View File

5
 	<parent>
5
 	<parent>
6
 		<groupId>org.springframework.boot</groupId>
6
 		<groupId>org.springframework.boot</groupId>
7
 		<artifactId>spring-boot-starter-parent</artifactId>
7
 		<artifactId>spring-boot-starter-parent</artifactId>
8
-		<version>2.7.1</version>
8
+		<version>2.7.3</version>
9
 		<relativePath/> <!-- lookup parent from repository -->
9
 		<relativePath/> <!-- lookup parent from repository -->
10
 	</parent>
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
 	<version>0.0.1-SNAPSHOT</version>
13
 	<version>0.0.1-SNAPSHOT</version>
14
-	<name>eureka-discovery-service</name>
14
+	<name>eureka-discovery-server</name>
15
 	<description>service d enregistrement des microservices</description>
15
 	<description>service d enregistrement des microservices</description>
16
 	<properties>
16
 	<properties>
17
 		<java.version>11</java.version>
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
 	</properties>
19
 	</properties>
20
 	<dependencies>
20
 	<dependencies>
21
 		<dependency>
21
 		<dependency>
41
 		</dependencies>
41
 		</dependencies>
42
 	</dependencyManagement>
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
 </project>
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 View File

1
-package fr.natan.eurekadiscoveryservice;
1
+package fr.natan.eurekadiscoveryserver.eurekadiscoveryserver;
2
 
2
 
3
 import org.springframework.boot.SpringApplication;
3
 import org.springframework.boot.SpringApplication;
4
 import org.springframework.boot.autoconfigure.SpringBootApplication;
4
 import org.springframework.boot.autoconfigure.SpringBootApplication;
6
 
6
 
7
 @SpringBootApplication
7
 @SpringBootApplication
8
 @EnableEurekaServer
8
 @EnableEurekaServer
9
-public class EurekaDiscoveryServiceApplication {
9
+public class EurekaDiscoveryServerApplication {
10
 
10
 
11
 	public static void main(String[] args) {
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 View File

1
 server.port=8761
1
 server.port=8761
2
 eureka.client.register-with-eureka=false
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 View File

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

+ 32
- 0
project-microservice/Dockerfile View File

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 View File

80
 		</dependencies>
80
 		</dependencies>
81
 	</dependencyManagement>
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
 </project>
108
 </project>

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

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 View File

87
             throw new ProjectDescriptionShortException("short project description");
87
             throw new ProjectDescriptionShortException("short project description");
88
         }
88
         }
89
         //test if employee and company to which project is affected exist
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
         Project savedProject = getProjectByName(project.getProjectName());
93
         Project savedProject = getProjectByName(project.getProjectName());
94
         if(savedProject!=null){
94
         if(savedProject!=null){
97
         project.setCreatedDate(new Date(System.currentTimeMillis())+" : "+new Time(System.currentTimeMillis()));
97
         project.setCreatedDate(new Date(System.currentTimeMillis())+" : "+new Time(System.currentTimeMillis()));
98
         project.setEmployeeID(employeeID);
98
         project.setEmployeeID(employeeID);
99
         project.setCompanyID(companyID);
99
         project.setCompanyID(companyID);
100
+        project.setEmployee(employee);
101
+        project.setCompany(company);
102
+
100
         return projectRepository.save(project);
103
         return projectRepository.save(project);
101
     }
104
     }
102
 
105
 

+ 6
- 2
project-microservice/src/main/resources/application.properties View File

1
 server.port=8084
1
 server.port=8084
2
 spring.application.name=project-service
2
 spring.application.name=project-service
3
 spring.cloud.discovery.enabled=true
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
 ## project microservice database
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
 spring.datasource.username =root
12
 spring.datasource.username =root
9
 spring.datasource.password = root
13
 spring.datasource.password = root
10
 spring.jpa.show-sql = true
14
 spring.jpa.show-sql = true

+ 32
- 0
spring-cloud-gateway-service/Dockerfile View File

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 View File

49
 		</dependencies>
49
 		</dependencies>
50
 	</dependencyManagement>
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
 </project>
61
 </project>

+ 7
- 2
spring-cloud-gateway-service/src/main/resources/application.properties View File

1
 server.port=8888
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.