diff --git a/.gitignore b/.gitignore index deae167435ac8334cb04899d403e221ad9276dc0..9a0adf3187b08c52b41e6a637a5fb904ed1c582c 100644 --- a/.gitignore +++ b/.gitignore @@ -88,4 +88,5 @@ buildNumber.properties # Custom /application.properties - +docker/data +docker/data/** diff --git a/airport-manager-api/pom.xml b/airport-manager-api/pom.xml index 4593bc368fb62bfcd45509ec53e37d5b44c4dd73..8768a32d6121f2d70651122ed9cbba565843416a 100644 --- a/airport-manager-api/pom.xml +++ b/airport-manager-api/pom.xml @@ -3,7 +3,7 @@ <modelVersion>4.0.0</modelVersion> <parent> <artifactId>airpot-manager</artifactId> - <groupId>cz.fi.muni.pa165</groupId> + <groupId>cz.muni.fi.pa165</groupId> <version>1.0-SNAPSHOT</version> </parent> diff --git a/airport-manager-api/src/main/java/cz/fi/muni/pa165/api/airport/Airport.java b/airport-manager-api/src/main/java/cz/muni/fi/pa165/api/airport/Airport.java similarity index 91% rename from airport-manager-api/src/main/java/cz/fi/muni/pa165/api/airport/Airport.java rename to airport-manager-api/src/main/java/cz/muni/fi/pa165/api/airport/Airport.java index d5219242d96c66f035228888a255e64b7ea4dc4c..168013cee7aa4825ee43e87a0d7294373caf7ec5 100644 --- a/airport-manager-api/src/main/java/cz/fi/muni/pa165/api/airport/Airport.java +++ b/airport-manager-api/src/main/java/cz/muni/fi/pa165/api/airport/Airport.java @@ -1,4 +1,4 @@ -package cz.fi.muni.pa165.api.airport; +package cz.muni.fi.pa165.api.airport; import lombok.AllArgsConstructor; import lombok.Data; diff --git a/airport-manager-api/src/main/java/cz/muni/fi/pa165/api/airport/requests/AirportRequest.java b/airport-manager-api/src/main/java/cz/muni/fi/pa165/api/airport/requests/AirportRequest.java new file mode 100644 index 0000000000000000000000000000000000000000..bdfc38b5f7d59445eba75b01741a8900a617ba00 --- /dev/null +++ b/airport-manager-api/src/main/java/cz/muni/fi/pa165/api/airport/requests/AirportRequest.java @@ -0,0 +1,11 @@ +package cz.muni.fi.pa165.api.airport.requests; + +public class AirportRequest { + private String name; + private String capacity; + private double landingPrice; + private double longitude; + private double latitude; + private String city; + private String country; +} diff --git a/airport-manager-api/src/main/java/cz/fi/muni/pa165/api/employee/Employee.java b/airport-manager-api/src/main/java/cz/muni/fi/pa165/api/employee/Employee.java similarity index 86% rename from airport-manager-api/src/main/java/cz/fi/muni/pa165/api/employee/Employee.java rename to airport-manager-api/src/main/java/cz/muni/fi/pa165/api/employee/Employee.java index 8e992f2e674681c6f6ed60889faa59a08d5a6aff..a4df372cfa476271729348460bf708849119a680 100644 --- a/airport-manager-api/src/main/java/cz/fi/muni/pa165/api/employee/Employee.java +++ b/airport-manager-api/src/main/java/cz/muni/fi/pa165/api/employee/Employee.java @@ -1,4 +1,4 @@ -package cz.fi.muni.pa165.api.employee; +package cz.muni.fi.pa165.api.employee; import lombok.Data; import lombok.NoArgsConstructor; @@ -8,7 +8,6 @@ import java.time.LocalDateTime; import java.util.UUID; @Data -@NoArgsConstructor public class Employee { private UUID id; diff --git a/airport-manager-api/src/main/java/cz/fi/muni/pa165/api/employee/Licence.java b/airport-manager-api/src/main/java/cz/muni/fi/pa165/api/employee/Licence.java similarity index 76% rename from airport-manager-api/src/main/java/cz/fi/muni/pa165/api/employee/Licence.java rename to airport-manager-api/src/main/java/cz/muni/fi/pa165/api/employee/Licence.java index 4633056d6bc3fe2972743a2c0c7d79c38cab6cd1..2c103ab5e5a4648f876b0336e78d10d3f7305919 100644 --- a/airport-manager-api/src/main/java/cz/fi/muni/pa165/api/employee/Licence.java +++ b/airport-manager-api/src/main/java/cz/muni/fi/pa165/api/employee/Licence.java @@ -1,10 +1,10 @@ -package cz.fi.muni.pa165.api.employee; +package cz.muni.fi.pa165.api.employee; +import cz.muni.fi.pa165.api.plane.PlaneType; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; -import java.time.LocalDate; import java.util.UUID; @Data diff --git a/airport-manager-api/src/main/java/cz/fi/muni/pa165/api/employee/Pilot.java b/airport-manager-api/src/main/java/cz/muni/fi/pa165/api/employee/Pilot.java similarity index 50% rename from airport-manager-api/src/main/java/cz/fi/muni/pa165/api/employee/Pilot.java rename to airport-manager-api/src/main/java/cz/muni/fi/pa165/api/employee/Pilot.java index e41264c55f2a32ab856ea64744fcf01f254f7b5e..511acdd46d0e98a17076dfe0cab6076d4618cd96 100644 --- a/airport-manager-api/src/main/java/cz/fi/muni/pa165/api/employee/Pilot.java +++ b/airport-manager-api/src/main/java/cz/muni/fi/pa165/api/employee/Pilot.java @@ -1,4 +1,4 @@ -package cz.fi.muni.pa165.api.employee; +package cz.muni.fi.pa165.api.employee; import lombok.Data; @@ -7,10 +7,5 @@ import java.util.List; @Data public class Pilot extends Employee { - - public Pilot(List<Licence> licences) { - this.licences = licences; - } - private List<Licence> licences; } diff --git a/airport-manager-api/src/main/java/cz/fi/muni/pa165/api/employee/Steward.java b/airport-manager-api/src/main/java/cz/muni/fi/pa165/api/employee/Steward.java similarity index 76% rename from airport-manager-api/src/main/java/cz/fi/muni/pa165/api/employee/Steward.java rename to airport-manager-api/src/main/java/cz/muni/fi/pa165/api/employee/Steward.java index 2f44363c55d88343eaa17ea5764a972cdfbffcef..99bae6afeacb02be84a3bf5c1c13123a2c3065ff 100644 --- a/airport-manager-api/src/main/java/cz/fi/muni/pa165/api/employee/Steward.java +++ b/airport-manager-api/src/main/java/cz/muni/fi/pa165/api/employee/Steward.java @@ -1,4 +1,4 @@ -package cz.fi.muni.pa165.api.employee; +package cz.muni.fi.pa165.api.employee; import lombok.Data; diff --git a/airport-manager-api/src/main/java/cz/fi/muni/pa165/api/employee/requests/EmployeeRequest.java b/airport-manager-api/src/main/java/cz/muni/fi/pa165/api/employee/requests/EmployeeRequest.java similarity index 84% rename from airport-manager-api/src/main/java/cz/fi/muni/pa165/api/employee/requests/EmployeeRequest.java rename to airport-manager-api/src/main/java/cz/muni/fi/pa165/api/employee/requests/EmployeeRequest.java index 770481dcaef98d0af6a3bbd99fc7cfa545917d5f..66a82bb3703f4a27f00124cc2ce59dfa8c5f61bf 100644 --- a/airport-manager-api/src/main/java/cz/fi/muni/pa165/api/employee/requests/EmployeeRequest.java +++ b/airport-manager-api/src/main/java/cz/muni/fi/pa165/api/employee/requests/EmployeeRequest.java @@ -1,4 +1,4 @@ -package cz.fi.muni.pa165.api.employee.requests; +package cz.muni.fi.pa165.api.employee.requests; import lombok.AllArgsConstructor; import lombok.Data; diff --git a/airport-manager-api/src/main/java/cz/fi/muni/pa165/api/employee/requests/LicenceRequest.java b/airport-manager-api/src/main/java/cz/muni/fi/pa165/api/employee/requests/LicenceRequest.java similarity index 84% rename from airport-manager-api/src/main/java/cz/fi/muni/pa165/api/employee/requests/LicenceRequest.java rename to airport-manager-api/src/main/java/cz/muni/fi/pa165/api/employee/requests/LicenceRequest.java index 858e23e35a5d8c4198efb342505661777e81db82..418632c8ebc6ccf5eace605ee4db8669cf4c6d91 100644 --- a/airport-manager-api/src/main/java/cz/fi/muni/pa165/api/employee/requests/LicenceRequest.java +++ b/airport-manager-api/src/main/java/cz/muni/fi/pa165/api/employee/requests/LicenceRequest.java @@ -1,4 +1,4 @@ -package cz.fi.muni.pa165.api.employee.requests; +package cz.muni.fi.pa165.api.employee.requests; import lombok.AllArgsConstructor; import lombok.Data; diff --git a/airport-manager-api/src/main/java/cz/fi/muni/pa165/api/employee/requests/PilotRequest.java b/airport-manager-api/src/main/java/cz/muni/fi/pa165/api/employee/requests/PilotRequest.java similarity index 86% rename from airport-manager-api/src/main/java/cz/fi/muni/pa165/api/employee/requests/PilotRequest.java rename to airport-manager-api/src/main/java/cz/muni/fi/pa165/api/employee/requests/PilotRequest.java index 0ba364b0a30eb84168d9f35b12b29cc2d48286ae..e398264690330b74e939df21597a27c249d4bf3b 100644 --- a/airport-manager-api/src/main/java/cz/fi/muni/pa165/api/employee/requests/PilotRequest.java +++ b/airport-manager-api/src/main/java/cz/muni/fi/pa165/api/employee/requests/PilotRequest.java @@ -1,4 +1,4 @@ -package cz.fi.muni.pa165.api.employee.requests; +package cz.muni.fi.pa165.api.employee.requests; import java.time.LocalDate; import java.util.List; diff --git a/airport-manager-api/src/main/java/cz/fi/muni/pa165/api/employee/requests/StewardRequest.java b/airport-manager-api/src/main/java/cz/muni/fi/pa165/api/employee/requests/StewardRequest.java similarity index 86% rename from airport-manager-api/src/main/java/cz/fi/muni/pa165/api/employee/requests/StewardRequest.java rename to airport-manager-api/src/main/java/cz/muni/fi/pa165/api/employee/requests/StewardRequest.java index 3b495f308b122234c28cd58c97fce4e5b8c1eb23..1e8a9138d1ae3489a5d83f9e78576ed7567a1f13 100644 --- a/airport-manager-api/src/main/java/cz/fi/muni/pa165/api/employee/requests/StewardRequest.java +++ b/airport-manager-api/src/main/java/cz/muni/fi/pa165/api/employee/requests/StewardRequest.java @@ -1,4 +1,4 @@ -package cz.fi.muni.pa165.api.employee.requests; +package cz.muni.fi.pa165.api.employee.requests; import java.time.LocalDate; import java.util.List; diff --git a/airport-manager-api/src/main/java/cz/fi/muni/pa165/api/flight/Flight.java b/airport-manager-api/src/main/java/cz/muni/fi/pa165/api/flight/Flight.java similarity index 91% rename from airport-manager-api/src/main/java/cz/fi/muni/pa165/api/flight/Flight.java rename to airport-manager-api/src/main/java/cz/muni/fi/pa165/api/flight/Flight.java index e6c239340b44f5382fc1b3abefc57d4d7816e37b..10dba8a1511a1073ac20e3cb04bc6360290ab21a 100644 --- a/airport-manager-api/src/main/java/cz/fi/muni/pa165/api/flight/Flight.java +++ b/airport-manager-api/src/main/java/cz/muni/fi/pa165/api/flight/Flight.java @@ -1,4 +1,4 @@ -package cz.fi.muni.pa165.api.flight; +package cz.muni.fi.pa165.api.flight; import lombok.AllArgsConstructor; import lombok.Data; diff --git a/airport-manager-api/src/main/java/cz/fi/muni/pa165/api/flight/FlightRealization.java b/airport-manager-api/src/main/java/cz/muni/fi/pa165/api/flight/FlightRealization.java similarity index 92% rename from airport-manager-api/src/main/java/cz/fi/muni/pa165/api/flight/FlightRealization.java rename to airport-manager-api/src/main/java/cz/muni/fi/pa165/api/flight/FlightRealization.java index f5cc9acd46f5f3a355b03ec8214b86d34093d33c..ccecab0e89d4b263fe7a78a77dcde41450ea9c32 100644 --- a/airport-manager-api/src/main/java/cz/fi/muni/pa165/api/flight/FlightRealization.java +++ b/airport-manager-api/src/main/java/cz/muni/fi/pa165/api/flight/FlightRealization.java @@ -1,4 +1,4 @@ -package cz.fi.muni.pa165.api.flight; +package cz.muni.fi.pa165.api.flight; import lombok.AllArgsConstructor; import lombok.Data; diff --git a/airport-manager-api/src/main/java/cz/fi/muni/pa165/api/flight/IssueReport.java b/airport-manager-api/src/main/java/cz/muni/fi/pa165/api/flight/IssueReport.java similarity index 88% rename from airport-manager-api/src/main/java/cz/fi/muni/pa165/api/flight/IssueReport.java rename to airport-manager-api/src/main/java/cz/muni/fi/pa165/api/flight/IssueReport.java index 8701266a559a7c22b4b2cc947e1b89515df29bbd..d931de087eed87095ed9ffc3417621bfc9e4309d 100644 --- a/airport-manager-api/src/main/java/cz/fi/muni/pa165/api/flight/IssueReport.java +++ b/airport-manager-api/src/main/java/cz/muni/fi/pa165/api/flight/IssueReport.java @@ -1,4 +1,4 @@ -package cz.fi.muni.pa165.api.flight; +package cz.muni.fi.pa165.api.flight; import lombok.AllArgsConstructor; import lombok.Data; diff --git a/airport-manager-api/src/main/java/cz/fi/muni/pa165/api/plane/Plane.java b/airport-manager-api/src/main/java/cz/muni/fi/pa165/api/plane/Plane.java similarity index 79% rename from airport-manager-api/src/main/java/cz/fi/muni/pa165/api/plane/Plane.java rename to airport-manager-api/src/main/java/cz/muni/fi/pa165/api/plane/Plane.java index 4563667ba7a3a415b10faa2bf1bf37959a47d991..e1195ffde90b8161ce14feded57f9bc83b9e3587 100644 --- a/airport-manager-api/src/main/java/cz/fi/muni/pa165/api/plane/Plane.java +++ b/airport-manager-api/src/main/java/cz/muni/fi/pa165/api/plane/Plane.java @@ -1,6 +1,5 @@ -package cz.fi.muni.pa165.api.plane; +package cz.muni.fi.pa165.api.plane; -import cz.fi.muni.pa165.api.employee.PlaneType; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; diff --git a/airport-manager-api/src/main/java/cz/fi/muni/pa165/api/employee/PlaneType.java b/airport-manager-api/src/main/java/cz/muni/fi/pa165/api/plane/PlaneType.java similarity index 73% rename from airport-manager-api/src/main/java/cz/fi/muni/pa165/api/employee/PlaneType.java rename to airport-manager-api/src/main/java/cz/muni/fi/pa165/api/plane/PlaneType.java index c2759ffaee1b8d903bad3a43c7530fa33a66c290..53a7eb3e61781acf263b228bfc4a634d2dc91f79 100644 --- a/airport-manager-api/src/main/java/cz/fi/muni/pa165/api/employee/PlaneType.java +++ b/airport-manager-api/src/main/java/cz/muni/fi/pa165/api/plane/PlaneType.java @@ -1,4 +1,4 @@ -package cz.fi.muni.pa165.api.employee; +package cz.muni.fi.pa165.api.plane; public enum PlaneType { CESSNA, diff --git a/airport-manager-api/src/main/java/cz/fi/muni/pa165/api/plane/requests/PlaneRequest.java b/airport-manager-api/src/main/java/cz/muni/fi/pa165/api/plane/requests/PlaneRequest.java similarity index 71% rename from airport-manager-api/src/main/java/cz/fi/muni/pa165/api/plane/requests/PlaneRequest.java rename to airport-manager-api/src/main/java/cz/muni/fi/pa165/api/plane/requests/PlaneRequest.java index 6a8df26f3ef01ed96f61adf13be72865af5b1d4f..a5d223676e5e30cbd5ef2cfeaf9c2ceb14c6a0d1 100644 --- a/airport-manager-api/src/main/java/cz/fi/muni/pa165/api/plane/requests/PlaneRequest.java +++ b/airport-manager-api/src/main/java/cz/muni/fi/pa165/api/plane/requests/PlaneRequest.java @@ -1,6 +1,6 @@ -package cz.fi.muni.pa165.api.plane.requests; +package cz.muni.fi.pa165.api.plane.requests; -import cz.fi.muni.pa165.api.employee.PlaneType; +import cz.muni.fi.pa165.api.plane.PlaneType; import lombok.AllArgsConstructor; import lombok.Data; diff --git a/airport-manager-api/src/test/java/cz/fi/muni/pa165/AppTest.java b/airport-manager-api/src/test/java/cz/fi/muni/pa165/AppTest.java index 2ffc6e6f10f5d7219f355c1871a22f5d837cb30b..1f9de34baf4b61c4082c4a0013d66900bf6de08d 100644 --- a/airport-manager-api/src/test/java/cz/fi/muni/pa165/AppTest.java +++ b/airport-manager-api/src/test/java/cz/fi/muni/pa165/AppTest.java @@ -1,4 +1,4 @@ -package cz.fi.muni.pa165; +package cz.muni.fi.pa165; import static org.junit.Assert.assertTrue; diff --git a/airports-flight-service/pom.xml b/airports-flight-service/pom.xml index 713452cd98e06a0958ce05a6c38c7e3ed2cc5b9a..fca245292833544e5bb337e224fa99c1c84d4945 100644 --- a/airports-flight-service/pom.xml +++ b/airports-flight-service/pom.xml @@ -4,7 +4,7 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> - <groupId>cz.fi.muni.pa165</groupId> + <groupId>cz.muni.fi.pa165</groupId> <artifactId>airpot-manager</artifactId> <version>1.0-SNAPSHOT</version> </parent> diff --git a/airports-flight-service/src/main/java/cz/fi/muni/pa165/flight/Main.java b/airports-flight-service/src/main/java/cz/muni/fi/pa165/Main.java similarity index 78% rename from airports-flight-service/src/main/java/cz/fi/muni/pa165/flight/Main.java rename to airports-flight-service/src/main/java/cz/muni/fi/pa165/Main.java index bb97d0df152c7ce1c796fd390dedd0a827a01d6a..95fba2588abb5949c14ddab99bca5e2023caddec 100644 --- a/airports-flight-service/src/main/java/cz/fi/muni/pa165/flight/Main.java +++ b/airports-flight-service/src/main/java/cz/muni/fi/pa165/Main.java @@ -1,4 +1,4 @@ -package cz.fi.muni.pa165.flight; +package cz.muni.fi.pa165; public class Main { public static void main(String[] args) { diff --git a/airports-hr-service/pom.xml b/airports-hr-service/pom.xml index 45d5ff16545ac3d603b1c3265eee321fcf27d99d..aae7b04121ea53c66d2ea6fdaccba958c4e9ea87 100644 --- a/airports-hr-service/pom.xml +++ b/airports-hr-service/pom.xml @@ -4,18 +4,20 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> - <groupId>cz.fi.muni.pa165</groupId> + <groupId>cz.muni.fi.pa165</groupId> <artifactId>airpot-manager</artifactId> <version>1.0-SNAPSHOT</version> </parent> - <groupId>cz.fi.muni.pa165</groupId> + <groupId>cz.muni.fi.pa165</groupId> <artifactId>airports-hr-service</artifactId> <properties> <maven.compiler.source>17</maven.compiler.source> <maven.compiler.target>17</maven.compiler.target> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> + <swagger.version>3.0.0</swagger.version> + <swagger-ui.version>2.10.5</swagger-ui.version> </properties> <dependencies> @@ -30,9 +32,17 @@ </dependency> <!-- https://mvnrepository.com/artifact/org.springframework.data/spring-data-jpa --> <dependency> - <groupId>org.springframework.data</groupId> - <artifactId>spring-data-jpa</artifactId> - <version>3.2.4</version> + <groupId>org.springframework.boot</groupId> + <artifactId>spring-boot-starter-data-jpa</artifactId> + </dependency> + <dependency> + <groupId>org.springframework.boot</groupId> + <artifactId>spring-boot-starter-validation</artifactId> + </dependency> + <dependency> + <groupId>org.postgresql</groupId> + <artifactId>postgresql</artifactId> + <scope>runtime</scope> </dependency> <dependency> <groupId>org.springframework.boot</groupId> @@ -43,12 +53,26 @@ <artifactId>modelmapper</artifactId> <version>3.2.0</version> </dependency> + + <dependency> + <groupId>org.springframework.boot</groupId> + <artifactId>spring-boot-starter-actuator</artifactId> + </dependency> + <dependency> + <groupId>io.springfox</groupId> + <artifactId>springfox-swagger2</artifactId> + <version>${swagger.version}</version> + </dependency> + <dependency> + <groupId>io.springfox</groupId> + <artifactId>springfox-swagger-ui</artifactId> + <version>${swagger-ui.version}</version> + </dependency> <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-boot-starter</artifactId> - <version>3.0.0</version> + <version>${swagger.version}</version> </dependency> - </dependencies> <build> diff --git a/airports-hr-service/src/main/java/cz/fi/muni/pa165/hr/SwaggerConfig.java b/airports-hr-service/src/main/java/cz/fi/muni/pa165/hr/SwaggerConfig.java deleted file mode 100644 index 3de301fbd5477b9125a1d3671273ccc0771fecd1..0000000000000000000000000000000000000000 --- a/airports-hr-service/src/main/java/cz/fi/muni/pa165/hr/SwaggerConfig.java +++ /dev/null @@ -1,53 +0,0 @@ -package cz.fi.muni.pa165.hr; - -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import springfox.documentation.builders.PathSelectors; -import springfox.documentation.builders.RequestHandlerSelectors; -import springfox.documentation.spi.DocumentationType; -import springfox.documentation.spring.web.plugins.Docket; -import springfox.documentation.swagger2.annotations.EnableSwagger2; - -import java.util.Arrays; - -@Configuration -@EnableSwagger2 -public class SwaggerConfig { - @Bean - public Docket employees() { - return createDocket() - .groupName("Employees") - .select() - .apis(RequestHandlerSelectors.basePackage( - cz.fi.muni.pa165.hr.rest.EmployeeController.class.getPackage().getName())) - .paths(PathSelectors.any()) - .build(); - } - - @Bean - public Docket pilots() { - return createDocket() - .groupName("Pilots") - .select() - .apis(RequestHandlerSelectors.basePackage( - cz.fi.muni.pa165.hr.rest.PilotController.class.getPackage().getName())) - .paths(PathSelectors.any()) - .build(); - } - - @Bean - public Docket steward() { - return createDocket() - .groupName("Stewards") - .select() - .apis(RequestHandlerSelectors.basePackage( - cz.fi.muni.pa165.hr.rest.StewardController.class.getPackage().getName())) - .paths(PathSelectors.any()) - .build(); - } - - private Docket createDocket() { - return new Docket(DocumentationType.SWAGGER_2); - } - -} diff --git a/airports-hr-service/src/main/java/cz/fi/muni/pa165/hr/dao/Pilot.java b/airports-hr-service/src/main/java/cz/fi/muni/pa165/hr/dao/Pilot.java deleted file mode 100644 index 2be6360664bc0801d10cb442b8f313d38bede98e..0000000000000000000000000000000000000000 --- a/airports-hr-service/src/main/java/cz/fi/muni/pa165/hr/dao/Pilot.java +++ /dev/null @@ -1,19 +0,0 @@ -package cz.fi.muni.pa165.hr.dao; - -import cz.fi.muni.pa165.api.employee.PlaneType; -import cz.fi.muni.pa165.hr.Constants; -import jakarta.persistence.*; -import lombok.Data; - -import java.time.LocalDate; -import java.util.List; -import java.util.UUID; - -@Data -@Entity -@Table(name = "pilots", schema = Constants.HR_SCHEMA) -@PrimaryKeyJoinColumn(name = "employee_id") -public class Pilot extends Employee { - - private List<PlaneType> licences; -} diff --git a/airports-hr-service/src/main/java/cz/fi/muni/pa165/hr/dao/Steward.java b/airports-hr-service/src/main/java/cz/fi/muni/pa165/hr/dao/Steward.java deleted file mode 100644 index b5199bf5de93c5f21e5cfdf09455741c0ab0b4ba..0000000000000000000000000000000000000000 --- a/airports-hr-service/src/main/java/cz/fi/muni/pa165/hr/dao/Steward.java +++ /dev/null @@ -1,17 +0,0 @@ -package cz.fi.muni.pa165.hr.dao; -import cz.fi.muni.pa165.hr.Constants; -import jakarta.persistence.*; -import lombok.Data; - -import java.time.LocalDate; -import java.util.List; -import java.util.UUID; - -@Data -@Entity -@Table(name = "pilots", schema = Constants.HR_SCHEMA) -@PrimaryKeyJoinColumn(name = "employee_id") -public class Steward extends Employee{ - - private List<String> languages; -} diff --git a/airports-hr-service/src/main/java/cz/fi/muni/pa165/hr/repository/EmployeeRepository.java b/airports-hr-service/src/main/java/cz/fi/muni/pa165/hr/repository/EmployeeRepository.java deleted file mode 100644 index 95c7e0a614c16ef0265b7d85d6c86bde34ed9254..0000000000000000000000000000000000000000 --- a/airports-hr-service/src/main/java/cz/fi/muni/pa165/hr/repository/EmployeeRepository.java +++ /dev/null @@ -1,11 +0,0 @@ -package cz.fi.muni.pa165.hr.repository; - -import cz.fi.muni.pa165.hr.dao.Employee; -import org.springframework.data.jpa.repository.JpaRepository; -import org.springframework.stereotype.Repository; - -import java.util.UUID; - -@Repository -public interface EmployeeRepository extends JpaRepository<Employee, UUID> { -} diff --git a/airports-hr-service/src/main/java/cz/fi/muni/pa165/hr/repository/PilotRepository.java b/airports-hr-service/src/main/java/cz/fi/muni/pa165/hr/repository/PilotRepository.java deleted file mode 100644 index e214d7a9628cda2ba136d50d24451eeaef54f67e..0000000000000000000000000000000000000000 --- a/airports-hr-service/src/main/java/cz/fi/muni/pa165/hr/repository/PilotRepository.java +++ /dev/null @@ -1,10 +0,0 @@ -package cz.fi.muni.pa165.hr.repository; - -import cz.fi.muni.pa165.hr.dao.Employee; -import cz.fi.muni.pa165.hr.dao.Pilot; -import org.springframework.data.jpa.repository.JpaRepository; - -import java.util.UUID; - -public interface PilotRepository extends JpaRepository<Pilot, UUID> { -} \ No newline at end of file diff --git a/airports-hr-service/src/main/java/cz/fi/muni/pa165/hr/repository/StewardRepository.java b/airports-hr-service/src/main/java/cz/fi/muni/pa165/hr/repository/StewardRepository.java deleted file mode 100644 index 87208d92e09bee15c216122a540251e34d132b2c..0000000000000000000000000000000000000000 --- a/airports-hr-service/src/main/java/cz/fi/muni/pa165/hr/repository/StewardRepository.java +++ /dev/null @@ -1,10 +0,0 @@ -package cz.fi.muni.pa165.hr.repository; - -import cz.fi.muni.pa165.hr.dao.Employee; -import cz.fi.muni.pa165.hr.dao.Steward; -import org.springframework.data.jpa.repository.JpaRepository; - -import java.util.UUID; - -public interface StewardRepository extends JpaRepository<Steward, UUID> { -} \ No newline at end of file diff --git a/airports-hr-service/src/main/java/cz/muni/fi/pa165/hr/Application.java b/airports-hr-service/src/main/java/cz/muni/fi/pa165/hr/Application.java new file mode 100644 index 0000000000000000000000000000000000000000..903975a952df7b3e00535713cb8855f93e4ba155 --- /dev/null +++ b/airports-hr-service/src/main/java/cz/muni/fi/pa165/hr/Application.java @@ -0,0 +1,12 @@ +package cz.muni.fi.pa165.hr; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + + +@SpringBootApplication(scanBasePackages = {"cz.muni.fi.pa165.hr", "cz.muni.fi.pa165.hr.repository"}) +public class Application { + public static void main(String[] args) { + SpringApplication.run(Application.class, args); + } +} \ No newline at end of file diff --git a/airports-hr-service/src/main/java/cz/fi/muni/pa165/hr/Constants.java b/airports-hr-service/src/main/java/cz/muni/fi/pa165/hr/Constants.java similarity index 73% rename from airports-hr-service/src/main/java/cz/fi/muni/pa165/hr/Constants.java rename to airports-hr-service/src/main/java/cz/muni/fi/pa165/hr/Constants.java index 7a910e07412f07b366f279d63fabff535c857fb9..ac98fef79bf1a0c246337fc701c615520d6cfd63 100644 --- a/airports-hr-service/src/main/java/cz/fi/muni/pa165/hr/Constants.java +++ b/airports-hr-service/src/main/java/cz/muni/fi/pa165/hr/Constants.java @@ -1,4 +1,4 @@ -package cz.fi.muni.pa165.hr; +package cz.muni.fi.pa165.hr; public class Constants { diff --git a/airports-hr-service/src/main/java/cz/muni/fi/pa165/hr/SwaggerConfig.java b/airports-hr-service/src/main/java/cz/muni/fi/pa165/hr/SwaggerConfig.java new file mode 100644 index 0000000000000000000000000000000000000000..2cdfc4b376fcb0759e6272520f95e63739562478 --- /dev/null +++ b/airports-hr-service/src/main/java/cz/muni/fi/pa165/hr/SwaggerConfig.java @@ -0,0 +1,29 @@ +package cz.muni.fi.pa165.hr; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import springfox.documentation.builders.PathSelectors; +import springfox.documentation.builders.RequestHandlerSelectors; +import springfox.documentation.spi.DocumentationType; +import springfox.documentation.spring.web.plugins.Docket; +import springfox.documentation.swagger2.annotations.EnableSwagger2; + +@Configuration +@EnableSwagger2 +public class SwaggerConfig { + + @Bean + public Docket facadesV1Api() { + return createDocket() + .groupName("Human Resources") + .select() + .apis(RequestHandlerSelectors.basePackage( + cz.muni.fi.pa165.hr.rest.StewardController.class.getPackageName())) + .paths(PathSelectors.any()) + .build(); + } + + private Docket createDocket() { + return new Docket(DocumentationType.SWAGGER_2); + } +} \ No newline at end of file diff --git a/airports-hr-service/src/main/java/cz/fi/muni/pa165/hr/dao/Employee.java b/airports-hr-service/src/main/java/cz/muni/fi/pa165/hr/dao/Employee.java similarity index 51% rename from airports-hr-service/src/main/java/cz/fi/muni/pa165/hr/dao/Employee.java rename to airports-hr-service/src/main/java/cz/muni/fi/pa165/hr/dao/Employee.java index d052457ede267c4a207b70f1397aa1be830f95c8..4bca8b9271f80593840cfc7172d21700d77768ae 100644 --- a/airports-hr-service/src/main/java/cz/fi/muni/pa165/hr/dao/Employee.java +++ b/airports-hr-service/src/main/java/cz/muni/fi/pa165/hr/dao/Employee.java @@ -1,21 +1,26 @@ -package cz.fi.muni.pa165.hr.dao; +package cz.muni.fi.pa165.hr.dao; -import cz.fi.muni.pa165.hr.Constants; -import jakarta.persistence.Entity; -import jakarta.persistence.Inheritance; -import jakarta.persistence.InheritanceType; -import jakarta.persistence.Table; +import cz.muni.fi.pa165.hr.Constants; +import javax.persistence.Entity; +import javax.persistence.Table; + +import lombok.AllArgsConstructor; import lombok.Data; +import lombok.NoArgsConstructor; +import java.io.Serializable; import java.time.LocalDate; import java.util.UUID; +import javax.persistence.*; @Data @Entity @Table(name = "employee", schema = Constants.HR_SCHEMA) @Inheritance(strategy = InheritanceType.JOINED) -public class Employee { +public class Employee implements Serializable { + @Id + @GeneratedValue(strategy = GenerationType.AUTO) private UUID id; private String name; private String surname; diff --git a/airports-hr-service/src/main/java/cz/muni/fi/pa165/hr/dao/Language.java b/airports-hr-service/src/main/java/cz/muni/fi/pa165/hr/dao/Language.java new file mode 100644 index 0000000000000000000000000000000000000000..602bd78d910d890e24c140dcec43d908168b6cac --- /dev/null +++ b/airports-hr-service/src/main/java/cz/muni/fi/pa165/hr/dao/Language.java @@ -0,0 +1,18 @@ +package cz.muni.fi.pa165.hr.dao; + +import cz.muni.fi.pa165.hr.Constants; +import lombok.Data; + +import javax.persistence.*; +import java.util.UUID; + +@Data +@Entity +@Table(name = "language", schema = Constants.HR_SCHEMA) +public class Language { + + @Id + @GeneratedValue(strategy = GenerationType.AUTO) + private UUID id; + private String language; +} diff --git a/airports-hr-service/src/main/java/cz/muni/fi/pa165/hr/dao/Pilot.java b/airports-hr-service/src/main/java/cz/muni/fi/pa165/hr/dao/Pilot.java new file mode 100644 index 0000000000000000000000000000000000000000..1c9c11189c7a0d821d7cf621682e5506421c7cd6 --- /dev/null +++ b/airports-hr-service/src/main/java/cz/muni/fi/pa165/hr/dao/Pilot.java @@ -0,0 +1,19 @@ +package cz.muni.fi.pa165.hr.dao; + +import cz.muni.fi.pa165.hr.Constants; + +import javax.persistence.*; + +import lombok.Data; + +import java.util.Set; + +@Data +@Entity +@Table(name = "pilots", schema = Constants.HR_SCHEMA) +@PrimaryKeyJoinColumn(name = "employee_id") +public class Pilot extends Employee { + + @OneToMany(cascade = CascadeType.ALL) + private Set<PilotLicence> licences; +} diff --git a/airports-hr-service/src/main/java/cz/muni/fi/pa165/hr/dao/PilotLicence.java b/airports-hr-service/src/main/java/cz/muni/fi/pa165/hr/dao/PilotLicence.java new file mode 100644 index 0000000000000000000000000000000000000000..d4571675bd8958edd3ab208b745f28f532051f31 --- /dev/null +++ b/airports-hr-service/src/main/java/cz/muni/fi/pa165/hr/dao/PilotLicence.java @@ -0,0 +1,20 @@ +package cz.muni.fi.pa165.hr.dao; + +import cz.muni.fi.pa165.hr.Constants; +import lombok.Data; + +import javax.persistence.*; +import java.util.UUID; + +@Data +@Entity +@Table(name = "pilot_licence", schema = Constants.HR_SCHEMA) +public class PilotLicence { + + @Id + @GeneratedValue(strategy = GenerationType.AUTO) + private UUID id; + + @Enumerated(EnumType.ORDINAL) + private PlaneType type; +} diff --git a/airports-hr-service/src/main/java/cz/muni/fi/pa165/hr/dao/PlaneType.java b/airports-hr-service/src/main/java/cz/muni/fi/pa165/hr/dao/PlaneType.java new file mode 100644 index 0000000000000000000000000000000000000000..308de3d6847be2489c4c0bf6863c920a71a167e0 --- /dev/null +++ b/airports-hr-service/src/main/java/cz/muni/fi/pa165/hr/dao/PlaneType.java @@ -0,0 +1,9 @@ +package cz.muni.fi.pa165.hr.dao; + +public enum PlaneType { + CESSNA, + AIRBUS_A380, + AIRBUS_A350, + AIRBUS_A320, + AIRBUS_A310, +} diff --git a/airports-hr-service/src/main/java/cz/muni/fi/pa165/hr/dao/Steward.java b/airports-hr-service/src/main/java/cz/muni/fi/pa165/hr/dao/Steward.java new file mode 100644 index 0000000000000000000000000000000000000000..d2372c600d086cf9ea426606a734c9c2b5cd624a --- /dev/null +++ b/airports-hr-service/src/main/java/cz/muni/fi/pa165/hr/dao/Steward.java @@ -0,0 +1,19 @@ +package cz.muni.fi.pa165.hr.dao; + +import cz.muni.fi.pa165.hr.Constants; + +import javax.persistence.*; + +import lombok.Data; + +import java.util.Set; + +@Data +@Entity +@Table(name = "stewards", schema = Constants.HR_SCHEMA) +@PrimaryKeyJoinColumn(name = "employee_id") +public class Steward extends Employee{ + + @OneToMany(cascade = CascadeType.ALL) + private Set<Language> languages; +} diff --git a/airports-hr-service/src/main/java/cz/fi/muni/pa165/hr/excdption/EmployeeNtFoundException.java b/airports-hr-service/src/main/java/cz/muni/fi/pa165/hr/excdption/EmployeeNtFoundException.java similarity index 94% rename from airports-hr-service/src/main/java/cz/fi/muni/pa165/hr/excdption/EmployeeNtFoundException.java rename to airports-hr-service/src/main/java/cz/muni/fi/pa165/hr/excdption/EmployeeNtFoundException.java index b8ab41d761017dc0a73af9a545b1440e5494f929..fb17a2d4d01dfcb1105085fba70aef458e885e9a 100644 --- a/airports-hr-service/src/main/java/cz/fi/muni/pa165/hr/excdption/EmployeeNtFoundException.java +++ b/airports-hr-service/src/main/java/cz/muni/fi/pa165/hr/excdption/EmployeeNtFoundException.java @@ -1,4 +1,4 @@ -package cz.fi.muni.pa165.hr.excdption; +package cz.muni.fi.pa165.hr.excdption; import org.springframework.http.HttpStatus; import org.springframework.web.bind.annotation.ResponseStatus; diff --git a/airports-hr-service/src/main/java/cz/fi/muni/pa165/hr/facade/EmployeeFacade.java b/airports-hr-service/src/main/java/cz/muni/fi/pa165/hr/facade/EmployeeFacade.java similarity index 73% rename from airports-hr-service/src/main/java/cz/fi/muni/pa165/hr/facade/EmployeeFacade.java rename to airports-hr-service/src/main/java/cz/muni/fi/pa165/hr/facade/EmployeeFacade.java index 24c45d941905faea25177eba09bd8869edc95158..88c87f927327645919c3524997faa91c0bb5bd5b 100644 --- a/airports-hr-service/src/main/java/cz/fi/muni/pa165/hr/facade/EmployeeFacade.java +++ b/airports-hr-service/src/main/java/cz/muni/fi/pa165/hr/facade/EmployeeFacade.java @@ -1,14 +1,14 @@ -package cz.fi.muni.pa165.hr.facade; +package cz.muni.fi.pa165.hr.facade; -import cz.fi.muni.pa165.api.employee.Employee; -import cz.fi.muni.pa165.api.employee.Pilot; -import cz.fi.muni.pa165.api.employee.PlaneType; -import cz.fi.muni.pa165.api.employee.Steward; -import cz.fi.muni.pa165.api.employee.requests.EmployeeRequest; -import cz.fi.muni.pa165.api.employee.requests.PilotRequest; -import cz.fi.muni.pa165.api.employee.requests.StewardRequest; -import cz.fi.muni.pa165.hr.service.EmployeeService; -import lombok.AllArgsConstructor; +import cz.muni.fi.pa165.api.employee.Employee; +import cz.muni.fi.pa165.api.employee.Pilot; +import cz.muni.fi.pa165.api.plane.PlaneType; +import cz.muni.fi.pa165.api.employee.Steward; +import cz.muni.fi.pa165.api.employee.requests.EmployeeRequest; +import cz.muni.fi.pa165.api.employee.requests.PilotRequest; +import cz.muni.fi.pa165.api.employee.requests.StewardRequest; +import cz.muni.fi.pa165.hr.service.EmployeeService; +import lombok.RequiredArgsConstructor; import org.modelmapper.ModelMapper; import org.springframework.stereotype.Service; @@ -17,18 +17,18 @@ import java.util.List; import java.util.UUID; @Service -@AllArgsConstructor +@RequiredArgsConstructor public class EmployeeFacade { private final EmployeeService personService; private final ModelMapper modelMapper = new ModelMapper(); public Steward createSteward(StewardRequest stewardRequest){ - var result = personService.createSteward(modelMapper.map(stewardRequest, cz.fi.muni.pa165.hr.dao.Steward.class)); + var result = personService.createSteward(modelMapper.map(stewardRequest, cz.muni.fi.pa165.hr.dao.Steward.class)); return modelMapper.map(result, Steward.class); } public Pilot createPilot(PilotRequest pilotRequest){ - var result = personService.createPilot(modelMapper.map(pilotRequest, cz.fi.muni.pa165.hr.dao.Pilot.class)); + var result = personService.createPilot(modelMapper.map(pilotRequest, cz.muni.fi.pa165.hr.dao.Pilot.class)); return modelMapper.map(result, Pilot.class); } @@ -38,17 +38,17 @@ public class EmployeeFacade { } public Employee updateEmployee(UUID id, EmployeeRequest employeeRequest){ - var result = personService.updateEmployee(id, modelMapper.map(employeeRequest, cz.fi.muni.pa165.hr.dao.Employee.class)); + var result = personService.updateEmployee(id, modelMapper.map(employeeRequest, cz.muni.fi.pa165.hr.dao.Employee.class)); return modelMapper.map(result, Employee.class); } public Pilot updatePilot(UUID id, PilotRequest pilotRequest){ - var result = personService.updatePilot(id, modelMapper.map(pilotRequest, cz.fi.muni.pa165.hr.dao.Pilot.class)); + var result = personService.updatePilot(id, modelMapper.map(pilotRequest, cz.muni.fi.pa165.hr.dao.Pilot.class)); return modelMapper.map(result, Pilot.class); } public Steward updateSteward(UUID id, StewardRequest stewardRequest){ - var result = personService.updateSteward(id, modelMapper.map(stewardRequest, cz.fi.muni.pa165.hr.dao.Steward.class)); + var result = personService.updateSteward(id, modelMapper.map(stewardRequest, cz.muni.fi.pa165.hr.dao.Steward.class)); return modelMapper.map(result, Steward.class); } diff --git a/airports-hr-service/src/main/java/cz/muni/fi/pa165/hr/repository/EmployeeRepository.java b/airports-hr-service/src/main/java/cz/muni/fi/pa165/hr/repository/EmployeeRepository.java new file mode 100644 index 0000000000000000000000000000000000000000..7da72c34c5256bf348c042d70e921358707211ea --- /dev/null +++ b/airports-hr-service/src/main/java/cz/muni/fi/pa165/hr/repository/EmployeeRepository.java @@ -0,0 +1,11 @@ +package cz.muni.fi.pa165.hr.repository; + +import cz.muni.fi.pa165.hr.dao.Employee; +import org.springframework.data.repository.CrudRepository; +import org.springframework.stereotype.Repository; + +import java.util.UUID; + +@Repository +public interface EmployeeRepository extends CrudRepository<Employee, UUID> { +} diff --git a/airports-hr-service/src/main/java/cz/muni/fi/pa165/hr/repository/PilotRepository.java b/airports-hr-service/src/main/java/cz/muni/fi/pa165/hr/repository/PilotRepository.java new file mode 100644 index 0000000000000000000000000000000000000000..d9cbad561a0886daeb99a51eb96ad180507f1924 --- /dev/null +++ b/airports-hr-service/src/main/java/cz/muni/fi/pa165/hr/repository/PilotRepository.java @@ -0,0 +1,11 @@ +package cz.muni.fi.pa165.hr.repository; + +import cz.muni.fi.pa165.hr.dao.Pilot; +import org.springframework.data.repository.CrudRepository; +import org.springframework.stereotype.Repository; + +import java.util.UUID; + +@Repository +public interface PilotRepository extends CrudRepository<Pilot, UUID> { +} \ No newline at end of file diff --git a/airports-hr-service/src/main/java/cz/muni/fi/pa165/hr/repository/StewardRepository.java b/airports-hr-service/src/main/java/cz/muni/fi/pa165/hr/repository/StewardRepository.java new file mode 100644 index 0000000000000000000000000000000000000000..c26a5f90b0e2dd0f37a8b6f801671f87c6fbbb88 --- /dev/null +++ b/airports-hr-service/src/main/java/cz/muni/fi/pa165/hr/repository/StewardRepository.java @@ -0,0 +1,11 @@ +package cz.muni.fi.pa165.hr.repository; + +import cz.muni.fi.pa165.hr.dao.Steward; +import org.springframework.data.repository.CrudRepository; +import org.springframework.stereotype.Repository; + +import java.util.UUID; + +@Repository +public interface StewardRepository extends CrudRepository<Steward, UUID> { +} \ No newline at end of file diff --git a/airports-hr-service/src/main/java/cz/fi/muni/pa165/hr/rest/EmployeeController.java b/airports-hr-service/src/main/java/cz/muni/fi/pa165/hr/rest/EmployeeController.java similarity index 60% rename from airports-hr-service/src/main/java/cz/fi/muni/pa165/hr/rest/EmployeeController.java rename to airports-hr-service/src/main/java/cz/muni/fi/pa165/hr/rest/EmployeeController.java index 5c2294773c67b981760a67d1b58fa3cf5cacbc69..0c118ee47fd1d03bd2324e66ab4a4be3848093e0 100644 --- a/airports-hr-service/src/main/java/cz/fi/muni/pa165/hr/rest/EmployeeController.java +++ b/airports-hr-service/src/main/java/cz/muni/fi/pa165/hr/rest/EmployeeController.java @@ -1,25 +1,26 @@ -package cz.fi.muni.pa165.hr.rest; +package cz.muni.fi.pa165.hr.rest; -import cz.fi.muni.pa165.api.employee.requests.EmployeeRequest; -import cz.fi.muni.pa165.api.employee.Employee; -import cz.fi.muni.pa165.hr.facade.EmployeeFacade; +import cz.muni.fi.pa165.api.employee.requests.EmployeeRequest; +import cz.muni.fi.pa165.api.employee.Employee; +import cz.muni.fi.pa165.hr.facade.EmployeeFacade; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.*; +import javax.annotation.PostConstruct; import java.util.UUID; @RestController @RequiredArgsConstructor public class EmployeeController { - private EmployeeFacade employeeFacade; + private final EmployeeFacade employeeFacade; @GetMapping("/employee/{id}") public Employee get(@PathVariable UUID id) { return employeeFacade.get(id); } - @PutMapping("/employee//{id}") + @PutMapping("/employee/{id}") public Employee update(@PathVariable UUID id, @RequestBody EmployeeRequest request){ return employeeFacade.updateEmployee(id, request); } @@ -29,4 +30,8 @@ public class EmployeeController { return employeeFacade.terminate(id); } + @PostConstruct + public void init(){ + System.out.println("PICO"); + } } diff --git a/airports-hr-service/src/main/java/cz/fi/muni/pa165/hr/rest/PilotController.java b/airports-hr-service/src/main/java/cz/muni/fi/pa165/hr/rest/PilotController.java similarity index 77% rename from airports-hr-service/src/main/java/cz/fi/muni/pa165/hr/rest/PilotController.java rename to airports-hr-service/src/main/java/cz/muni/fi/pa165/hr/rest/PilotController.java index 41ae2c0ff8d90d8ab34719eef266aaf4ae9ac44f..61ff84fa9722262b7962351583a7600b2cd374b9 100644 --- a/airports-hr-service/src/main/java/cz/fi/muni/pa165/hr/rest/PilotController.java +++ b/airports-hr-service/src/main/java/cz/muni/fi/pa165/hr/rest/PilotController.java @@ -1,9 +1,9 @@ -package cz.fi.muni.pa165.hr.rest; +package cz.muni.fi.pa165.hr.rest; -import cz.fi.muni.pa165.api.employee.Pilot; -import cz.fi.muni.pa165.api.employee.PlaneType; -import cz.fi.muni.pa165.api.employee.requests.PilotRequest; -import cz.fi.muni.pa165.hr.facade.EmployeeFacade; +import cz.muni.fi.pa165.api.employee.Pilot; +import cz.muni.fi.pa165.api.plane.PlaneType; +import cz.muni.fi.pa165.api.employee.requests.PilotRequest; +import cz.muni.fi.pa165.hr.facade.EmployeeFacade; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.*; @@ -15,7 +15,7 @@ import java.util.UUID; @RequiredArgsConstructor public class PilotController { - private EmployeeFacade employeeFacade; + private final EmployeeFacade employeeFacade; @PostMapping("/employee/pilot") public Pilot create(@RequestBody PilotRequest request) { diff --git a/airports-hr-service/src/main/java/cz/fi/muni/pa165/hr/rest/StewardController.java b/airports-hr-service/src/main/java/cz/muni/fi/pa165/hr/rest/StewardController.java similarity index 71% rename from airports-hr-service/src/main/java/cz/fi/muni/pa165/hr/rest/StewardController.java rename to airports-hr-service/src/main/java/cz/muni/fi/pa165/hr/rest/StewardController.java index 3be7a8971df384cde9ffeb7a0997f17a21cba662..b40bebcf61cac09ebb2a827403083ff38d1d5f96 100644 --- a/airports-hr-service/src/main/java/cz/fi/muni/pa165/hr/rest/StewardController.java +++ b/airports-hr-service/src/main/java/cz/muni/fi/pa165/hr/rest/StewardController.java @@ -1,11 +1,9 @@ -package cz.fi.muni.pa165.hr.rest; +package cz.muni.fi.pa165.hr.rest; -import cz.fi.muni.pa165.api.employee.Employee; -import cz.fi.muni.pa165.api.employee.Pilot; -import cz.fi.muni.pa165.api.employee.Steward; -import cz.fi.muni.pa165.api.employee.requests.StewardRequest; -import cz.fi.muni.pa165.hr.facade.EmployeeFacade; +import cz.muni.fi.pa165.api.employee.Steward; +import cz.muni.fi.pa165.api.employee.requests.StewardRequest; +import cz.muni.fi.pa165.hr.facade.EmployeeFacade; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.*; @@ -17,7 +15,7 @@ import java.util.UUID; @RequiredArgsConstructor public class StewardController { - private EmployeeFacade employeeFacade; + private final EmployeeFacade employeeFacade; @PostMapping("/employee/steward") public Steward createSteward(@RequestBody StewardRequest request) { diff --git a/airports-hr-service/src/main/java/cz/fi/muni/pa165/hr/service/EmployeeService.java b/airports-hr-service/src/main/java/cz/muni/fi/pa165/hr/service/EmployeeService.java similarity index 83% rename from airports-hr-service/src/main/java/cz/fi/muni/pa165/hr/service/EmployeeService.java rename to airports-hr-service/src/main/java/cz/muni/fi/pa165/hr/service/EmployeeService.java index 71a8da842f99b20a9bfc3f10f98fc6d6aace5b0c..eaee45d87485df991943a999643f3c1ce0f33050 100644 --- a/airports-hr-service/src/main/java/cz/fi/muni/pa165/hr/service/EmployeeService.java +++ b/airports-hr-service/src/main/java/cz/muni/fi/pa165/hr/service/EmployeeService.java @@ -1,15 +1,15 @@ -package cz.fi.muni.pa165.hr.service; - -import cz.fi.muni.pa165.api.employee.PlaneType; -import cz.fi.muni.pa165.hr.dao.Employee; -import cz.fi.muni.pa165.hr.dao.Pilot; -import cz.fi.muni.pa165.hr.dao.Steward; -import cz.fi.muni.pa165.hr.repository.EmployeeRepository; -import cz.fi.muni.pa165.hr.repository.PilotRepository; -import cz.fi.muni.pa165.hr.repository.StewardRepository; +package cz.muni.fi.pa165.hr.service; + +import cz.muni.fi.pa165.api.plane.PlaneType; +import cz.muni.fi.pa165.hr.dao.Employee; +import cz.muni.fi.pa165.hr.dao.Pilot; +import cz.muni.fi.pa165.hr.dao.Steward; +import cz.muni.fi.pa165.hr.repository.EmployeeRepository; +import cz.muni.fi.pa165.hr.repository.PilotRepository; +import cz.muni.fi.pa165.hr.repository.StewardRepository; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; -import cz.fi.muni.pa165.hr.excdption.EmployeeNtFoundException; +import cz.muni.fi.pa165.hr.excdption.EmployeeNtFoundException; import java.time.LocalDate; import java.time.LocalDateTime; @@ -63,17 +63,17 @@ public class EmployeeService { } public List<Steward> getAvailableStewards(LocalDateTime from, LocalDateTime to) { - //TODO: needs special method in repository, implement when sober + //TODO: needs special method in repository return List.of(); } public List<Pilot> getAvailablePilots(LocalDateTime from, LocalDateTime to) { - //TODO: needs special method in repository, implement when sober + //TODO: needs special method in repository return List.of(); } public List<Pilot> getByLicense(PlaneType planeType) { - //TODO: needs repository offeres findBy method, which could be used, implement when sober + //TODO: needs repository offeres findBy method, which could be used return List.of(); } diff --git a/airports-hr-service/src/main/resources/application.properties b/airports-hr-service/src/main/resources/application.properties new file mode 100644 index 0000000000000000000000000000000000000000..0e013ec7a6565ee630691c5186914a3d2a978e58 --- /dev/null +++ b/airports-hr-service/src/main/resources/application.properties @@ -0,0 +1,17 @@ +spring.jpa.database-platform=org.hibernate.dialect.PostgreSQLDialect +spring.jpa.hibernate.ddl-auto=update +spring.jpa.generate-ddl=true +spring.datasource.driver-class-name=org.postgresql.Driver +spring.datasource.url=jdbc:postgresql://localhost:5432/airport-manager +spring.datasource.username=root +spring.datasource.password=123 +spring.jpa.properties.hibernate.hbm2ddl.create_namespaces=true +jakarta.peristence.create-database-schemas=true + + +springdoc.swagger-ui.path=/swagger-ui.html +application-description=API Description +application-version=1.0 + +logging.level.org.springframework.web=DEBUG +logging.level.io.springfox=DEBUG \ No newline at end of file diff --git a/airports-planes-service/pom.xml b/airports-planes-service/pom.xml index 4054d3c2fee552ffd4f400254575085658dffbba..dc6f8df158d0251ca479fec07f40c683105136de 100644 --- a/airports-planes-service/pom.xml +++ b/airports-planes-service/pom.xml @@ -4,13 +4,13 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> - <groupId>cz.fi.muni.pa165</groupId> + <groupId>cz.muni.fi.pa165</groupId> <artifactId>airpot-manager</artifactId> <version>1.0-SNAPSHOT</version> </parent> - <groupId>cz.fi.muni.pa165</groupId> <artifactId>airports-planes-service</artifactId> + <version>1.0-SNAPSHOT</version> <properties> <maven.compiler.source>17</maven.compiler.source> @@ -30,9 +30,17 @@ </dependency> <!-- https://mvnrepository.com/artifact/org.springframework.data/spring-data-jpa --> <dependency> - <groupId>org.springframework.data</groupId> - <artifactId>spring-data-jpa</artifactId> - <version>3.2.4</version> + <groupId>org.springframework.boot</groupId> + <artifactId>spring-boot-starter-data-jpa</artifactId> + </dependency> + <dependency> + <groupId>org.springframework.boot</groupId> + <artifactId>spring-boot-starter-validation</artifactId> + </dependency> + <dependency> + <groupId>org.postgresql</groupId> + <artifactId>postgresql</artifactId> + <scope>runtime</scope> </dependency> <dependency> <groupId>org.springframework.boot</groupId> @@ -43,14 +51,30 @@ <artifactId>modelmapper</artifactId> <version>3.2.0</version> </dependency> + <dependency> + <groupId>org.springframework.boot</groupId> + <artifactId>spring-boot-starter-actuator</artifactId> + </dependency> + <dependency> + <groupId>io.springfox</groupId> + <artifactId>springfox-swagger2</artifactId> + <version>${swagger.version}</version> + </dependency> + <dependency> + <groupId>io.springfox</groupId> + <artifactId>springfox-swagger-ui</artifactId> + <version>${swagger-ui.version}</version> + </dependency> <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-boot-starter</artifactId> - <version>3.0.0</version> + <version>${swagger.version}</version> + </dependency> + <dependency> + <groupId>io.micrometer</groupId> + <artifactId>micrometer-core</artifactId> </dependency> - </dependencies> - <build> <plugins> <plugin> diff --git a/airports-planes-service/src/main/java/cz/fi/muni/pa165/planes/Constants.java b/airports-planes-service/src/main/java/cz/fi/muni/pa165/planes/Constants.java deleted file mode 100644 index d382385fc0997bc593530e7abb1a58dc3e7496ca..0000000000000000000000000000000000000000 --- a/airports-planes-service/src/main/java/cz/fi/muni/pa165/planes/Constants.java +++ /dev/null @@ -1,5 +0,0 @@ -package cz.fi.muni.pa165.planes; - -public class Constants { - public static final String HR_SCHEMA = "hr"; -} diff --git a/airports-planes-service/src/main/java/cz/fi/muni/pa165/planes/dao/Plane.java b/airports-planes-service/src/main/java/cz/fi/muni/pa165/planes/dao/Plane.java deleted file mode 100644 index 0edea3f9edf1e0968909164cd0ca5330728721b0..0000000000000000000000000000000000000000 --- a/airports-planes-service/src/main/java/cz/fi/muni/pa165/planes/dao/Plane.java +++ /dev/null @@ -1,23 +0,0 @@ -package cz.fi.muni.pa165.planes.dao; - -import cz.fi.muni.pa165.api.employee.PlaneType; -import cz.fi.muni.pa165.planes.Constants; -import jakarta.persistence.*; -import lombok.Data; - -import java.util.UUID; - -@Data -@Entity -@Table(name = "plane", schema = Constants.HR_SCHEMA) -@Inheritance(strategy = InheritanceType.JOINED) -public class Plane { - - @Id - private UUID id; - private String name; - private PlaneType planeType; - private int maxCapacity; - private short pilotsRequired; - -} diff --git a/airports-planes-service/src/main/java/cz/fi/muni/pa165/planes/repository/PlaneRepository.java b/airports-planes-service/src/main/java/cz/fi/muni/pa165/planes/repository/PlaneRepository.java deleted file mode 100644 index 38cc7ab4228e98eeabcab217d64ff94927beeced..0000000000000000000000000000000000000000 --- a/airports-planes-service/src/main/java/cz/fi/muni/pa165/planes/repository/PlaneRepository.java +++ /dev/null @@ -1,15 +0,0 @@ -package cz.fi.muni.pa165.planes.repository; - -import cz.fi.muni.pa165.api.employee.PlaneType; -import cz.fi.muni.pa165.planes.dao.Plane; -import org.springframework.data.jpa.repository.JpaRepository; -import org.springframework.stereotype.Repository; - -import java.util.List; -import java.util.UUID; - -@Repository -public interface PlaneRepository extends JpaRepository<Plane, UUID> { - - List<Plane> findByPlaneType(PlaneType planeType); -} diff --git a/airports-planes-service/src/main/java/cz/fi/muni/pa165/planes/Application.java b/airports-planes-service/src/main/java/cz/muni/fi/pa165/planes/Application.java similarity index 89% rename from airports-planes-service/src/main/java/cz/fi/muni/pa165/planes/Application.java rename to airports-planes-service/src/main/java/cz/muni/fi/pa165/planes/Application.java index 7f2aedff228b0f8491ee002dd408fb437cf6509c..efbea8fa9220385107105a3f2ee9e1d5058caea0 100644 --- a/airports-planes-service/src/main/java/cz/fi/muni/pa165/planes/Application.java +++ b/airports-planes-service/src/main/java/cz/muni/fi/pa165/planes/Application.java @@ -1,4 +1,4 @@ -package cz.fi.muni.pa165.planes; +package cz.muni.fi.pa165.planes; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; diff --git a/airports-planes-service/src/main/java/cz/muni/fi/pa165/planes/Constants.java b/airports-planes-service/src/main/java/cz/muni/fi/pa165/planes/Constants.java new file mode 100644 index 0000000000000000000000000000000000000000..3a40441a80311d5f14c0d84385bd84835a01f846 --- /dev/null +++ b/airports-planes-service/src/main/java/cz/muni/fi/pa165/planes/Constants.java @@ -0,0 +1,5 @@ +package cz.muni.fi.pa165.planes; + +public class Constants { + public static final String PLANES_SCHEMA = "planes"; +} diff --git a/airports-planes-service/src/main/java/cz/muni/fi/pa165/planes/Main.java b/airports-planes-service/src/main/java/cz/muni/fi/pa165/planes/Main.java new file mode 100644 index 0000000000000000000000000000000000000000..9c6bfdca7de6f9ab0f9a8cafc01af3234ca00640 --- /dev/null +++ b/airports-planes-service/src/main/java/cz/muni/fi/pa165/planes/Main.java @@ -0,0 +1,7 @@ +package cz.muni.fi.pa165.planes; + +public class Main { + public static void main(String[] args) { + System.out.println("Hello world!"); + } +} \ No newline at end of file diff --git a/airports-planes-service/src/main/java/cz/muni/fi/pa165/planes/SwaggerConfig.java b/airports-planes-service/src/main/java/cz/muni/fi/pa165/planes/SwaggerConfig.java new file mode 100644 index 0000000000000000000000000000000000000000..40650a5319f4ae658bdbe4ea65b9c2bf1330cabb --- /dev/null +++ b/airports-planes-service/src/main/java/cz/muni/fi/pa165/planes/SwaggerConfig.java @@ -0,0 +1,30 @@ +package cz.muni.fi.pa165.planes; + +import cz.muni.fi.pa165.planes.rest.PlaneController; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import springfox.documentation.builders.PathSelectors; +import springfox.documentation.builders.RequestHandlerSelectors; +import springfox.documentation.spi.DocumentationType; +import springfox.documentation.spring.web.plugins.Docket; +import springfox.documentation.swagger2.annotations.EnableSwagger2; + +@Configuration +@EnableSwagger2 +public class SwaggerConfig { + + @Bean + public Docket facadesV1Api() { + return createDocket() + .groupName("Planes") + .select() + .apis(RequestHandlerSelectors.basePackage( + PlaneController.class.getPackageName())) + .paths(PathSelectors.any()) + .build(); + } + + private Docket createDocket() { + return new Docket(DocumentationType.SWAGGER_2); + } +} \ No newline at end of file diff --git a/airports-planes-service/src/main/java/cz/muni/fi/pa165/planes/dao/Plane.java b/airports-planes-service/src/main/java/cz/muni/fi/pa165/planes/dao/Plane.java new file mode 100644 index 0000000000000000000000000000000000000000..d10d4d23c453b76926f60395a3b6abcaf5c3a0eb --- /dev/null +++ b/airports-planes-service/src/main/java/cz/muni/fi/pa165/planes/dao/Plane.java @@ -0,0 +1,22 @@ +package cz.muni.fi.pa165.planes.dao; + +import cz.muni.fi.pa165.planes.Constants; +import lombok.Data; + +import javax.persistence.*; +import java.util.UUID; + +@Data +@Entity +@Table(name = "plane", schema = Constants.PLANES_SCHEMA) +public class Plane { + + @Id + @GeneratedValue(strategy = GenerationType.AUTO) + private UUID id; + private String name; + private PlaneType planeType; + private int maxCapacity; + private short pilotsRequired; + +} diff --git a/airports-planes-service/src/main/java/cz/muni/fi/pa165/planes/dao/PlaneType.java b/airports-planes-service/src/main/java/cz/muni/fi/pa165/planes/dao/PlaneType.java new file mode 100644 index 0000000000000000000000000000000000000000..744491dfa16ab932bef569b16088ecedd5a03938 --- /dev/null +++ b/airports-planes-service/src/main/java/cz/muni/fi/pa165/planes/dao/PlaneType.java @@ -0,0 +1,9 @@ +package cz.muni.fi.pa165.planes.dao; + +public enum PlaneType { + CESSNA, + AIRBUS_A380, + AIRBUS_A350, + AIRBUS_A320, + AIRBUS_A310, +} diff --git a/airports-planes-service/src/main/java/cz/fi/muni/pa165/planes/exception/PlaneNotFoundException.java b/airports-planes-service/src/main/java/cz/muni/fi/pa165/planes/exception/PlaneNotFoundException.java similarity index 94% rename from airports-planes-service/src/main/java/cz/fi/muni/pa165/planes/exception/PlaneNotFoundException.java rename to airports-planes-service/src/main/java/cz/muni/fi/pa165/planes/exception/PlaneNotFoundException.java index 26b02b69c5c7e987dfa58c9392af2e8be6c2789c..5a90f1bbad8c21921fd38e2e7585a4a096f849ce 100644 --- a/airports-planes-service/src/main/java/cz/fi/muni/pa165/planes/exception/PlaneNotFoundException.java +++ b/airports-planes-service/src/main/java/cz/muni/fi/pa165/planes/exception/PlaneNotFoundException.java @@ -1,4 +1,4 @@ -package cz.fi.muni.pa165.planes.exception; +package cz.muni.fi.pa165.planes.exception; import org.springframework.http.HttpStatus; import org.springframework.web.bind.annotation.ResponseStatus; diff --git a/airports-planes-service/src/main/java/cz/fi/muni/pa165/planes/facade/PlaneFacade.java b/airports-planes-service/src/main/java/cz/muni/fi/pa165/planes/facade/PlaneFacade.java similarity index 70% rename from airports-planes-service/src/main/java/cz/fi/muni/pa165/planes/facade/PlaneFacade.java rename to airports-planes-service/src/main/java/cz/muni/fi/pa165/planes/facade/PlaneFacade.java index e07721b2cb623f7e72d0e51403e428a466a48a5e..635c0a14288aa156e4a6afbe4b162eb5192a90e7 100644 --- a/airports-planes-service/src/main/java/cz/fi/muni/pa165/planes/facade/PlaneFacade.java +++ b/airports-planes-service/src/main/java/cz/muni/fi/pa165/planes/facade/PlaneFacade.java @@ -1,9 +1,9 @@ -package cz.fi.muni.pa165.planes.facade; +package cz.muni.fi.pa165.planes.facade; -import cz.fi.muni.pa165.api.employee.PlaneType; -import cz.fi.muni.pa165.api.plane.Plane; -import cz.fi.muni.pa165.api.plane.requests.PlaneRequest; -import cz.fi.muni.pa165.planes.service.PlaneService; +import cz.muni.fi.pa165.api.plane.PlaneType; +import cz.muni.fi.pa165.api.plane.Plane; +import cz.muni.fi.pa165.api.plane.requests.PlaneRequest; +import cz.muni.fi.pa165.planes.service.PlaneService; import lombok.AllArgsConstructor; import org.modelmapper.ModelMapper; import org.springframework.stereotype.Service; @@ -19,7 +19,7 @@ public class PlaneFacade { private final ModelMapper modelMapper = new ModelMapper(); public Plane create(PlaneRequest planeRequest) { - var result = planeService.create(modelMapper.map(planeRequest, cz.fi.muni.pa165.planes.dao.Plane.class)); + var result = planeService.create(modelMapper.map(planeRequest, cz.muni.fi.pa165.planes.dao.Plane.class)); return modelMapper.map(result, Plane.class); } @@ -34,7 +34,7 @@ public class PlaneFacade { } public List<Plane> getByType(PlaneType planeType) { - var result = planeService.getByType(planeType); + var result = planeService.getByType(modelMapper.map(planeType,cz.muni.fi.pa165.planes.dao.PlaneType.class)); return result.stream().map(p -> modelMapper.map(p, Plane.class)).toList(); } } diff --git a/airports-planes-service/src/main/java/cz/muni/fi/pa165/planes/repository/PlaneRepository.java b/airports-planes-service/src/main/java/cz/muni/fi/pa165/planes/repository/PlaneRepository.java new file mode 100644 index 0000000000000000000000000000000000000000..28a319e1bb95dc6fc8b3450aeea1a2c4728afd10 --- /dev/null +++ b/airports-planes-service/src/main/java/cz/muni/fi/pa165/planes/repository/PlaneRepository.java @@ -0,0 +1,15 @@ +package cz.muni.fi.pa165.planes.repository; + +import cz.muni.fi.pa165.planes.dao.PlaneType; +import cz.muni.fi.pa165.planes.dao.Plane; +import org.springframework.data.repository.CrudRepository; +import org.springframework.stereotype.Repository; + +import java.util.List; +import java.util.UUID; + +@Repository +public interface PlaneRepository extends CrudRepository<Plane, UUID> { + + List<Plane> findByPlaneType(PlaneType planeType); +} diff --git a/airports-planes-service/src/main/java/cz/fi/muni/pa165/planes/rest/PlaneController.java b/airports-planes-service/src/main/java/cz/muni/fi/pa165/planes/rest/PlaneController.java similarity index 78% rename from airports-planes-service/src/main/java/cz/fi/muni/pa165/planes/rest/PlaneController.java rename to airports-planes-service/src/main/java/cz/muni/fi/pa165/planes/rest/PlaneController.java index c14286c3c146372bb803ff6e44a505f04b6aa41e..3a18f9d95f4417e231eecc1e4450be70ebc4497e 100644 --- a/airports-planes-service/src/main/java/cz/fi/muni/pa165/planes/rest/PlaneController.java +++ b/airports-planes-service/src/main/java/cz/muni/fi/pa165/planes/rest/PlaneController.java @@ -1,9 +1,9 @@ -package cz.fi.muni.pa165.planes.rest; +package cz.muni.fi.pa165.planes.rest; -import cz.fi.muni.pa165.api.employee.PlaneType; -import cz.fi.muni.pa165.api.plane.Plane; -import cz.fi.muni.pa165.api.plane.requests.PlaneRequest; -import cz.fi.muni.pa165.planes.facade.PlaneFacade; +import cz.muni.fi.pa165.planes.facade.PlaneFacade; +import cz.muni.fi.pa165.api.plane.PlaneType; +import cz.muni.fi.pa165.api.plane.Plane; +import cz.muni.fi.pa165.api.plane.requests.PlaneRequest; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.*; diff --git a/airports-planes-service/src/main/java/cz/fi/muni/pa165/planes/service/PlaneService.java b/airports-planes-service/src/main/java/cz/muni/fi/pa165/planes/service/PlaneService.java similarity index 77% rename from airports-planes-service/src/main/java/cz/fi/muni/pa165/planes/service/PlaneService.java rename to airports-planes-service/src/main/java/cz/muni/fi/pa165/planes/service/PlaneService.java index ea2fb3865c9bc0d58101e4a03612b6ddf58c8836..56d1971794111eadfbfbeabb2f6f927a228c55db 100644 --- a/airports-planes-service/src/main/java/cz/fi/muni/pa165/planes/service/PlaneService.java +++ b/airports-planes-service/src/main/java/cz/muni/fi/pa165/planes/service/PlaneService.java @@ -1,9 +1,9 @@ -package cz.fi.muni.pa165.planes.service; +package cz.muni.fi.pa165.planes.service; -import cz.fi.muni.pa165.api.employee.PlaneType; -import cz.fi.muni.pa165.planes.dao.Plane; -import cz.fi.muni.pa165.planes.exception.PlaneNotFoundException; -import cz.fi.muni.pa165.planes.repository.PlaneRepository; +import cz.muni.fi.pa165.planes.dao.Plane; +import cz.muni.fi.pa165.planes.dao.PlaneType; +import cz.muni.fi.pa165.planes.exception.PlaneNotFoundException; +import cz.muni.fi.pa165.planes.repository.PlaneRepository; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; diff --git a/airports-planes-service/src/main/resources/application.properties b/airports-planes-service/src/main/resources/application.properties new file mode 100644 index 0000000000000000000000000000000000000000..0e013ec7a6565ee630691c5186914a3d2a978e58 --- /dev/null +++ b/airports-planes-service/src/main/resources/application.properties @@ -0,0 +1,17 @@ +spring.jpa.database-platform=org.hibernate.dialect.PostgreSQLDialect +spring.jpa.hibernate.ddl-auto=update +spring.jpa.generate-ddl=true +spring.datasource.driver-class-name=org.postgresql.Driver +spring.datasource.url=jdbc:postgresql://localhost:5432/airport-manager +spring.datasource.username=root +spring.datasource.password=123 +spring.jpa.properties.hibernate.hbm2ddl.create_namespaces=true +jakarta.peristence.create-database-schemas=true + + +springdoc.swagger-ui.path=/swagger-ui.html +application-description=API Description +application-version=1.0 + +logging.level.org.springframework.web=DEBUG +logging.level.io.springfox=DEBUG \ No newline at end of file diff --git a/airports-service/pom.xml b/airports-service/pom.xml index 68f090dfed96957dd3d1baeb64f8df1eba14ceea..ab47c7569127ca4ca80c57b7ba0a165ad2f800cb 100644 --- a/airports-service/pom.xml +++ b/airports-service/pom.xml @@ -1,78 +1,94 @@ <?xml version="1.0" encoding="UTF-8"?> -<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> - <modelVersion>4.0.0</modelVersion> - <parent> - <artifactId>airpot-manager</artifactId> - <groupId>cz.fi.muni.pa165</groupId> - <version>1.0-SNAPSHOT</version> - </parent> +<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xmlns="http://maven.apache.org/POM/4.0.0" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> + <modelVersion>4.0.0</modelVersion> + <parent> + <artifactId>airpot-manager</artifactId> + <groupId>cz.muni.fi.pa165</groupId> + <version>1.0-SNAPSHOT</version> + </parent> - <groupId>cz.fi.muni.pa165</groupId> - <artifactId>airports-service</artifactId> - <version>1.0-SNAPSHOT</version> + <groupId>cz.muni.fi.pa165</groupId> + <artifactId>airports-service</artifactId> - <name>airports-service</name> - <!-- FIXME change it to the project's website --> - <url>http://www.example.com</url> + <properties> + <maven.compiler.source>17</maven.compiler.source> + <maven.compiler.target>17</maven.compiler.target> + <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> + </properties> + <dependencies> + <dependency> + <groupId>org.springframework</groupId> + <artifactId>spring-web</artifactId> + </dependency> + <dependency> + <groupId>${project.groupId}</groupId> + <artifactId>airport-manager-api</artifactId> + <version>${project.version}</version> + </dependency> + <!-- https://mvnrepository.com/artifact/org.springframework.data/spring-data-jpa --> + <dependency> + <groupId>org.springframework.boot</groupId> + <artifactId>spring-boot-starter-data-jpa</artifactId> + </dependency> + <dependency> + <groupId>org.springframework.boot</groupId> + <artifactId>spring-boot-starter-validation</artifactId> + </dependency> + <dependency> + <groupId>org.postgresql</groupId> + <artifactId>postgresql</artifactId> + <scope>runtime</scope> + </dependency> + <dependency> + <groupId>org.springframework.boot</groupId> + <artifactId>spring-boot-starter-data-jpa</artifactId> + </dependency> + <dependency> + <groupId>org.modelmapper</groupId> + <artifactId>modelmapper</artifactId> + <version>3.2.0</version> + </dependency> + <dependency> + <groupId>org.springframework.boot</groupId> + <artifactId>spring-boot-starter-actuator</artifactId> + </dependency> + <dependency> + <groupId>io.springfox</groupId> + <artifactId>springfox-swagger2</artifactId> + <version>${swagger.version}</version> + </dependency> + <dependency> + <groupId>io.springfox</groupId> + <artifactId>springfox-swagger-ui</artifactId> + <version>${swagger-ui.version}</version> + </dependency> + <dependency> + <groupId>io.springfox</groupId> + <artifactId>springfox-boot-starter</artifactId> + <version>${swagger.version}</version> + </dependency> + <dependency> + <groupId>io.micrometer</groupId> + <artifactId>micrometer-core</artifactId> + </dependency> - <properties> - <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> - <maven.compiler.source>17</maven.compiler.source> - <maven.compiler.target>17</maven.compiler.target> - </properties> + </dependencies> - <dependencies> - <dependency> - <groupId>junit</groupId> - <artifactId>junit</artifactId> - <version>${junit.version}</version> - <scope>test</scope> - </dependency> - </dependencies> - - <build> - <pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) --> - <plugins> - <!-- clean lifecycle, see https://maven.apache.org/ref/current/maven-core/lifecycles.html#clean_Lifecycle --> - <plugin> - <artifactId>maven-clean-plugin</artifactId> - <version>3.1.0</version> - </plugin> - <!-- default lifecycle, jar packaging: see https://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_jar_packaging --> - <plugin> - <artifactId>maven-resources-plugin</artifactId> - <version>3.0.2</version> - </plugin> - <plugin> - <artifactId>maven-compiler-plugin</artifactId> - <version>3.8.0</version> - </plugin> - <plugin> - <artifactId>maven-surefire-plugin</artifactId> - <version>2.22.1</version> - </plugin> - <plugin> - <artifactId>maven-jar-plugin</artifactId> - <version>3.0.2</version> - </plugin> - <plugin> - <artifactId>maven-install-plugin</artifactId> - <version>2.5.2</version> - </plugin> - <plugin> - <artifactId>maven-deploy-plugin</artifactId> - <version>2.8.2</version> - </plugin> - <!-- site lifecycle, see https://maven.apache.org/ref/current/maven-core/lifecycles.html#site_Lifecycle --> - <plugin> - <artifactId>maven-site-plugin</artifactId> - <version>3.7.1</version> - </plugin> - <plugin> - <artifactId>maven-project-info-reports-plugin</artifactId> - <version>3.0.0</version> - </plugin> - </plugins> - </pluginManagement> - </build> -</project> + <build> + <plugins> + <plugin> + <groupId>org.springframework.boot</groupId> + <artifactId>spring-boot-maven-plugin</artifactId> + </plugin> + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-deploy-plugin</artifactId> + <configuration> + <skip>true</skip> + </configuration> + </plugin> + </plugins> + </build> +</project> \ No newline at end of file diff --git a/airports-service/src/main/java/cz/fi/muni/pa165/App.java b/airports-service/src/main/java/cz/fi/muni/pa165/App.java deleted file mode 100644 index 9f961e35b4c10210447801fc18c3d98040c1d2e3..0000000000000000000000000000000000000000 --- a/airports-service/src/main/java/cz/fi/muni/pa165/App.java +++ /dev/null @@ -1,13 +0,0 @@ -package cz.fi.muni.pa165; - -/** - * Hello world! - * - */ -public class App -{ - public static void main( String[] args ) - { - System.out.println( "Hello World!" ); - } -} diff --git a/airports-hr-service/src/main/java/cz/fi/muni/pa165/hr/Application.java b/airports-service/src/main/java/cz/muni/fi/pa165/airport/Application.java similarity index 71% rename from airports-hr-service/src/main/java/cz/fi/muni/pa165/hr/Application.java rename to airports-service/src/main/java/cz/muni/fi/pa165/airport/Application.java index 174ae68bff498ef2ff3461167f9f59162edf6a62..e9850df50ad457ab0a563f0a286bdebd51300618 100644 --- a/airports-hr-service/src/main/java/cz/fi/muni/pa165/hr/Application.java +++ b/airports-service/src/main/java/cz/muni/fi/pa165/airport/Application.java @@ -1,12 +1,11 @@ -package cz.fi.muni.pa165.hr; +package cz.muni.fi.pa165.airport; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.boot.context.properties.ConfigurationPropertiesScan; @SpringBootApplication public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } -} \ No newline at end of file +} diff --git a/airports-service/src/main/java/cz/muni/fi/pa165/airport/Constants.java b/airports-service/src/main/java/cz/muni/fi/pa165/airport/Constants.java new file mode 100644 index 0000000000000000000000000000000000000000..6dcb1429d0ba9e356ab9d3570eb8aedd56f2c6c5 --- /dev/null +++ b/airports-service/src/main/java/cz/muni/fi/pa165/airport/Constants.java @@ -0,0 +1,7 @@ +package cz.muni.fi.pa165.airport; + +public class Constants { + + public static final String AIRPORT_SCHEMA = "airport"; + +} diff --git a/airports-service/src/main/java/cz/muni/fi/pa165/airport/SwaggerConfig.java b/airports-service/src/main/java/cz/muni/fi/pa165/airport/SwaggerConfig.java new file mode 100644 index 0000000000000000000000000000000000000000..cba41b5e286b4fb211283152f31a7af40f249c12 --- /dev/null +++ b/airports-service/src/main/java/cz/muni/fi/pa165/airport/SwaggerConfig.java @@ -0,0 +1,29 @@ +package cz.muni.fi.pa165.airport; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import springfox.documentation.builders.PathSelectors; +import springfox.documentation.builders.RequestHandlerSelectors; +import springfox.documentation.spi.DocumentationType; +import springfox.documentation.spring.web.plugins.Docket; +import springfox.documentation.swagger2.annotations.EnableSwagger2; + +@Configuration +@EnableSwagger2 +public class SwaggerConfig { + + @Bean + public Docket facadesV1Api() { + return createDocket() + .groupName("Airports") + .select() + .apis(RequestHandlerSelectors.basePackage( + cz.muni.fi.pa165.airport.rest.AirportController.class.getPackageName())) + .paths(PathSelectors.any()) + .build(); + } + + private Docket createDocket() { + return new Docket(DocumentationType.SWAGGER_2); + } +} \ No newline at end of file diff --git a/airports-service/src/main/java/cz/muni/fi/pa165/airport/dao/Airport.java b/airports-service/src/main/java/cz/muni/fi/pa165/airport/dao/Airport.java new file mode 100644 index 0000000000000000000000000000000000000000..31da2dbaf97c8d6fe86bd71d955790a75f37e079 --- /dev/null +++ b/airports-service/src/main/java/cz/muni/fi/pa165/airport/dao/Airport.java @@ -0,0 +1,24 @@ +package cz.muni.fi.pa165.airport.dao; + +import cz.muni.fi.pa165.airport.Constants; +import lombok.Data; + +import javax.persistence.*; +import java.util.UUID; + +@Data +@Entity +@Table(name = "airport", schema = Constants.AIRPORT_SCHEMA) +public class Airport { + + @Id + @GeneratedValue(strategy = GenerationType.AUTO) + private UUID id; + private String name; + private String capacity; + private Double landingPrice; + private Double longitude; + private Double latitude; + private String city; + private String country; +} diff --git a/airports-service/src/main/java/cz/muni/fi/pa165/airport/exception/AirportNotFoundException.java b/airports-service/src/main/java/cz/muni/fi/pa165/airport/exception/AirportNotFoundException.java new file mode 100644 index 0000000000000000000000000000000000000000..f8b41af38734ac73846955f1a38bd4367064bfd9 --- /dev/null +++ b/airports-service/src/main/java/cz/muni/fi/pa165/airport/exception/AirportNotFoundException.java @@ -0,0 +1,27 @@ +package cz.muni.fi.pa165.airport.exception; + +import org.springframework.http.HttpStatus; +import org.springframework.web.bind.annotation.ResponseStatus; + +@ResponseStatus(HttpStatus.NOT_FOUND) +public class AirportNotFoundException extends RuntimeException{ + public AirportNotFoundException() { + super(); + } + + public AirportNotFoundException(String message) { + super(message); + } + + public AirportNotFoundException(String message, Throwable cause) { + super(message, cause); + } + + public AirportNotFoundException(Throwable cause) { + super(cause); + } + + protected AirportNotFoundException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) { + super(message, cause, enableSuppression, writableStackTrace); + } +} diff --git a/airports-service/src/main/java/cz/muni/fi/pa165/airport/facade/AirportFacade.java b/airports-service/src/main/java/cz/muni/fi/pa165/airport/facade/AirportFacade.java new file mode 100644 index 0000000000000000000000000000000000000000..b6e0dc6aee1a7ff3c7567a0bb8711cb82fd5466a --- /dev/null +++ b/airports-service/src/main/java/cz/muni/fi/pa165/airport/facade/AirportFacade.java @@ -0,0 +1,40 @@ +package cz.muni.fi.pa165.airport.facade; + +import cz.muni.fi.pa165.airport.service.AirportService; +import cz.muni.fi.pa165.api.airport.Airport; +import cz.muni.fi.pa165.api.airport.requests.AirportRequest; +import lombok.AllArgsConstructor; +import org.modelmapper.ModelMapper; +import org.springframework.stereotype.Service; + +import java.util.List; +import java.util.UUID; + +@Service +@AllArgsConstructor +public class AirportFacade { + + private final AirportService airportService; + + private final ModelMapper modelMapper = new ModelMapper(); + + public Airport create(AirportRequest airportRequest) { + var result = airportService.create(modelMapper.map(airportRequest, cz.muni.fi.pa165.airport.dao.Airport.class)); + return modelMapper.map(result, Airport.class); + } + + public Airport get(UUID id) { + var result = airportService.get(id); + return modelMapper.map(result, Airport.class); + } + + public Airport update(UUID id, AirportRequest airportRequest) { + var result = airportService.update(id, modelMapper.map(airportRequest, cz.muni.fi.pa165.airport.dao.Airport.class)); + return modelMapper.map(result, Airport.class); + } + + public List<Airport> getByCountry(String country) { + var result = airportService.getByCountry(country); + return result.stream().map(p -> modelMapper.map(p, Airport.class)).toList(); + } +} diff --git a/airports-service/src/main/java/cz/muni/fi/pa165/airport/repository/AirportRepository.java b/airports-service/src/main/java/cz/muni/fi/pa165/airport/repository/AirportRepository.java new file mode 100644 index 0000000000000000000000000000000000000000..68adef86cde5cc0f016fe0245456dcb75f2d8fdd --- /dev/null +++ b/airports-service/src/main/java/cz/muni/fi/pa165/airport/repository/AirportRepository.java @@ -0,0 +1,11 @@ +package cz.muni.fi.pa165.airport.repository; + +import cz.muni.fi.pa165.airport.dao.Airport; +import org.springframework.data.repository.CrudRepository; + +import java.util.List; +import java.util.UUID; + +public interface AirportRepository extends CrudRepository<Airport, UUID> { + List<Airport> findByCountry(String country); +} diff --git a/airports-service/src/main/java/cz/muni/fi/pa165/airport/rest/AirportController.java b/airports-service/src/main/java/cz/muni/fi/pa165/airport/rest/AirportController.java new file mode 100644 index 0000000000000000000000000000000000000000..64bd6060d54241d901b43e1f98b02111be51cc9f --- /dev/null +++ b/airports-service/src/main/java/cz/muni/fi/pa165/airport/rest/AirportController.java @@ -0,0 +1,37 @@ +package cz.muni.fi.pa165.airport.rest; + +import cz.muni.fi.pa165.airport.facade.AirportFacade; +import cz.muni.fi.pa165.api.airport.Airport; +import cz.muni.fi.pa165.api.airport.requests.AirportRequest; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.List; +import java.util.UUID; + +@RestController +@RequiredArgsConstructor +public class AirportController { + + private AirportFacade airportFacade; + + @PostMapping("/airport") + public Airport create(@RequestBody AirportRequest request) { + return airportFacade.create(request); + } + + @GetMapping("/airport/{id}") + public Airport get(@PathVariable UUID id) { + return airportFacade.get(id); + } + + @PutMapping("/airport/{id}") + public Airport update(@PathVariable UUID id, @RequestBody AirportRequest request) { + return airportFacade.update(id, request); + } + + @GetMapping("/airport/country") + public List<Airport> getByLicence(@RequestParam String country) { + return airportFacade.getByCountry(country); + } +} diff --git a/airports-service/src/main/java/cz/muni/fi/pa165/airport/service/AirportService.java b/airports-service/src/main/java/cz/muni/fi/pa165/airport/service/AirportService.java new file mode 100644 index 0000000000000000000000000000000000000000..78274f9ec25bbf7af1eb6e33086a3bcb5d384e34 --- /dev/null +++ b/airports-service/src/main/java/cz/muni/fi/pa165/airport/service/AirportService.java @@ -0,0 +1,43 @@ +package cz.muni.fi.pa165.airport.service; + +import cz.muni.fi.pa165.airport.dao.Airport; +import cz.muni.fi.pa165.airport.exception.AirportNotFoundException; +import cz.muni.fi.pa165.airport.repository.AirportRepository; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; + +import java.util.List; +import java.util.UUID; + +@Service +@RequiredArgsConstructor +public class AirportService { + + private final AirportRepository airportRepository; + + public Airport create(Airport airport) { + return airportRepository.save(airport); + } + + public Airport get(UUID id) { + return airportRepository.findById(id).orElseThrow(AirportNotFoundException::new); + } + + public Airport update(UUID id, Airport airportUpdate) { + var airport = airportRepository.findById(id).orElseThrow(AirportNotFoundException::new); + if (airportUpdate.getCapacity() != null) { + airport.setCapacity(airportUpdate.getCapacity()); + } + if (airportUpdate.getLandingPrice() != null) { + airport.setLandingPrice(airportUpdate.getLandingPrice()); + } + if (airportUpdate.getName() != null) { + airport.setName(airportUpdate.getName()); + } + return airportRepository.save(airport); + } + + public List<Airport> getByCountry(String country) { + return airportRepository.findByCountry(country); + } +} diff --git a/airports-service/src/main/resources/application.properties b/airports-service/src/main/resources/application.properties new file mode 100644 index 0000000000000000000000000000000000000000..0e013ec7a6565ee630691c5186914a3d2a978e58 --- /dev/null +++ b/airports-service/src/main/resources/application.properties @@ -0,0 +1,17 @@ +spring.jpa.database-platform=org.hibernate.dialect.PostgreSQLDialect +spring.jpa.hibernate.ddl-auto=update +spring.jpa.generate-ddl=true +spring.datasource.driver-class-name=org.postgresql.Driver +spring.datasource.url=jdbc:postgresql://localhost:5432/airport-manager +spring.datasource.username=root +spring.datasource.password=123 +spring.jpa.properties.hibernate.hbm2ddl.create_namespaces=true +jakarta.peristence.create-database-schemas=true + + +springdoc.swagger-ui.path=/swagger-ui.html +application-description=API Description +application-version=1.0 + +logging.level.org.springframework.web=DEBUG +logging.level.io.springfox=DEBUG \ No newline at end of file diff --git a/airports-service/src/test/java/cz/fi/muni/pa165/AppTest.java b/airports-service/src/test/java/cz/muni/fi/pa165/airport/AppTest.java similarity index 88% rename from airports-service/src/test/java/cz/fi/muni/pa165/AppTest.java rename to airports-service/src/test/java/cz/muni/fi/pa165/airport/AppTest.java index 2ffc6e6f10f5d7219f355c1871a22f5d837cb30b..e1d71a49e34ac8d1406fff4416def14b64f9f431 100644 --- a/airports-service/src/test/java/cz/fi/muni/pa165/AppTest.java +++ b/airports-service/src/test/java/cz/muni/fi/pa165/airport/AppTest.java @@ -1,4 +1,4 @@ -package cz.fi.muni.pa165; +package cz.muni.fi.pa165.airport; import static org.junit.Assert.assertTrue; diff --git a/docker/docker-compose.yml b/docker/docker-compose.yml new file mode 100644 index 0000000000000000000000000000000000000000..7ecea3c3a080105c7a1252fe55687aa53b83c3cc --- /dev/null +++ b/docker/docker-compose.yml @@ -0,0 +1,21 @@ +--- +version: "3.3" +services: + adminer: + image: adminer + restart: unless-stopped + ports: + - 8099:8080 + + db: + image: postgres:10 + restart: unless-stopped + ports: + - 5432:5432 + environment: + POSTGRES_USER: root + POSTGRES_PASSWORD: 123 + POSTGRES_DB: mydb + volumes: + - ./data/db:/var/lib/postgresql/data + diff --git a/pom.xml b/pom.xml index 9580ff14340f64b8edb13c9dc0bc4b8c1f3762cd..995390cb6b4ef26bd49706f2cc44a27221ebbc7b 100644 --- a/pom.xml +++ b/pom.xml @@ -2,7 +2,7 @@ <project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/POM/4.0.0" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> - <groupId>cz.fi.muni.pa165</groupId> + <groupId>cz.muni.fi.pa165</groupId> <artifactId>airpot-manager</artifactId> <version>1.0-SNAPSHOT</version> <packaging>pom</packaging> @@ -11,14 +11,13 @@ <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> - <version>3.0.3</version> - <relativePath/> <!-- lookup parent from repository --> + <version>2.4.3</version> </parent> <modules> + <module>airports-hr-service</module> <module>airport-manager-api</module> <module>airports-service</module> - <module>airports-hr-service</module> <module>airports-planes-service</module> <module>airports-flight-service</module> </modules> @@ -30,6 +29,8 @@ <junit.version>4.13.2</junit.version> <lombok.version>1.18.30</lombok.version> <spring.version>6.1.4</spring.version> + <swagger.version>3.0.0</swagger.version> + <swagger-ui.version>2.10.5</swagger-ui.version> </properties> <dependencies> @@ -57,6 +58,21 @@ <groupId>org.springframework</groupId> <artifactId>spring-web</artifactId> </dependency> + <dependency> + <groupId>io.springfox</groupId> + <artifactId>springfox-swagger2</artifactId> + <version>${swagger.version}</version> + </dependency> + <dependency> + <groupId>io.springfox</groupId> + <artifactId>springfox-swagger-ui</artifactId> + <version>${swagger-ui.version}</version> + </dependency> + <dependency> + <groupId>io.springfox</groupId> + <artifactId>springfox-boot-starter</artifactId> + <version>${swagger.version}</version> + </dependency> </dependencies> <build> <pluginManagement>