From 6b77db166f65b7177bd1a40ce45962a6cb80e628 Mon Sep 17 00:00:00 2001 From: precious Date: Wed, 30 Mar 2022 22:54:00 +0100 Subject: [PATCH] ............ --- pom.xml | 5 + .../data/dto/EmployeeResponse.java | 19 --- .../dto/{ => request}/DepartmentRequest.java | 8 +- .../dto/{ => request}/EmployeeRequest.java | 2 +- .../{ => request}/MobileNumberRequest.java | 2 +- .../dto/request/QualificationRequest.java | 12 ++ .../data/dto/request/RoleRequest.java | 13 ++ .../{ => response}/DepartmentResponse.java | 5 +- .../data/dto/response/EmployeeResponse.java | 27 +++++ .../{ => response}/MobileNumberResponse.java | 2 +- .../data/model/Department.java | 8 +- .../data/model/Employee.java | 7 ++ .../data/model/Qualification.java | 2 +- .../employeemanagement/data/model/Role.java | 4 +- .../data/model/SchoolQualification.java | 9 ++ .../data/repository/DepartmentRepository.java | 7 +- .../service/EmployeeService.java | 8 +- .../service/EmployeeServiceImpl.java | 39 ++++-- .../departmentService/DepartmentService.java | 11 +- .../DepartmentServiceImpl.java | 57 +++++++-- .../mobileService/MobileNumberService.java | 7 +- .../MobileNumberServiceImpl.java | 7 +- .../web/controller/DepartmentController.java | 60 ++++++++++ .../web/controller/EmployeeController.java | 85 +++++++++++++- .../DepartmentAlreadyExistsException.java | 11 ++ .../EmployeeAlreadyExistsException.java | 2 +- src/main/resources/application-dev.properties | 12 ++ .../resources/application-test.properties | 12 ++ src/main/resources/application.properties | 20 ++-- .../service/EmployeeServiceTest.java | 111 ++++++++++-------- .../DepartmentServiceTest.java | 70 +++++++++++ .../controller/EmployeeControllerTest.java | 2 +- ...mentRequest$DepartmentRequestBuilder.class | Bin 1747 -> 0 bytes .../data/dto/DepartmentRequest.class | Bin 1535 -> 0 bytes .../data/dto/DepartmentResponse.class | Bin 622 -> 0 bytes ...oyeeResponse$EmployeeResponseBuilder.class | Bin 2933 -> 0 bytes .../data/dto/EmployeeResponse.class | Bin 2687 -> 0 bytes ...mentRequest$DepartmentRequestBuilder.class | Bin 0 -> 2248 bytes .../data/dto/request/DepartmentRequest.class | Bin 0 -> 1955 bytes ...ployeeRequest$EmployeeRequestBuilder.class | Bin 2293 -> 2341 bytes .../dto/{ => request}/EmployeeRequest.class | Bin 2030 -> 2062 bytes ...erRequest$MobileNumberRequestBuilder.class | Bin 1777 -> 1817 bytes .../{ => request}/MobileNumberRequest.class | Bin 1559 -> 1591 bytes ...nRequest$QualificationRequestBuilder.class | Bin 0 -> 1676 bytes .../dto/request/QualificationRequest.class | Bin 0 -> 1154 bytes .../RoleRequest$RoleRequestBuilder.class | Bin 0 -> 1844 bytes .../data/dto/request/RoleRequest.class | Bin 0 -> 1383 bytes .../dto/response/DepartmentResponse.class | Bin 0 -> 691 bytes ...oyeeResponse$EmployeeResponseBuilder.class | Bin 0 -> 4555 bytes .../data/dto/response/EmployeeResponse.class | Bin 0 -> 4270 bytes ...Response$MobileNumberResponseBuilder.class | Bin 2445 -> 2508 bytes .../{ => response}/MobileNumberResponse.class | Bin 2017 -> 2053 bytes .../model/Department$DepartmentBuilder.class | Bin 3282 -> 3168 bytes .../data/model/Department.class | Bin 3648 -> 3591 bytes .../data/model/Employee$EmployeeBuilder.class | Bin 4416 -> 5162 bytes .../data/model/Employee.class | Bin 6228 -> 7398 bytes .../Qualification$QualificationBuilder.class | Bin 2198 -> 2398 bytes .../data/model/Qualification.class | Bin 2035 -> 2235 bytes .../data/model/Role$RoleBuilder.class | Bin 2209 -> 2191 bytes .../employeemanagement/data/model/Role.class | Bin 2173 -> 2158 bytes .../data/model/SchoolQualification.class | Bin 0 -> 1506 bytes .../repository/DepartmentRepository.class | Bin 496 -> 796 bytes .../service/EmployeeService.class | Bin 2134 -> 2602 bytes .../service/EmployeeServiceImpl.class | Bin 9474 -> 11258 bytes .../departmentService/DepartmentService.class | Bin 910 -> 1097 bytes .../DepartmentServiceImpl.class | Bin 1730 -> 5521 bytes .../mobileService/MobileNumberService.class | Bin 419 -> 436 bytes .../MobileNumberServiceImpl.class | Bin 2621 -> 2663 bytes .../web/controller/DepartmentController.class | Bin 0 -> 4257 bytes .../web/controller/EmployeeController.class | Bin 5678 -> 9306 bytes .../DepartmentAlreadyExistsException.class | Bin 0 -> 691 bytes .../EmployeeAlreadyExistsException.class | Bin 512 -> 519 bytes target/classes/application-dev.properties | 12 ++ target/classes/application-test.properties | 12 ++ target/classes/application.properties | 20 ++-- .../service/EmployeeServiceTest.class | Bin 6596 -> 5663 bytes .../DepartmentServiceTest.class | Bin 0 -> 4301 bytes .../controller/EmployeeControllerTest.class | Bin 4831 -> 4849 bytes 78 files changed, 552 insertions(+), 138 deletions(-) delete mode 100644 src/main/java/africa/semicolon/employeemanagement/data/dto/EmployeeResponse.java rename src/main/java/africa/semicolon/employeemanagement/data/dto/{ => request}/DepartmentRequest.java (50%) rename src/main/java/africa/semicolon/employeemanagement/data/dto/{ => request}/EmployeeRequest.java (80%) rename src/main/java/africa/semicolon/employeemanagement/data/dto/{ => request}/MobileNumberRequest.java (87%) create mode 100644 src/main/java/africa/semicolon/employeemanagement/data/dto/request/QualificationRequest.java create mode 100644 src/main/java/africa/semicolon/employeemanagement/data/dto/request/RoleRequest.java rename src/main/java/africa/semicolon/employeemanagement/data/dto/{ => response}/DepartmentResponse.java (69%) create mode 100644 src/main/java/africa/semicolon/employeemanagement/data/dto/response/EmployeeResponse.java rename src/main/java/africa/semicolon/employeemanagement/data/dto/{ => response}/MobileNumberResponse.java (87%) create mode 100644 src/main/java/africa/semicolon/employeemanagement/data/model/SchoolQualification.java create mode 100644 src/main/java/africa/semicolon/employeemanagement/web/controller/DepartmentController.java create mode 100644 src/main/java/africa/semicolon/employeemanagement/web/exception/DepartmentAlreadyExistsException.java create mode 100644 src/main/resources/application-dev.properties create mode 100644 src/main/resources/application-test.properties create mode 100644 src/test/java/africa/semicolon/employeemanagement/service/departmentService/DepartmentServiceTest.java delete mode 100644 target/classes/africa/semicolon/employeemanagement/data/dto/DepartmentRequest$DepartmentRequestBuilder.class delete mode 100644 target/classes/africa/semicolon/employeemanagement/data/dto/DepartmentRequest.class delete mode 100644 target/classes/africa/semicolon/employeemanagement/data/dto/DepartmentResponse.class delete mode 100644 target/classes/africa/semicolon/employeemanagement/data/dto/EmployeeResponse$EmployeeResponseBuilder.class delete mode 100644 target/classes/africa/semicolon/employeemanagement/data/dto/EmployeeResponse.class create mode 100644 target/classes/africa/semicolon/employeemanagement/data/dto/request/DepartmentRequest$DepartmentRequestBuilder.class create mode 100644 target/classes/africa/semicolon/employeemanagement/data/dto/request/DepartmentRequest.class rename target/classes/africa/semicolon/employeemanagement/data/dto/{ => request}/EmployeeRequest$EmployeeRequestBuilder.class (67%) rename target/classes/africa/semicolon/employeemanagement/data/dto/{ => request}/EmployeeRequest.class (58%) rename target/classes/africa/semicolon/employeemanagement/data/dto/{ => request}/MobileNumberRequest$MobileNumberRequestBuilder.class (65%) rename target/classes/africa/semicolon/employeemanagement/data/dto/{ => request}/MobileNumberRequest.class (56%) create mode 100644 target/classes/africa/semicolon/employeemanagement/data/dto/request/QualificationRequest$QualificationRequestBuilder.class create mode 100644 target/classes/africa/semicolon/employeemanagement/data/dto/request/QualificationRequest.class create mode 100644 target/classes/africa/semicolon/employeemanagement/data/dto/request/RoleRequest$RoleRequestBuilder.class create mode 100644 target/classes/africa/semicolon/employeemanagement/data/dto/request/RoleRequest.class create mode 100644 target/classes/africa/semicolon/employeemanagement/data/dto/response/DepartmentResponse.class create mode 100644 target/classes/africa/semicolon/employeemanagement/data/dto/response/EmployeeResponse$EmployeeResponseBuilder.class create mode 100644 target/classes/africa/semicolon/employeemanagement/data/dto/response/EmployeeResponse.class rename target/classes/africa/semicolon/employeemanagement/data/dto/{ => response}/MobileNumberResponse$MobileNumberResponseBuilder.class (59%) rename target/classes/africa/semicolon/employeemanagement/data/dto/{ => response}/MobileNumberResponse.class (50%) create mode 100644 target/classes/africa/semicolon/employeemanagement/data/model/SchoolQualification.class create mode 100644 target/classes/africa/semicolon/employeemanagement/web/controller/DepartmentController.class create mode 100644 target/classes/africa/semicolon/employeemanagement/web/exception/DepartmentAlreadyExistsException.class create mode 100644 target/classes/application-dev.properties create mode 100644 target/classes/application-test.properties create mode 100644 target/test-classes/africa/semicolon/employeemanagement/service/departmentService/DepartmentServiceTest.class diff --git a/pom.xml b/pom.xml index 2c55b03..72b9192 100644 --- a/pom.xml +++ b/pom.xml @@ -31,6 +31,11 @@ json-patch 1.13 + + com.h2database + h2 + runtime + org.springframework.boot diff --git a/src/main/java/africa/semicolon/employeemanagement/data/dto/EmployeeResponse.java b/src/main/java/africa/semicolon/employeemanagement/data/dto/EmployeeResponse.java deleted file mode 100644 index a2e58b9..0000000 --- a/src/main/java/africa/semicolon/employeemanagement/data/dto/EmployeeResponse.java +++ /dev/null @@ -1,19 +0,0 @@ -package africa.semicolon.employeemanagement.data.dto; - -import lombok.*; - - -@Setter -@Getter -@Builder -@AllArgsConstructor -@NoArgsConstructor -public class EmployeeResponse { - private String firstName; - private String lastName; - private String email; - private int age; - private String departmentName; - private Integer employeeSalary; - private Boolean isSuspended; -} diff --git a/src/main/java/africa/semicolon/employeemanagement/data/dto/DepartmentRequest.java b/src/main/java/africa/semicolon/employeemanagement/data/dto/request/DepartmentRequest.java similarity index 50% rename from src/main/java/africa/semicolon/employeemanagement/data/dto/DepartmentRequest.java rename to src/main/java/africa/semicolon/employeemanagement/data/dto/request/DepartmentRequest.java index ccda2d6..6622c8c 100644 --- a/src/main/java/africa/semicolon/employeemanagement/data/dto/DepartmentRequest.java +++ b/src/main/java/africa/semicolon/employeemanagement/data/dto/request/DepartmentRequest.java @@ -1,5 +1,7 @@ -package africa.semicolon.employeemanagement.data.dto; +package africa.semicolon.employeemanagement.data.dto.request; +import africa.semicolon.employeemanagement.data.model.JobDepartment; +import africa.semicolon.employeemanagement.data.model.Level; import lombok.*; import javax.validation.constraints.NotNull; @@ -11,7 +13,7 @@ @NoArgsConstructor public class DepartmentRequest { @NotNull(message="Field can not be empty") - private String fieldName; + private JobDepartment fieldName; @NotNull(message="Field can not be empty") - private String level; + private Level level; } diff --git a/src/main/java/africa/semicolon/employeemanagement/data/dto/EmployeeRequest.java b/src/main/java/africa/semicolon/employeemanagement/data/dto/request/EmployeeRequest.java similarity index 80% rename from src/main/java/africa/semicolon/employeemanagement/data/dto/EmployeeRequest.java rename to src/main/java/africa/semicolon/employeemanagement/data/dto/request/EmployeeRequest.java index 8a642c4..61a8e24 100644 --- a/src/main/java/africa/semicolon/employeemanagement/data/dto/EmployeeRequest.java +++ b/src/main/java/africa/semicolon/employeemanagement/data/dto/request/EmployeeRequest.java @@ -1,4 +1,4 @@ -package africa.semicolon.employeemanagement.data.dto; +package africa.semicolon.employeemanagement.data.dto.request; import lombok.*; diff --git a/src/main/java/africa/semicolon/employeemanagement/data/dto/MobileNumberRequest.java b/src/main/java/africa/semicolon/employeemanagement/data/dto/request/MobileNumberRequest.java similarity index 87% rename from src/main/java/africa/semicolon/employeemanagement/data/dto/MobileNumberRequest.java rename to src/main/java/africa/semicolon/employeemanagement/data/dto/request/MobileNumberRequest.java index 7001e33..1c39d86 100644 --- a/src/main/java/africa/semicolon/employeemanagement/data/dto/MobileNumberRequest.java +++ b/src/main/java/africa/semicolon/employeemanagement/data/dto/request/MobileNumberRequest.java @@ -1,4 +1,4 @@ -package africa.semicolon.employeemanagement.data.dto; +package africa.semicolon.employeemanagement.data.dto.request; import lombok.AllArgsConstructor; import lombok.Getter; diff --git a/src/main/java/africa/semicolon/employeemanagement/data/dto/request/QualificationRequest.java b/src/main/java/africa/semicolon/employeemanagement/data/dto/request/QualificationRequest.java new file mode 100644 index 0000000..23dd716 --- /dev/null +++ b/src/main/java/africa/semicolon/employeemanagement/data/dto/request/QualificationRequest.java @@ -0,0 +1,12 @@ +package africa.semicolon.employeemanagement.data.dto.request; + +import lombok.*; + +@Builder +@AllArgsConstructor +@NoArgsConstructor +@Setter +@Getter +public class QualificationRequest { + private String qualificationName; +} diff --git a/src/main/java/africa/semicolon/employeemanagement/data/dto/request/RoleRequest.java b/src/main/java/africa/semicolon/employeemanagement/data/dto/request/RoleRequest.java new file mode 100644 index 0000000..b7df125 --- /dev/null +++ b/src/main/java/africa/semicolon/employeemanagement/data/dto/request/RoleRequest.java @@ -0,0 +1,13 @@ +package africa.semicolon.employeemanagement.data.dto.request; + +import lombok.*; + +@Builder +@AllArgsConstructor +@NoArgsConstructor +@Setter +@Getter +public class RoleRequest { + private Long employeeId; + private String position; +} diff --git a/src/main/java/africa/semicolon/employeemanagement/data/dto/DepartmentResponse.java b/src/main/java/africa/semicolon/employeemanagement/data/dto/response/DepartmentResponse.java similarity index 69% rename from src/main/java/africa/semicolon/employeemanagement/data/dto/DepartmentResponse.java rename to src/main/java/africa/semicolon/employeemanagement/data/dto/response/DepartmentResponse.java index 77da444..f557a77 100644 --- a/src/main/java/africa/semicolon/employeemanagement/data/dto/DepartmentResponse.java +++ b/src/main/java/africa/semicolon/employeemanagement/data/dto/response/DepartmentResponse.java @@ -1,12 +1,15 @@ -package africa.semicolon.employeemanagement.data.dto; +package africa.semicolon.employeemanagement.data.dto.response; import africa.semicolon.employeemanagement.data.model.Level; import africa.semicolon.employeemanagement.data.model.Role; +import java.time.LocalDateTime; + public class DepartmentResponse { private Long id; private String fieldName; private String description; private Level employeeJobLevel; private Role jobRole; + private LocalDateTime creationDate; } diff --git a/src/main/java/africa/semicolon/employeemanagement/data/dto/response/EmployeeResponse.java b/src/main/java/africa/semicolon/employeemanagement/data/dto/response/EmployeeResponse.java new file mode 100644 index 0000000..5b5cb72 --- /dev/null +++ b/src/main/java/africa/semicolon/employeemanagement/data/dto/response/EmployeeResponse.java @@ -0,0 +1,27 @@ +package africa.semicolon.employeemanagement.data.dto.response; + +import africa.semicolon.employeemanagement.data.model.Level; +import africa.semicolon.employeemanagement.data.model.Role; +import lombok.*; + +import java.time.LocalDateTime; + + +@Setter +@Getter +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class EmployeeResponse { + private Long id; + private String firstName; + private String lastName; + private String email; + private int age; + private String departmentName; + private Integer employeeSalary; + private Level employeeJobLevel; + private Role jobRole; + private Boolean isSuspended; + private LocalDateTime creationDate; +} diff --git a/src/main/java/africa/semicolon/employeemanagement/data/dto/MobileNumberResponse.java b/src/main/java/africa/semicolon/employeemanagement/data/dto/response/MobileNumberResponse.java similarity index 87% rename from src/main/java/africa/semicolon/employeemanagement/data/dto/MobileNumberResponse.java rename to src/main/java/africa/semicolon/employeemanagement/data/dto/response/MobileNumberResponse.java index 843e3c6..6333165 100644 --- a/src/main/java/africa/semicolon/employeemanagement/data/dto/MobileNumberResponse.java +++ b/src/main/java/africa/semicolon/employeemanagement/data/dto/response/MobileNumberResponse.java @@ -1,4 +1,4 @@ -package africa.semicolon.employeemanagement.data.dto; +package africa.semicolon.employeemanagement.data.dto.response; import lombok.AllArgsConstructor; diff --git a/src/main/java/africa/semicolon/employeemanagement/data/model/Department.java b/src/main/java/africa/semicolon/employeemanagement/data/model/Department.java index f1eb2c7..b826784 100644 --- a/src/main/java/africa/semicolon/employeemanagement/data/model/Department.java +++ b/src/main/java/africa/semicolon/employeemanagement/data/model/Department.java @@ -1,8 +1,10 @@ package africa.semicolon.employeemanagement.data.model; import lombok.*; +import org.hibernate.annotations.CreationTimestamp; import javax.persistence.*; +import java.time.LocalDateTime; import java.util.List; @Builder @@ -14,7 +16,7 @@ public class Department { @Id @GeneratedValue(strategy = GenerationType.AUTO) - private Integer id; + private Long id; @Column(unique = true) private JobDepartment fieldName; @@ -24,6 +26,6 @@ public class Department { @OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.PERSIST) private List employees; - @OneToOne(fetch = FetchType.EAGER, cascade = CascadeType.PERSIST) - private Role jobRole; + @CreationTimestamp + private LocalDateTime creationDate = LocalDateTime.now(); } diff --git a/src/main/java/africa/semicolon/employeemanagement/data/model/Employee.java b/src/main/java/africa/semicolon/employeemanagement/data/model/Employee.java index 0e37b5e..e316285 100644 --- a/src/main/java/africa/semicolon/employeemanagement/data/model/Employee.java +++ b/src/main/java/africa/semicolon/employeemanagement/data/model/Employee.java @@ -1,8 +1,10 @@ package africa.semicolon.employeemanagement.data.model; import lombok.*; +import org.hibernate.annotations.CreationTimestamp; import javax.persistence.*; +import java.time.LocalDateTime; import java.util.List; import java.util.Objects; @@ -32,8 +34,13 @@ public class Employee { @OneToOne(fetch = FetchType.EAGER, cascade = CascadeType.PERSIST) private Level employeeJobLevel; + @OneToOne(fetch = FetchType.EAGER, cascade = CascadeType.PERSIST) + private Role jobRole; + @OneToMany private List employeeQualifications; private Boolean isSuspended = false; + @CreationTimestamp + private LocalDateTime creationDate = LocalDateTime.now(); } diff --git a/src/main/java/africa/semicolon/employeemanagement/data/model/Qualification.java b/src/main/java/africa/semicolon/employeemanagement/data/model/Qualification.java index 802dd94..bc82b4a 100644 --- a/src/main/java/africa/semicolon/employeemanagement/data/model/Qualification.java +++ b/src/main/java/africa/semicolon/employeemanagement/data/model/Qualification.java @@ -19,7 +19,7 @@ public class Qualification { @Id @GeneratedValue(strategy = GenerationType.AUTO) private Long QualificationId; - private String qualificationName; + private SchoolQualification qualificationName; @CreationTimestamp private LocalDateTime dateSubmitted; } diff --git a/src/main/java/africa/semicolon/employeemanagement/data/model/Role.java b/src/main/java/africa/semicolon/employeemanagement/data/model/Role.java index 2e35103..84e9e42 100644 --- a/src/main/java/africa/semicolon/employeemanagement/data/model/Role.java +++ b/src/main/java/africa/semicolon/employeemanagement/data/model/Role.java @@ -18,8 +18,8 @@ public class Role { @Id @GeneratedValue(strategy = GenerationType.AUTO) - private Integer roleId; - private Integer employeeId; + private Long roleId; + private Long employeeId; private String position; @CreationTimestamp private LocalDateTime appointmentDate; diff --git a/src/main/java/africa/semicolon/employeemanagement/data/model/SchoolQualification.java b/src/main/java/africa/semicolon/employeemanagement/data/model/SchoolQualification.java new file mode 100644 index 0000000..72ce63d --- /dev/null +++ b/src/main/java/africa/semicolon/employeemanagement/data/model/SchoolQualification.java @@ -0,0 +1,9 @@ +package africa.semicolon.employeemanagement.data.model; + +public enum SchoolQualification { + BACHELORS_DEGREE, + POSTGRADUATE_DIPLOMA, + MASTERS_DEGREE, + DOCTORATE_DEGREE; + +} diff --git a/src/main/java/africa/semicolon/employeemanagement/data/repository/DepartmentRepository.java b/src/main/java/africa/semicolon/employeemanagement/data/repository/DepartmentRepository.java index b7ea653..e7b09c8 100644 --- a/src/main/java/africa/semicolon/employeemanagement/data/repository/DepartmentRepository.java +++ b/src/main/java/africa/semicolon/employeemanagement/data/repository/DepartmentRepository.java @@ -3,8 +3,13 @@ import africa.semicolon.employeemanagement.data.model.Department; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; +import org.springframework.transaction.annotation.Transactional; @Repository -public interface DepartmentRepository extends JpaRepository { +public interface DepartmentRepository extends JpaRepository { + Department findByFieldName(String fieldName); + + @Transactional + void deleteByFieldName(String departmentName); } diff --git a/src/main/java/africa/semicolon/employeemanagement/service/EmployeeService.java b/src/main/java/africa/semicolon/employeemanagement/service/EmployeeService.java index 7fbad7e..8a196a7 100644 --- a/src/main/java/africa/semicolon/employeemanagement/service/EmployeeService.java +++ b/src/main/java/africa/semicolon/employeemanagement/service/EmployeeService.java @@ -1,7 +1,9 @@ package africa.semicolon.employeemanagement.service; -import africa.semicolon.employeemanagement.data.dto.EmployeeRequest; -import africa.semicolon.employeemanagement.data.dto.EmployeeResponse; +import africa.semicolon.employeemanagement.data.dto.request.EmployeeRequest; +import africa.semicolon.employeemanagement.data.dto.request.QualificationRequest; +import africa.semicolon.employeemanagement.data.dto.request.RoleRequest; +import africa.semicolon.employeemanagement.data.dto.response.EmployeeResponse; import africa.semicolon.employeemanagement.data.model.Employee; import africa.semicolon.employeemanagement.web.exception.EmployeeAlreadyExistsException; import africa.semicolon.employeemanagement.web.exception.EmployeeDoesNotExistsException; @@ -20,6 +22,8 @@ public interface EmployeeService { EmployeeResponse updateEmployeeSalaryByJobLevel(Long employeeId) throws EmployeeDoesNotExistsException; Employee activateSuspendEmployeeByEmployeeId(Long employeeId) throws EmployeeDoesNotExistsException; Employee deactivateSuspendEmployeeByEmployeeId(Long employeeId) throws EmployeeDoesNotExistsException; + Employee setEmployeeRoleByEmployeeId(Long employeeId, RoleRequest request) throws EmployeeDoesNotExistsException; + Employee setEmployeeQualificationByEmployeeId(Long employeeId, QualificationRequest request) throws EmployeeDoesNotExistsException; Employee updateEmployee(String email, JsonPatch jsonpatch) throws EmployeeDoesNotExistsException, JsonPatchException, JsonProcessingException, EmployeeRequestException; String deleteAllEmployees(); String deleteEmployeeById(Long id); diff --git a/src/main/java/africa/semicolon/employeemanagement/service/EmployeeServiceImpl.java b/src/main/java/africa/semicolon/employeemanagement/service/EmployeeServiceImpl.java index e9c31d2..4244f23 100644 --- a/src/main/java/africa/semicolon/employeemanagement/service/EmployeeServiceImpl.java +++ b/src/main/java/africa/semicolon/employeemanagement/service/EmployeeServiceImpl.java @@ -1,11 +1,10 @@ package africa.semicolon.employeemanagement.service; -import africa.semicolon.employeemanagement.data.dto.EmployeeRequest; -import africa.semicolon.employeemanagement.data.dto.EmployeeResponse; -import africa.semicolon.employeemanagement.data.model.ConstantSalary; -import africa.semicolon.employeemanagement.data.model.Employee; -import africa.semicolon.employeemanagement.data.model.JobLevel; -import africa.semicolon.employeemanagement.data.model.Level; +import africa.semicolon.employeemanagement.data.dto.request.EmployeeRequest; +import africa.semicolon.employeemanagement.data.dto.request.QualificationRequest; +import africa.semicolon.employeemanagement.data.dto.request.RoleRequest; +import africa.semicolon.employeemanagement.data.dto.response.EmployeeResponse; +import africa.semicolon.employeemanagement.data.model.*; import africa.semicolon.employeemanagement.data.repository.EmployeeRepository; import africa.semicolon.employeemanagement.web.exception.EmployeeAlreadyExistsException; import africa.semicolon.employeemanagement.web.exception.EmployeeDoesNotExistsException; @@ -35,7 +34,7 @@ public EmployeeServiceImpl(EmployeeRepository employeeRepository, ModelMapper ma } @Override - public EmployeeResponse createEmployee(EmployeeRequest employeeDto) throws EmployeeAlreadyExistsException { + public EmployeeResponse createEmployee(EmployeeRequest employeeDto) { if(employeeDto == null) throw new IllegalArgumentException("Employee records can not be empty"); Optional foundEmployee = employeeRepository.findByEmail(employeeDto.getEmail()); @@ -102,6 +101,30 @@ public Employee deactivateSuspendEmployeeByEmployeeId(Long employeeId) throws Em return employee; } + @Override + public Employee setEmployeeRoleByEmployeeId(Long employeeId, RoleRequest request) throws EmployeeDoesNotExistsException { + Employee employee = employeeRepository.findById(employeeId).orElse(null); + if (employee == null) throw new EmployeeDoesNotExistsException("Employee with this "+ employeeId+" employee id does not exist"); + + Role role = mapper.map(request, Role.class); + return employee = Employee.builder() + .jobRole(role) + .build(); + } + + @Override + public Employee setEmployeeQualificationByEmployeeId(Long employeeId, QualificationRequest request) throws EmployeeDoesNotExistsException { + Employee employee = employeeRepository.findById(employeeId).orElse(null); + if (employee == null) throw new EmployeeDoesNotExistsException("Employee with this "+ employeeId+" employee id does not exist"); + + Qualification qualify = mapper.map(request, Qualification.class); + + List qualification = List.of(qualify); + return employee = Employee.builder() + .employeeQualifications(qualification) + .build(); + } + @Override public Employee updateEmployee(String email, JsonPatch jsonpatch) throws EmployeeDoesNotExistsException, JsonPatchException, JsonProcessingException, EmployeeRequestException { @@ -164,6 +187,4 @@ public Optional findEmployeeById(Long id) throws EmployeeDoesNotExists return found; } - - } diff --git a/src/main/java/africa/semicolon/employeemanagement/service/departmentService/DepartmentService.java b/src/main/java/africa/semicolon/employeemanagement/service/departmentService/DepartmentService.java index 854425a..b350681 100644 --- a/src/main/java/africa/semicolon/employeemanagement/service/departmentService/DepartmentService.java +++ b/src/main/java/africa/semicolon/employeemanagement/service/departmentService/DepartmentService.java @@ -1,18 +1,19 @@ package africa.semicolon.employeemanagement.service.departmentService; -import africa.semicolon.employeemanagement.data.dto.DepartmentRequest; -import africa.semicolon.employeemanagement.data.dto.DepartmentResponse; +import africa.semicolon.employeemanagement.data.dto.request.DepartmentRequest; +import africa.semicolon.employeemanagement.data.dto.response.DepartmentResponse; import africa.semicolon.employeemanagement.data.model.Department; import java.util.List; public interface DepartmentService { DepartmentResponse createDepartment(DepartmentRequest request); - Department updateDepartment(String departmentId); - String deleteDepartmentByDepartmentId(String departmentId); + Department updateDepartmentByDepartmentId(Long departmentId); + String deleteDepartmentByDepartmentId(Long departmentId); String deleteDepartmentByDepartmentName(String departmentName); + void deleteAllDepartments(); List findAllDepartment(); - Department findDepartmentById(String departmentId); + Department findDepartmentById(Long departmentId); Department findDepartmentByName(String departmentName); } diff --git a/src/main/java/africa/semicolon/employeemanagement/service/departmentService/DepartmentServiceImpl.java b/src/main/java/africa/semicolon/employeemanagement/service/departmentService/DepartmentServiceImpl.java index bfda35e..d1e6a55 100644 --- a/src/main/java/africa/semicolon/employeemanagement/service/departmentService/DepartmentServiceImpl.java +++ b/src/main/java/africa/semicolon/employeemanagement/service/departmentService/DepartmentServiceImpl.java @@ -1,45 +1,80 @@ package africa.semicolon.employeemanagement.service.departmentService; -import africa.semicolon.employeemanagement.data.dto.DepartmentRequest; -import africa.semicolon.employeemanagement.data.dto.DepartmentResponse; +import africa.semicolon.employeemanagement.data.dto.request.DepartmentRequest; +import africa.semicolon.employeemanagement.data.dto.response.DepartmentResponse; import africa.semicolon.employeemanagement.data.model.Department; +import africa.semicolon.employeemanagement.data.repository.DepartmentRepository; +import africa.semicolon.employeemanagement.web.exception.DepartmentAlreadyExistsException; +import org.modelmapper.ModelMapper; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; import java.util.List; +@Service public class DepartmentServiceImpl implements DepartmentService{ + private final DepartmentRepository departmentRepository; + private final ModelMapper mapper; + + @Autowired + public DepartmentServiceImpl(DepartmentRepository departmentRepository, ModelMapper mapper) { + this.departmentRepository = departmentRepository; + this.mapper = mapper; + } + @Override public DepartmentResponse createDepartment(DepartmentRequest request) { - return null; + Department dept = departmentRepository.findByFieldName(request.getFieldName().toString()); + if (dept != null) throw new DepartmentAlreadyExistsException("Department with this name "+request.getFieldName()+" already exists"); + Department requestDept = mapper.map(request, Department.class); + Department savedDept = departmentRepository.save(requestDept); + return mapper.map(savedDept, DepartmentResponse.class); } @Override - public Department updateDepartment(String departmentId) { + public Department updateDepartmentByDepartmentId(Long departmentId) { return null; } @Override - public String deleteDepartmentByDepartmentId(String departmentId) { - return null; + public String deleteDepartmentByDepartmentId(Long departmentId) { + Department dept = departmentRepository.findById(departmentId).orElseThrow( + ()-> new DepartmentAlreadyExistsException("Department with this id "+departmentId+" does not exists") + ); + departmentRepository.deleteById(departmentId); + return "Successfully Deleted"; } @Override public String deleteDepartmentByDepartmentName(String departmentName) { - return null; + Department dept = departmentRepository.findByFieldName(departmentName); + if(dept == null) throw new DepartmentAlreadyExistsException("Department with this id "+departmentName+" does not exists"); + departmentRepository.deleteByFieldName(departmentName); + return "Successfully Deleted"; + } + + @Override + public void deleteAllDepartments() { + departmentRepository.deleteAll(); } @Override public List findAllDepartment() { - return null; + return departmentRepository.findAll(); } @Override - public Department findDepartmentById(String departmentId) { - return null; + public Department findDepartmentById(Long departmentId) { + return departmentRepository.findById(departmentId).orElseThrow( + ()-> new DepartmentAlreadyExistsException("Department with this id "+departmentId+" does not exists") + ); } @Override public Department findDepartmentByName(String departmentName) { - return null; + Department dept = departmentRepository.findByFieldName(departmentName); + if(dept == null) throw new DepartmentAlreadyExistsException("Department with this id "+departmentName+" does not exists"); + return dept; } } diff --git a/src/main/java/africa/semicolon/employeemanagement/service/mobileService/MobileNumberService.java b/src/main/java/africa/semicolon/employeemanagement/service/mobileService/MobileNumberService.java index 8b9f1fa..8847423 100644 --- a/src/main/java/africa/semicolon/employeemanagement/service/mobileService/MobileNumberService.java +++ b/src/main/java/africa/semicolon/employeemanagement/service/mobileService/MobileNumberService.java @@ -1,10 +1,7 @@ package africa.semicolon.employeemanagement.service.mobileService; -import africa.semicolon.employeemanagement.data.dto.MobileNumberRequest; -import africa.semicolon.employeemanagement.data.dto.MobileNumberResponse; -import africa.semicolon.employeemanagement.data.model.MobileNumber; - -import java.util.List; +import africa.semicolon.employeemanagement.data.dto.request.MobileNumberRequest; +import africa.semicolon.employeemanagement.data.dto.response.MobileNumberResponse; public interface MobileNumberService { MobileNumberResponse addMobileNumber(MobileNumberRequest request); diff --git a/src/main/java/africa/semicolon/employeemanagement/service/mobileService/MobileNumberServiceImpl.java b/src/main/java/africa/semicolon/employeemanagement/service/mobileService/MobileNumberServiceImpl.java index 0e797cb..94fb13b 100644 --- a/src/main/java/africa/semicolon/employeemanagement/service/mobileService/MobileNumberServiceImpl.java +++ b/src/main/java/africa/semicolon/employeemanagement/service/mobileService/MobileNumberServiceImpl.java @@ -1,7 +1,7 @@ package africa.semicolon.employeemanagement.service.mobileService; -import africa.semicolon.employeemanagement.data.dto.MobileNumberRequest; -import africa.semicolon.employeemanagement.data.dto.MobileNumberResponse; +import africa.semicolon.employeemanagement.data.dto.request.MobileNumberRequest; +import africa.semicolon.employeemanagement.data.dto.response.MobileNumberResponse; import africa.semicolon.employeemanagement.data.model.MobileNumber; import africa.semicolon.employeemanagement.data.repository.MobileNumberRepository; import africa.semicolon.employeemanagement.web.exception.mobileNumberException.MobileNumberAlreadyExistException; @@ -10,9 +10,6 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; -import java.util.ArrayList; -import java.util.List; - @Service public class MobileNumberServiceImpl implements MobileNumberService{ diff --git a/src/main/java/africa/semicolon/employeemanagement/web/controller/DepartmentController.java b/src/main/java/africa/semicolon/employeemanagement/web/controller/DepartmentController.java new file mode 100644 index 0000000..d5313bc --- /dev/null +++ b/src/main/java/africa/semicolon/employeemanagement/web/controller/DepartmentController.java @@ -0,0 +1,60 @@ +package africa.semicolon.employeemanagement.web.controller; + +import africa.semicolon.employeemanagement.data.dto.request.DepartmentRequest; +import africa.semicolon.employeemanagement.data.dto.response.DepartmentResponse; +import africa.semicolon.employeemanagement.data.model.Department; +import africa.semicolon.employeemanagement.service.departmentService.DepartmentService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; + +@RestController +@RequestMapping("/api/department") +public class DepartmentController { + + private final DepartmentService departmentService; + + @Autowired + public DepartmentController(DepartmentService departmentService) { + this.departmentService = departmentService; + } + + @PostMapping + public ResponseEntity createDepartment(DepartmentRequest request){ + DepartmentResponse response = departmentService.createDepartment(request); + return ResponseEntity.ok().body(response); + } + + @PatchMapping(value = "/{departmentId}") + public ResponseEntity updateDepartment(@PathVariable Long departmentId){ + Department department = departmentService.updateDepartmentByDepartmentId(departmentId); + return ResponseEntity.ok().body(department); + } + + @DeleteMapping(path ="/{id}") + public ResponseEntity deleteDepartmentByDepartmentId(@PathVariable Long id){ + String dept = departmentService.deleteDepartmentByDepartmentId(id); + return ResponseEntity.ok().body(dept); + } + + @DeleteMapping(path ="/{departmentName}") + public ResponseEntity deleteDepartmentByDepartmentId(@PathVariable String departmentName){ + String dept = departmentService.deleteDepartmentByDepartmentName(departmentName); + return ResponseEntity.ok().body(dept); + } + + @GetMapping + public ResponseEntity findAllDepartment(){ + return ResponseEntity.ok().body(departmentService.findAllDepartment()); + } + + @GetMapping("/{departmentId}") + public ResponseEntity findDepartmentById(@PathVariable Long departmentId){ + return ResponseEntity.ok().body(departmentService.findDepartmentById(departmentId)); + } + + @GetMapping("/{departmentName}") + public ResponseEntity findDepartmentById(@PathVariable String departmentName){ + return ResponseEntity.ok().body(departmentService.findDepartmentByName(departmentName)); + } +} diff --git a/src/main/java/africa/semicolon/employeemanagement/web/controller/EmployeeController.java b/src/main/java/africa/semicolon/employeemanagement/web/controller/EmployeeController.java index 3982c28..ec12cc9 100644 --- a/src/main/java/africa/semicolon/employeemanagement/web/controller/EmployeeController.java +++ b/src/main/java/africa/semicolon/employeemanagement/web/controller/EmployeeController.java @@ -1,7 +1,9 @@ package africa.semicolon.employeemanagement.web.controller; -import africa.semicolon.employeemanagement.data.dto.EmployeeRequest; -import africa.semicolon.employeemanagement.data.dto.EmployeeResponse; +import africa.semicolon.employeemanagement.data.dto.request.EmployeeRequest; +import africa.semicolon.employeemanagement.data.dto.request.QualificationRequest; +import africa.semicolon.employeemanagement.data.dto.request.RoleRequest; +import africa.semicolon.employeemanagement.data.dto.response.EmployeeResponse; import africa.semicolon.employeemanagement.data.model.Employee; import africa.semicolon.employeemanagement.service.EmployeeService; import africa.semicolon.employeemanagement.web.exception.EmployeeAlreadyExistsException; @@ -20,11 +22,15 @@ @CrossOrigin("*") @RestController -@RequestMapping("/api/employee/") +@RequestMapping("/api/employee") public class EmployeeController { + private final EmployeeService employeeService; + @Autowired - EmployeeService employeeService; + public EmployeeController(EmployeeService employeeService) { + this.employeeService = employeeService; + } @PostMapping("/create") public ResponseEntity createNewEmployee(@RequestBody EmployeeRequest employeeRequest){ @@ -68,7 +74,7 @@ public ResponseEntity deleteEmployeeRecord(@PathVariable Long id){ } @GetMapping("/single/{id}") - public ResponseEntity getSingleEmployee(@PathVariable Long id) throws EmployeeDoesNotExistsException { + public ResponseEntity getSingleEmployee(@PathVariable Long id) { try{ Optional employee = employeeService.findEmployeeById(id); return ResponseEntity.ok().body(employee); @@ -76,4 +82,73 @@ public ResponseEntity getSingleEmployee(@PathVariable Long id) throws Employe return ResponseEntity.badRequest().body(e.getMessage()); } } + + @GetMapping(value="/{departmentName}") + public ResponseEntity findEmployeeByDepartmentName(@PathVariable String departmentName){ try { + Optional employee = employeeService.findEmployeeByDepartmentName(departmentName); + return ResponseEntity.ok().body(employee); + } catch (EmployeeDoesNotExistsException e) { + return ResponseEntity.status(HttpStatus.NOT_FOUND).body(e.getMessage()); + } + } + + @PostMapping(value="/{employeeId}") + public ResponseEntity setEmployeeSalaryByJobLevel(@PathVariable Long employeeId){ + try{ + EmployeeResponse response = employeeService.setEmployeeSalaryByJobLevel(employeeId); + return ResponseEntity.ok().body(response); + }catch (EmployeeDoesNotExistsException e){ + return ResponseEntity.status(HttpStatus.NOT_FOUND).body(e.getMessage()); + } + } + + @PatchMapping(value = "/updateSalary/{employeeId}") + public ResponseEntity updateEmployeeSalaryByJobLevel(@PathVariable Long employeeId){ + try{ + EmployeeResponse response = employeeService.updateEmployeeSalaryByJobLevel(employeeId); + return ResponseEntity.ok().body(response); + }catch (EmployeeDoesNotExistsException e){ + return ResponseEntity.status(HttpStatus.NOT_FOUND).body(e.getMessage()); + } + } + + @PatchMapping(value = "/activate/{employeeId}") + public ResponseEntity activateSuspendEmployeeByEmployeeId(@PathVariable Long employeeId){ + try{ + Employee employee = employeeService.activateSuspendEmployeeByEmployeeId(employeeId); + return ResponseEntity.ok().body(employee); + }catch (EmployeeDoesNotExistsException e){ + return ResponseEntity.status(HttpStatus.NOT_FOUND).body(e.getMessage()); + } + } + + @PatchMapping(value = "/deactivate/{employeeId}") + public ResponseEntity deactivateSuspendEmployeeByEmployeeId(@PathVariable Long employeeId){ + try{ + Employee employee = employeeService.deactivateSuspendEmployeeByEmployeeId(employeeId); + return ResponseEntity.ok().body(employee); + }catch (EmployeeDoesNotExistsException e){ + return ResponseEntity.status(HttpStatus.NOT_FOUND).body(e.getMessage()); + } + } + + @PostMapping(value = "/employee_role/{employeeId}") + public ResponseEntity setEmployeeRoleByEmployeeId(@PathVariable Long employeeId, @RequestBody RoleRequest request){ + try{ + Employee employee = employeeService.setEmployeeRoleByEmployeeId(employeeId, request); + return ResponseEntity.ok().body(employee); + }catch (EmployeeDoesNotExistsException e){ + return ResponseEntity.status(HttpStatus.NOT_FOUND).body(e.getMessage()); + } + } + + @PostMapping(value = "/employee_qualification/{employeeId}") + public ResponseEntity setEmployeeQualificationByEmployeeId(@PathVariable Long employeeId, @RequestBody QualificationRequest request){ + try{ + Employee employee = employeeService.setEmployeeQualificationByEmployeeId(employeeId, request); + return ResponseEntity.ok().body(employee); + }catch (EmployeeDoesNotExistsException e){ + return ResponseEntity.status(HttpStatus.NOT_FOUND).body(e.getMessage()); + } + } } diff --git a/src/main/java/africa/semicolon/employeemanagement/web/exception/DepartmentAlreadyExistsException.java b/src/main/java/africa/semicolon/employeemanagement/web/exception/DepartmentAlreadyExistsException.java new file mode 100644 index 0000000..1aee83a --- /dev/null +++ b/src/main/java/africa/semicolon/employeemanagement/web/exception/DepartmentAlreadyExistsException.java @@ -0,0 +1,11 @@ +package africa.semicolon.employeemanagement.web.exception; + +import org.springframework.http.HttpStatus; +import org.springframework.web.bind.annotation.ResponseStatus; + +@ResponseStatus(HttpStatus.NOT_FOUND) +public class DepartmentAlreadyExistsException extends RuntimeException{ + public DepartmentAlreadyExistsException(String message) { + super(message); + } +} diff --git a/src/main/java/africa/semicolon/employeemanagement/web/exception/EmployeeAlreadyExistsException.java b/src/main/java/africa/semicolon/employeemanagement/web/exception/EmployeeAlreadyExistsException.java index b5d2871..58cb17e 100644 --- a/src/main/java/africa/semicolon/employeemanagement/web/exception/EmployeeAlreadyExistsException.java +++ b/src/main/java/africa/semicolon/employeemanagement/web/exception/EmployeeAlreadyExistsException.java @@ -1,6 +1,6 @@ package africa.semicolon.employeemanagement.web.exception; -public class EmployeeAlreadyExistsException extends Throwable { +public class EmployeeAlreadyExistsException extends RuntimeException { public EmployeeAlreadyExistsException(String message) { super(message); } diff --git a/src/main/resources/application-dev.properties b/src/main/resources/application-dev.properties new file mode 100644 index 0000000..273cfeb --- /dev/null +++ b/src/main/resources/application-dev.properties @@ -0,0 +1,12 @@ +APPNAME=employeeManagementSystem +PORT=8080 + +SQl_PLATFORM=mysql +SQL_PASSWORD=admin +SQL_URL=jdbc:mysql://localhost:3306/employeeManagement_db +SQL_USERNAME=admin + +# Hibernate +JPA_PROPERTIES_DIALECT=org.hibernate.dialect.MySQL5InnoDBDialect +JPA_HIBERNATE_AUTO=update +JPA_SHOW_SQL=true \ No newline at end of file diff --git a/src/main/resources/application-test.properties b/src/main/resources/application-test.properties new file mode 100644 index 0000000..7c27788 --- /dev/null +++ b/src/main/resources/application-test.properties @@ -0,0 +1,12 @@ +APPNAME=employeeManagementSystem +PORT=8080 + +SQL_PLATFORM=h2 +SQL_PASSWORD=admin +SQL_URL=jdbc:h2:mem:testdb +SQL_USERNAME=sa + +# Hibernate +JPA_PROPERTIES_DIALECT=org.hibernate.dialect.H2Dialect +JPA_HIBERNATE_AUTO=create-drop +JPA_SHOW_SQL=true \ No newline at end of file diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index da1f70e..c713b9b 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -1,8 +1,14 @@ -test.property.name=employeeManagementSystem -spring.datasource.url=jdbc:mysql://localhost:3306/employeeManagement_db -spring.datasource.username=admin -spring.datasource.password=admin -#spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver -spring.jpa.properties.dialect=org.hibernate.dialect.MySQLDialect +spring.application.name=${APPNAME} +server.port=${PORT} +spring.profiles.active=${PROFILE:dev} -spring.jpa.hibernate.ddl-auto=update \ No newline at end of file +#datasource +spring.sql.init.platform=${SQL_PLATFORM} +spring.datasource.password=${SQL_PASSWORD} +spring.datasource.username=${SQL_USERNAME} +spring.datasource.url=${SQL_URL} + +#hibernate +spring.jpa.properties.hibernate.dialect=${JPA_PROPERTIES_DIALECT} +spring.jpa.hibernate.ddl-auto=${JPA_HIBERNATE_AUTO} +spring.jpa.show-sql=${JPA_SHOW_SQL} \ No newline at end of file diff --git a/src/test/java/africa/semicolon/employeemanagement/service/EmployeeServiceTest.java b/src/test/java/africa/semicolon/employeemanagement/service/EmployeeServiceTest.java index 7b0f8bc..1a853d0 100644 --- a/src/test/java/africa/semicolon/employeemanagement/service/EmployeeServiceTest.java +++ b/src/test/java/africa/semicolon/employeemanagement/service/EmployeeServiceTest.java @@ -1,8 +1,8 @@ package africa.semicolon.employeemanagement.service; -import africa.semicolon.employeemanagement.data.dto.EmployeeRequest; -import africa.semicolon.employeemanagement.data.dto.EmployeeResponse; -import africa.semicolon.employeemanagement.data.model.Employee; +import africa.semicolon.employeemanagement.data.dto.request.EmployeeRequest; +import africa.semicolon.employeemanagement.data.dto.response.EmployeeResponse; +import africa.semicolon.employeemanagement.data.model.*; import africa.semicolon.employeemanagement.web.exception.EmployeeAlreadyExistsException; import africa.semicolon.employeemanagement.web.exception.EmployeeDoesNotExistsException; import lombok.extern.slf4j.Slf4j; @@ -13,8 +13,10 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.ActiveProfiles; import org.springframework.test.context.jdbc.Sql; +import java.util.List; import java.util.Optional; import static org.assertj.core.api.AssertionsForClassTypes.assertThat; @@ -22,29 +24,26 @@ @SpringBootTest @Slf4j -@Sql(scripts={"/db/insert.sql"}) +@ActiveProfiles("test") class EmployeeServiceTest { @Autowired @Qualifier("initialService") EmployeeService employeeService; - EmployeeResponse employeeDtoOne; - EmployeeResponse employeeDtoTwo; + EmployeeResponse res; + EmployeeRequest employeeDtoOne; @BeforeEach void setUp() { - employeeDtoOne = new EmployeeResponse(); - employeeDtoOne.setFirstName("Jada"); - employeeDtoOne.setLastName("Godson"); - employeeDtoOne.setEmail("jada@gmail.com"); - employeeDtoOne.setAge(1); - - employeeDtoTwo = new EmployeeResponse(); - employeeDtoTwo.setFirstName("Jahzeal"); - employeeDtoTwo.setLastName("Chiemerie"); - employeeDtoTwo.setEmail("jahzeal@gmail.com"); - employeeDtoTwo.setAge(3); + employeeDtoOne = EmployeeRequest.builder() + .firstName("Jahzeal") + .lastName("Chiemerie") + .email("jahzeal@gmail.com") + .age(3) + .build(); + + res = employeeService.createEmployee(employeeDtoOne); } @@ -57,27 +56,29 @@ void tearDown(){ @Test @DisplayName("Employee can create an account") void createEmployee() throws EmployeeAlreadyExistsException { - EmployeeRequest employeeDtoThree = new EmployeeRequest(); - employeeDtoThree.setFirstName("Love"); - employeeDtoThree.setLastName("Godson"); - employeeDtoThree.setEmail("love@gmail.com"); - employeeDtoThree.setAge(25); + EmployeeRequest employeeDtoThree = EmployeeRequest.builder() + .firstName("zeal") + .lastName("emerie") + .email("zeal@gmail.com") + .age(3) + .build(); assertThat(employeeDtoThree).isNotNull(); EmployeeResponse employee = employeeService.createEmployee(employeeDtoThree); log.info("Employee created is :: {}", employee); - assertThat(employee.getFirstName()).isEqualTo("Love"); - assertThat(employee.getLastName()).isEqualTo("Godson"); - assertThat(employee.getEmail()).isEqualTo("love@gmail.com"); - assertThat(employee.getAge()).isEqualTo(25); + assertThat(employee.getFirstName()).isEqualTo("zeal"); + assertThat(employee.getLastName()).isEqualTo("emerie"); + assertThat(employee.getEmail()).isEqualTo("zeal@gmail.com"); + assertThat(employee.getAge()).isEqualTo(3); } @Test void getAllEmployees() { - employeeService.findAllEmployee(); + List emp = employeeService.findAllEmployee(); + assertThat(emp.size()).isEqualTo(1); } @Test @@ -86,38 +87,54 @@ void updateEmployee() { } @Test - void deleteAllEmployees() { + void deleteAllEmployees() throws EmployeeAlreadyExistsException { + EmployeeRequest employeeDtoThree = EmployeeRequest.builder() + .firstName("zeal") + .lastName("emerie") + .email("zeal@gmail.com") + .age(3) + .build(); + + assertThat(employeeDtoThree).isNotNull(); + + EmployeeResponse employee = employeeService.createEmployee(employeeDtoThree); + log.info("Employee created is :: {}", employee); + + assertThat(employee.getFirstName()).isEqualTo("zeal"); + assertThat(employee.getLastName()).isEqualTo("emerie"); + assertThat(employee.getEmail()).isEqualTo("zeal@gmail.com"); + assertThat(employee.getAge()).isEqualTo(3); + employeeService.deleteAllEmployees(); assertEquals(0,employeeService.findAllEmployee().size()); } @Test - void deleteEmployeeById() throws EmployeeDoesNotExistsException { - Employee employee = new Employee(); - - employee = employeeService.findEmployeeByEmail("precious@gmail.com").orElse(null); + void deleteEmployeeById() throws EmployeeDoesNotExistsException, EmployeeAlreadyExistsException { + EmployeeRequest employeeDtoThree = EmployeeRequest.builder() + .firstName("zeal") + .lastName("emerie") + .email("zeal@gmail.com") + .age(3) + .build(); - assert employee != null; - assertThat(employee.getFirstName()).isEqualTo("Precious"); - assertThat(employee.getLastName()).isEqualTo("Lois"); - assertThat(employee.getId()).isEqualTo(1L); + assertThat(employeeDtoThree).isNotNull(); - employeeService.deleteEmployeeById(1L); - assertThrows(EmployeeDoesNotExistsException.class, ()->employeeService.findEmployeeByEmail("precious@gmail.com")); + EmployeeResponse employee = employeeService.createEmployee(employeeDtoThree); + log.info("Employee created is :: {}", employee); - Optional emp = employeeService.findEmployeeById(1L); - assertEquals(true, employeeService.findEmployeeById(1L).equals("null")); + assertThat(employee.getFirstName()).isEqualTo("zeal"); + assertThat(employee.getEmail()).isEqualTo(employeeDtoThree.getEmail()); + employeeService.deleteEmployeeById(employee.getId()); + assertThat(employeeService.findAllEmployee().size()).isEqualTo(1); } @Test void findEmployeeByEmail() throws EmployeeDoesNotExistsException { - Employee employee = new Employee(); - - employee = employeeService.findEmployeeByEmail("precious@gmail.com").orElse(null); - - assert employee != null; - assertThat(employee.getFirstName()).isEqualTo("Precious"); - assertThat(employee.getLastName()).isEqualTo("Lois"); + Employee employee = employeeService.findEmployeeByEmail(res.getEmail()).orElse(null); + assertThat(employee).isNotNull(); + assertThat(employee.getFirstName()).isEqualTo(res.getFirstName()); + assertThat(employee.getLastName()).isEqualTo(res.getLastName()); } } \ No newline at end of file diff --git a/src/test/java/africa/semicolon/employeemanagement/service/departmentService/DepartmentServiceTest.java b/src/test/java/africa/semicolon/employeemanagement/service/departmentService/DepartmentServiceTest.java new file mode 100644 index 0000000..7711ba2 --- /dev/null +++ b/src/test/java/africa/semicolon/employeemanagement/service/departmentService/DepartmentServiceTest.java @@ -0,0 +1,70 @@ +package africa.semicolon.employeemanagement.service.departmentService; + +import africa.semicolon.employeemanagement.data.dto.request.DepartmentRequest; +import africa.semicolon.employeemanagement.data.dto.response.DepartmentResponse; +import africa.semicolon.employeemanagement.data.model.JobDepartment; +import africa.semicolon.employeemanagement.data.model.JobLevel; +import africa.semicolon.employeemanagement.data.model.Level; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.ActiveProfiles; + +import static org.assertj.core.api.Assertions.assertThat; + +@SpringBootTest +@ActiveProfiles("test") +class DepartmentServiceTest { + + private final DepartmentService departmentService; + + @Autowired + DepartmentServiceTest(DepartmentService departmentService) { + this.departmentService = departmentService; + } + + DepartmentRequest departmentRequest; + Level level; + @BeforeEach + void setUp() { + level = Level.builder() + .jobLevel(JobLevel.ENTRY_LEVEL) + .build(); + + departmentRequest = DepartmentRequest.builder() + .fieldName(JobDepartment.FINANCE) + .level(level) + .build(); + } + + @AfterEach + void tearDown() { + departmentService.deleteAllDepartments(); + } + + @Test + void updateDepartmentByDepartmentId() { + } + + @Test + void deleteDepartmentByDepartmentId() { + } + + @Test + void deleteDepartmentByDepartmentName() { + } + + @Test + void findAllDepartment() { + } + + @Test + void findDepartmentById() { + } + + @Test + void findDepartmentByName() { + } +} \ No newline at end of file diff --git a/src/test/java/africa/semicolon/employeemanagement/web/controller/EmployeeControllerTest.java b/src/test/java/africa/semicolon/employeemanagement/web/controller/EmployeeControllerTest.java index a64e2ee..3e56de4 100644 --- a/src/test/java/africa/semicolon/employeemanagement/web/controller/EmployeeControllerTest.java +++ b/src/test/java/africa/semicolon/employeemanagement/web/controller/EmployeeControllerTest.java @@ -1,6 +1,6 @@ package africa.semicolon.employeemanagement.web.controller; -import africa.semicolon.employeemanagement.data.dto.EmployeeResponse; +import africa.semicolon.employeemanagement.data.dto.response.EmployeeResponse; import africa.semicolon.employeemanagement.data.repository.EmployeeRepository; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; diff --git a/target/classes/africa/semicolon/employeemanagement/data/dto/DepartmentRequest$DepartmentRequestBuilder.class b/target/classes/africa/semicolon/employeemanagement/data/dto/DepartmentRequest$DepartmentRequestBuilder.class deleted file mode 100644 index 0199913bbcfb2f08df614dc11e1c5d9386199c23..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1747 zcmcIkZBG+H5Pr7w-9pcby!e8sMcRU#?-C2dP(v`OXoNtBpSJA+2Y0viZcD;H@n>j) zA;H8S;EyuS_A1m|Atc0HZg+NW=9!u2X7<v6`-EY!aM{3APg2RCs~83eFVt%c=~dbC>SD># zv=4=vc1F7p&I+~kvh--OrTNEk?Vu@on1AZB4~DB7lG&$H?A_RP++B17h_>k6-8bKe*AYe&xVPv9xTM2NIrTqN+E zVeEWUy4V8ZaF_0q2u*Q>9=g@q5?w5`$J%ck45K8Ov@@+K9f5r#A%YvU>d!y|H)+iT z2DpXWbYcWIMpoLn+=eH+($sfazLF~JK14bV6}W3j=fiM^v@wll&>`C!v;V@Fy0#O{ zY#Vc&NC=92g(yjY@dL(Y>5x)AME?>24E)77#&zI4lz|RP m6nXNCU;+=?yMamClY~~FcLtB>l%wxS%KR}>c!Fnmfzdxyi^Sdl diff --git a/target/classes/africa/semicolon/employeemanagement/data/dto/DepartmentRequest.class b/target/classes/africa/semicolon/employeemanagement/data/dto/DepartmentRequest.class deleted file mode 100644 index e320b7145aa058eed10e7a55723ddcabbf0430f7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1535 zcmbtUe@_!Z5Pe(PUR#PS2nZ@#6`?J}`(FrAF(f8X4Uih+U)y#mOYR5WZHassWP=5cnt$BHfg3tbE-Jy)bZ) zO8GL7ZRM-LxGia<+cKg1RvpX8Sl_Pt(owNl9P+&BXs@NB90Zbiq>vU!uj@dY4S}(8 zrJh9wSqHg1#*r7;xLtjL?15HZt0sLVFtvRoPo(R~pzZFNNC)jTTkcLC1zRiSsT1Yp zFo~ptDS_f;^!vtY{&jPo$@*2%T<|FH9tL zU}Coxnp(&6)&v}1#WA%LnBB7EN=+G*2vlmQ64f=Q0t{}ooE7K+4Q+B32EN!K36%U)ztIJ5+w0>^V9BS(I z>Xy7ouehVkVc7a0BhJ^Th^QG7+qQEg$MyinX)1L&(f<6Iz^H!0@`x^mQ*2+ky|5EC z)t0te%nohx7q*VTc#TJ3M_Jj(EdMSDRJ7^II97a|8_Mb*4LsqVoa7ly@W(^I^)8>r zd19vdpNTPxdvr`d(0}1d*iC%HSO;0mVV-FB2~=X1y)wTbKAmIi8}9`ka81(!4%dfR zV3du1No(WN)s-_i-+7m~5}UyzdS-hOcuZ`2rMrCyb_S%V3yOq%IvR4~rjWMX3&=tj z@);KCvMgO%%RN>70mn9UmE@f+Nt?}pK1qS+BagpMWy2^E7O1;nvp$dJWnBE_!l`L!bL6HtC8$X#`2YY0t>#B{9pgD$Rq9ss9g*HhT PfhzCp$Cw8JE6Dx>==epf diff --git a/target/classes/africa/semicolon/employeemanagement/data/dto/DepartmentResponse.class b/target/classes/africa/semicolon/employeemanagement/data/dto/DepartmentResponse.class deleted file mode 100644 index 3a7d38647e960a322c195f99e1e32b32cded6b4a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 622 zcmb7CO-lnY5PjKx*$-{4-$!ri!JPDBQAF_|ONCZ?&+blZ%5GA2(}F+CliM$;^9UlDGGlR{%ZiHQ=FCL%D?tssf#FM29xEMp811?ITg5jG9nF#>q%IB_n6$HO*A&^1T6NGix#u@N~pp z{+tZ(wMqwr>0@re!5skA|gv3>C8+% zw?Cpkqn&|ahR*Z{^hb5NE6GBMos4HP;lpWHdwb74x3}8WzyH1b2f%H#^T^;_7E=bM zF(XiXBA-grk?yYf{mv8B)dDlOZP(U!1kP1!+q1}FHjBK0IT!*z$;ZCkm1dxNcGq(} z*Hpc};~gl~ldjxVJ>_cCl3JRU_RRb7+>a{gdv2gAM-A%(+p&}{F#Fi{1HC1CN}$w! z#i^rx+udz2iwgz{Od;pU$diq47$~uEn)bIHwp=u@fJ;Q4*a(Og+uk&=#9kLH)tA0z zlDrj9T`{nXw`gj3j*fJse;_cQV$pK7+Eso?<81@0xGFGb2c1FCSFWY3!`|zj=P2nm zvbZL&cB+8oQO0$?sdohYYKl=Dmq{$G6P<=fOF0es*S1TPGF1aL)CCrMa$hw)w=4A{ zTknw;XzA)e;J4RKEJZdBguqnOv*^MLZQE5_gWitvAIcpkOee1^oo(sc{2m*p^qx)B zAGJ?)J;&v9LtuYQP-1waSd zm;LC{gTf5% ztHbudde{|Mp=QA1aQ%-wqV^S)eYT|P`kJT-7%kUTev@DWMc>upF(k6s6u3ST_i^FO z;(@@*$*$CfquAprb*T&$;w(L>2a}fJMi@%!eW9d|7fR}Kp`?};O6pW3^E9a0L*NE! zCP~4T`U{A^NXg(PJ$V|m)qC_bA_v?eXOKRJ_sNSFH%NwL>NlPvTmO?xqsuQvF7a|^ z&b$RaAn$2LE7D70Jm&d{F*ybaW+B8ZjmIobjLGp#FiRok0zRbU96tM%=a`=ulkX`zkv&H<8+58~(89M^`X9y0&hr2O diff --git a/target/classes/africa/semicolon/employeemanagement/data/dto/EmployeeResponse.class b/target/classes/africa/semicolon/employeemanagement/data/dto/EmployeeResponse.class deleted file mode 100644 index 2bc71bd10a6a65e08c6246c4a07f4e9bfdd561d5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2687 zcmbtW+fEx-6kP{=!7zY<80y?gnzS{J6Zd|D+#t|eBD4xEQXU8U#F=P3gJyB@4e32SNzYvfBp?%2dyGz6n?T_22R^9$1QU#los6^NiAQMRUbM1?wcqm=#n@bnjTGiq%p_pV>hqsgS4St7{gn z;|9M-(;@z3qA2My`lE z3gwG{zCV4f+mS-?bdX?$7qzX!OJ(o>YPZeO?fD&MVfoPU^wD|mR0luWr!F;CsH206 zlvir0Xycr3ok%JCw(XwSfg^6QZ!UV}gbI%?$C~WQ&vf+4@BCl~EJmaQf-aEPVO(F9 znzwx^ESrzw6RBvf))HnbygwbO=0KP9aZ<+hbYw{#1z?E)t#k=TER!0FrPUqD)fLw3 zqMmWG$edOw=Da1$DH`S+n-)p(Izil652iICUKx2NVNTw(9pOD{m=IS8(vinBCy7sL zT9c}jCLxkiB~MDO=8ygJpsf!aX|hUEjAYB)m%K4mM>>q2X=z86+-iBA4)!?Jq2_gC z+$r8fxW#F`&4tHpCp(AIj4T9matD}`lW$H=yE!@9=H$fkTtNx%;{&d=4|&_9zx>Vp z1@+=BW`CosP~&HTC-wZ?LY-D({S8mCFVye$QT(0KOv<)^yVR@?EYQF`-ULT@D%_`> zXV@t7(#(cjoEB0-9zre~$d9ri%hN(i_J)wF2J&Nk!eB-Nzt+dvw2)GWA!Nlsewxj4 zV_Hb5=@7DNAV0(B6D(PttJ6YCdki738^|y4WftVkX(6T4hLD>E@+*8zmE^L?Q(7xu z{{uzow{#C#riUa(8pJ)M*mqgZi{s9VnaTrC#~*DInP4#EojjkBiCH}5Yctr#0nZ#^6uzY- MKL`158Q-DwA2S8kSpWb4 diff --git a/target/classes/africa/semicolon/employeemanagement/data/dto/request/DepartmentRequest$DepartmentRequestBuilder.class b/target/classes/africa/semicolon/employeemanagement/data/dto/request/DepartmentRequest$DepartmentRequestBuilder.class new file mode 100644 index 0000000000000000000000000000000000000000..52a134ec6fa52c06cc6dca8a5dbfae7c9841d1e0 GIT binary patch literal 2248 zcmc&#>rN9v6#l04MlG};a`A$wMO#4DE20Hrzz`%AjS!6ShncnmENpk`?i9lt_z3#b zH_!w_f{72{LmAI>S6b3SN;H_w?wmPu&bQw=bLPy?U;94*OyOY+0klOBj3b0FLvoXE zbHn2Hy74@}DGG`qJZ0LZnqg>5XI9%0MSBFXIL;u>@RqMRW`P^7D47LmN!t*mvL$zf zC~=#wi;}RFQRIpnMI{YKysHRT8Bau+J4&y;^fajk&1}WAio#)NUo(YOT;e6cFq3Qf zcO_XAma!=FHRP=3-Wf*%NrsRmwuQwoaZ<>f_RB`l%`o3Gn`48Ip$k1a{pT3or%%e~ zaEK@M_M*wGc2hC*#nF!ehQ1Qt5_8fnaP`Vm8zi}k+sbA5@PF9lYBjm69MfLUG6d&n zgBcPz(-upWQeHSKJa3VvJ0}a=TIG(Z=e{ziHcaBrTTjoiJ9cEb60y&JnWM}pa7;cE zYC{%ZaEFeS5)P&2(}`*OrE>~&LwVf{7#7q2Dmk=IQ6;@%V(1~QwnjNxVkjP}139_?WI^5YYoyXVA0bE*ko=CW*CV?`br&6bINO}C7jN<)-V}y?oJr!SaXSBC w?4uVr4yDsa3F12W1#koD>ez)0jZs1yq4yT<(5#!*qjXu`rM%z61ST=?8)$rp`2YX_ literal 0 HcmV?d00001 diff --git a/target/classes/africa/semicolon/employeemanagement/data/dto/request/DepartmentRequest.class b/target/classes/africa/semicolon/employeemanagement/data/dto/request/DepartmentRequest.class new file mode 100644 index 0000000000000000000000000000000000000000..a98bd7640bb362a44bcbe6eff06305f48789e4c1 GIT binary patch literal 1955 zcmb_dYflqF6g|@iOUqVj(F#6`BDMwDZ$^a>5ku6JYLGPXlbLP@7_txCoud3JO(Z0m z_yhb=#yh(kOKoFXW1H^G+`V(=oO|!w{`mRzJAgG<22u>~_+B7wZiT{?w(t0!CEO#& zKM}&^9^V(P@RZfzid!A!TY-4r6```8i6b5;{cb0=EDTtlcBRu1K^_bl6Io0!Osq*y zs&$5RwbsgE5;+5T6H_o5w*C(fhTNVMPN&IT!LZ&K8P)YW!m(cZ?VgZTP4R+>X%rc< zjyM($!-H`l8+zYr9wlT9%rF!W`7yT~?(JKz+K0kc40AhOPf1s_WGLH?*zi1GaV32( zWLRuy|Bu!&cO<2OjFwF=RKTUDLaXVkX4i3684Op1Atj8Vyrm;hvAI_vph{a*D5dIz z;YR;CyC+BeXBq7{XAE|=HoDG#D-5EX*`%N|OgE$_nq9Xof?ZDf8O%_qNJN~*jq2!R zhUKx=Vkk9yn>#HYNPR?dPDUL_it+Q&;s2_YBo()XI`BKMc|ZlIL_p}1Bqk~XhDT!y ziK|BoF!%dn@?@M04GRhpBgBN*!|~B#W(*(3*3^H=Mvr~0q8E|;8^0UaVoU0hDfjMe z(vnv6#bKCgQp4I7y1FPC<_pgg!KTB*P|$LAU{}(%Fi&^CM13+vUusbFyhN)h>SmYe zR}OInvt%fM&7fyW>1HvauYnxqaFx)m5m1G8>Cfahu(xMOf1)|Vb$U+F2=b--i<{)7 zy&u!4{U_>6r!YR#EOpK|k6UCZ#~y?{Pb-b1buiqfd6wcrL>ca2f!qcl3!_46xxXRf z#a%3tNkdvRYVO(k7Z_U5d6LD5q$WfT2}y=~s1Dg&_;Yh<=;kbHiI{B~(*!(SKf}c+ zM)l=W45%_Am`d!LaG*^|p!6(Grw&<8*FiBd(7!>Hm41zM(w|W)4567uJ&ME iAtonek;%Hu!i))%9hnW0M2(m|G&GU*ZobT{#0mgJ^(fB( delta 87 zcmZ1~^i^ff$?3=9l543_K+OpFZC69shHi&6_qQ;SO`+W0fNAoF*uV~N+$^g$M~ TQJ=h*F`mf{S#Yx#(-KwycPJiq delta 62 zcmeAZc*ier>ff$?3=9l543_K+OpFY{69sf9uV+-7n61HR17uG;xt1kdL(>N$+{$DJ LVr|Z5TFeRnSHKe6 diff --git a/target/classes/africa/semicolon/employeemanagement/data/dto/MobileNumberRequest$MobileNumberRequestBuilder.class b/target/classes/africa/semicolon/employeemanagement/data/dto/request/MobileNumberRequest$MobileNumberRequestBuilder.class similarity index 65% rename from target/classes/africa/semicolon/employeemanagement/data/dto/MobileNumberRequest$MobileNumberRequestBuilder.class rename to target/classes/africa/semicolon/employeemanagement/data/dto/request/MobileNumberRequest$MobileNumberRequestBuilder.class index b400b45420157f37597054bd88c4584d9c8bfd94..af658c531acb4439fdb3a5d50e0acaf8a5170f60 100644 GIT binary patch delta 125 zcmey!JCkpM2V?TY2f7?ZsfDGf#U=Wa7cvP?Uce+hafvmf2Zn?K<0+<89}M9IOmd8s Xlf9Xo(2cQV@zK!4P`_E0`3f@tGsY}6 delta 76 zcmbQq_mOvk2V?Z)zf8K5jhKZeA7GN6xW<~%0WM&`c#1K0@*gHWsI(ko;pAi{Cn(R7 P(Pi>4CWFmJ%+Hwt<60RT diff --git a/target/classes/africa/semicolon/employeemanagement/data/dto/MobileNumberRequest.class b/target/classes/africa/semicolon/employeemanagement/data/dto/request/MobileNumberRequest.class similarity index 56% rename from target/classes/africa/semicolon/employeemanagement/data/dto/MobileNumberRequest.class rename to target/classes/africa/semicolon/employeemanagement/data/dto/request/MobileNumberRequest.class index e696d4c3eb2bbe639519de44fc1ecc7c31065c36..9cae706ec86165c0aa207f5d0ba17f0d30d3d1e9 100644 GIT binary patch delta 105 zcmbQvvz3z7Ckp6t6r~oHrWTjzPYe{E7~st40Tg40icLK5 agC$)<(+5MD^ki|SL?$nEiOsv1VwnNge<7g& delta 65 zcmdnaGo44^)W2Q(7#J9A73zNCkp6JW@OTvSggV50Ax?R_?JiauHGRQm`$`dLh0PeV~y*Qt$%77@wx?PzJU;Wp_$K{3HGh zO*AB!_yhb=#xvbbsM$@Qh!1o1)9T95xU59(}fc&&n{`*LoPgAaUq}LDu!}v+B%MNb|hKcHBth+jp zezR=hI>XkL#bjd?Ia8Q%hN(jGy5jx>74e3HNlY=!wD_^8D4){$AoU?hq2|608J5y~ zlW+`~ifT}1V^!&koldJJf<0dIy1A-4_x5=p%{f+P^r0m5X7$Pv?$?Ae!{^jI{@3lf zZJ`fU<1G)U{aOT+`cTab2*Y-vcy&dfM6+5&6U8t|(1|%?uy<7_sEZA0x-*+LyDP?v zpmu2DH&sXvDYvea4t2oWQ6}NoFqUjQM8QJQ3{i<8e|eYmPt~z-qd=m$+TeAqf-{CM zy`6{+BhXFmH#`yMt4bYr+T~>IJ(_3&fEl9Zw=ug()QRO;+@cdBm^rdC&Sl~T+$t^q zAo7*Or2BMag2oKr-x_GeN{f2I>ZrL&we?Z3@ssE&D`R!RJ>3_hs~zQ|QLqtu0f<)H;zz}{7{ z(t85U!EoZD4a-4Cpm!?Ir60<8?!TU%QlLBN!gFxL!%eIR94rk~VD)T~e=H*sSR4HX zIMS(#=g$S4X~{332E)#b9u4?TkGbUOYshGxjG^O;toQ51(A6$nVP7Hez$Z#T4 zWptI;(kChtc(puiM(Z7tK1pV8WXes`lyZT7M*7Otm;LO|>%-i~nnt@vNuCDuQki4k zyOORNuN|{XpgZRIJ0#N-uI(MfF{S&V%ratkqi$n0g4p7DYV+g^G|WWts)Y`ESmnqX zdyhG8p7sxj4;N^D=C!~r{@QGfTJYOvl~M1pHF|gZ0?zi+Z*ae`*I3ZoSm(&?QpNTT zd#o>N3*6;(OR&=`(wY(`t7>XmA!Ud!l%KWoyRk`VjhE! zTeP|732L28uXh|z>4x`|sbBVSJY%?VvMEhYzf`zI6DvY9Awmz0&9+42i}qOi9R$M_ zl1$o}*5r@CzLOBaRa*6DZF-H?R3Kl+4LUJ`yGd5sxzL6O;`!Mhw0t8~ulqRZ$OOK- zmNXxRDbmI?nn8y&5$=OId}>Uc+doYIa2t0>rFp(UlqA6TiP4YwL!x?!;Uiq^PuS1b z2nbUbV$)n_;MI}Vc-b=%nQE= z;q!oxgf9Z+xLk3^RiP7!Ph$})=P2~VQM%sBt#`-Lb46r=p=e4{4;kv9*mrKgHth76;xpvs9Cs%I>YNlWigoljO@EquX9@z!FY-elvV zyS#Emt5#Me)ZwJVYk5pge{D3))u2|-+%uvg&?VLC6l8L{%w9N-hT^T%?Xz>^`CRi6 z$pMXUSLhy-2WvkFM6~DeI2N>RK3t&imDUV5=(j`>^guBB-XxSpcPSPq*4q~_+E346wx6BD{zgYjxugA+4Z>8iStLounZE6ws73BQ#BGJb}8xSz>RgMDur(*yo=vvqBp0xqlz5CM6pKW|(4>`q@zH#th00$-YavPi literal 0 HcmV?d00001 diff --git a/target/classes/africa/semicolon/employeemanagement/data/dto/response/DepartmentResponse.class b/target/classes/africa/semicolon/employeemanagement/data/dto/response/DepartmentResponse.class new file mode 100644 index 0000000000000000000000000000000000000000..bb39e0c9ed85f0844f78ef20f3f1e33aae6676db GIT binary patch literal 691 zcmb7CO)msN5PiM&gS9N{o0A(3`ox8}5D}S>AnrXgW%XvJd(+b-ewLHO!4L4GM0Hys zaX=<{)vv0$-pf?KzCFJH*vDEMHH@`T@1TLEz|271D_JPhm*?q#GB42F*GBsTfw7Iv z>lVfZPSlOlnUWQiI^zXiYSpYj|U)npD(XkGyOFwtC9d?6twD_R_O~whd z`BcLsIx$X-;xxLE&tNvj9_Ba-{`hGz&NGvd1C6aGh{xErz!=KFI2IW@@!Y@?mYMPI IW2|BI9hJkrUH||9 literal 0 HcmV?d00001 diff --git a/target/classes/africa/semicolon/employeemanagement/data/dto/response/EmployeeResponse$EmployeeResponseBuilder.class b/target/classes/africa/semicolon/employeemanagement/data/dto/response/EmployeeResponse$EmployeeResponseBuilder.class new file mode 100644 index 0000000000000000000000000000000000000000..78f427cc91955f13a737ee9c85b07ce5889aae85 GIT binary patch literal 4555 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 delta 70 zcmZn_c*rks>ff$?3=9l54Cd?%OpFY%69sf9KVUSNSf;_~2w{s%e7Tn;QA5)Q!kx(E N3}uOI-pk~{3IG@z7MlP7 diff --git a/target/classes/africa/semicolon/employeemanagement/data/model/Department$DepartmentBuilder.class b/target/classes/africa/semicolon/employeemanagement/data/model/Department$DepartmentBuilder.class index a825b0b74d60537692b339ecfbade8b00881b4ce..8ad8fdafd497723cd5eea39ff4bfff2d90933124 100644 GIT binary patch delta 351 zcmca4`9NaAYyknEti-ZJ{hY+SbbX)vy!46dcIopZ7o{eaWaj6&B$lKyGDt#{lw{_n z0+l2u=75AlfIMq<202Cs%gK$bmU3JSvJ47546F=_j0`;*Xogx(UdU`PnU|GsvIMiT z7}!D#(uG5G;&;N}x7@=Q`0Py;cnO9iXRW3OdojGp|4 z!-pHm&y(#qpE7byR^hS(lJVT)ldHIFpsaInmJ&BaEEg*CggX$(GUEY}9XwtDC5vxC delta 278 zcmaDLaY=H*Y++%ati-ZJ{hY+SbbZgflGOCnqKT__akFRTCk5r_q%ty?PCm$Dzzk$h z?qT#5U9Ews-WsH0@;N5M$%k0=J{Ky#$CdDVmaM?gv8{jM! T?l7oW5qBVvbp%X`@pu6M%${69 diff --git a/target/classes/africa/semicolon/employeemanagement/data/model/Department.class b/target/classes/africa/semicolon/employeemanagement/data/model/Department.class index 4df9e88d49f5cbf3c704b7d197f34bfcc18abc59..c2bf8aee7673448d526b4ae16b1f2cbc63d1da09 100644 GIT binary patch literal 3591 zcmcguYfl?T6g>l8o5v$d!d z{)zsBRw_!>O8r`?KdS1P-L<_Y8x%KEk?_vr-ZST(xp!v%{^$2U0o=wn8T1I;mrp&r zB(1ut*(JB?I+m*KSKR}pYSNJvRa1^{m8CDOnp;*?Yf0@(&)1`u+s(TTyINM>00dGd z45S6pw{6Gv=LLFa=XM6rhg1gr0@-KsJ84y=Q?WL8pQ(~RfI*lUoG@_`Ljq@ldEc%n ztKgPobxHcF$R2SV_j`eJvvY-)nB@C$3d0$Um^h75ft&w1G6A#XDe2p;qt_Q0KX%PC zCeC79pvNvVz|b^^u;4nCfYmt@=P@bJ|I}91@`lv$%on=kchB8zD;~gJFmVx=1P05h zUh?dHO;}(!#$em`?1;k~CNASma%k>vy+yX++f}Pz*Zn+0-D)^m{vEq+?^e}<UM^+n(MtyZ(_bUg-+B1aW!M?UnEj%o4 z3QQzmFS^x6&7n=Y;n?3cR4)@+FtlyE;z+;YQQrHZ3a!v?cPsaDR0jEZt}~fHV$)GY zcU?LMoHw2-zqFTZx1y(_n2hCx)#WXLOi9*DvP_;A5|9_e$;c=3V0mkMZM!INt>AhU zYtPY|YY;TUW7$vMOmbx!%`(%~b4eL^1lV#Ioy0vrd#X=``YLUl*z)-<<)JCI5 zN=31;#p&nY0mlc3t^dIf^IXCh`L|Sc=vn%a0 zZeg}tg**3NL!Kn$Qv7@yjjtS~M04$C(Ngjz!FHZ#qm9V9HTpV2X}}@UYt~+PS)7lS zcu7JUl~BOp=1tZv6za#xn0|MpMUBE?DMugR`WxcN0 zJ=MmF9xJ%S=RzMZ4g)><{^r}|E%r{aH^c8N`*R98T;TvO?`V3E->dw;_88YW!Rwc{ zJ^E(luNAa!1UP4C^ft%dQFs^c;r%BN3LoG@4)Jvop{4o#h)yTakDIu~UY@;+w9$Wk ze?UBXj^3Zy7JRS)+8)r)ECU~-H?aPR)@hE;G_|>G-fh=vLP|Xv8_gHAr3OXGHt*IL#pf0e2)g;J?SA`7I zD1y{V2z-jQB*>{(h13Zs0)fd=3oCFB_oLJ(5V{rkw1y0K{`kOkE{oVMrh{EqcwWKf_jn z^Tbi-u|(%>6ce1Mjyj)Bbbg4PNQpS@>7&l)5}ZRhKj+$CU?_n>_9)0y0!Rvv0)-w2 a$B$P13Hx92KgG7dS8VB%gJ&VWM*qK;K~v}e literal 3648 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 JVjUY8{}m>Y(00oB`fKYGfD$Te z#t$KP{1_4VDHHlPxzCrf?YSO$A2D$hMS-4Ga=t}y$#(ka1*mZ%qhaWoHalD zZV9Z)g!MwMT7&YtHQ>7^kd`mav>wC*nGcN!LoSA1^eoTMhug;TUr&SP9PuEEUk2B-HFce&TN6?1Ls{jVij6;3_dUDjA9N)&38N z?F6_=9A`Yw>fb!gYaZ9Qb`W))V}YRoJv{GV O^WQ-y?&3bmi2nvnMRWxK diff --git a/target/classes/africa/semicolon/employeemanagement/data/model/Employee.class b/target/classes/africa/semicolon/employeemanagement/data/model/Employee.class index c94deece7fce9aeb73afc7c3b60fd27459ad764b..a9226b3078e9dd3ecb18d8a8ec1b149f1cb5869e 100644 GIT binary patch literal 7398 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 X&rk7l&PL338T^7L`z3yj-y-{O+VtM@ diff --git a/target/classes/africa/semicolon/employeemanagement/data/model/Qualification$QualificationBuilder.class b/target/classes/africa/semicolon/employeemanagement/data/model/Qualification$QualificationBuilder.class index a521c3f762743b4b5ef2e726e4e3a949f7a2cbd2..8b183051ce5ab438724475525fb82ed7dba733b9 100644 GIT binary patch delta 181 zcmbOxcu#1;eI^&5$$E_X!okTI`T044rHMJ2X_?81C7Jno6F;^J7ijooC6*=X=OpH( z>-*&ArCZ}vKKUP`^yDp!>cWl0>)HH|(Ug&SrUuwhF)VJd)&xn}OkThwv3V}@PZj`y C-9bkH delta 147 zcmca7G)-{AeIX&Ati-ZJ{hY+Sbp7CxqRhPX$;ynaDs~!3;y(F#>DEYmh&t=Zj*OC% h#hElz{E1Y&c^#89qhLC+YLHQrW0@m2r?UKH0RXw1GG_n) diff --git a/target/classes/africa/semicolon/employeemanagement/data/model/Qualification.class b/target/classes/africa/semicolon/employeemanagement/data/model/Qualification.class index b9f6504586ece8347b50062430879fd37454bedc..4a776fd0b8ffe6fb88868aa5139734b2feaa11cf 100644 GIT binary patch delta 149 zcmey&zguvF8Y7d7&qM)z;o#(q{QR82(!`w1w9MqhlFa=FmNKRH@5}CY{QC%^f VNYxAZgHcsZwqthREXCZ;3IKfyFcJU& delta 159 zcmeAdTqrnUvaqmER$^JAeokUuy1r*#Nosm((Zt33)k8Ee#jP=gCZA=IoIHooT0NB{ Y^&*p1nR-RSu;`hr$LzY9gSnj*03stenE(I) diff --git a/target/classes/africa/semicolon/employeemanagement/data/model/Role.class b/target/classes/africa/semicolon/employeemanagement/data/model/Role.class index e202ad2884a8f40dd5426b594dc7f51c2eba2c5c..3bb56d82205891f7327302737b0199ef565e9934 100644 GIT binary patch delta 111 zcmew>@J?XDMF9byti-ZJ{hY+SbbX)vy!4GvmN6>&X`qQ(qwyziWLhjJjIL^O26MHL OkcK9j;>|ypTUh`X+$d`R delta 126 zcmaDS@K<2MMPXr|ti-ZJ{hY+SbbZgflGOCnqKyxiF{+1XU`kkH3QbR7cxVxJzZ|z%VkV{|?S5*vY7{)c?`^Q0d>owwb$ep@X-eH(cw?!{H{NNzh zc3=d)?e6BE}>;KOkh$p zNisQLSW0Iuq)kNV7i4&mhK!-BWV_bOdTq<{D}2kLlh@}k&0NGCF{DbK$(<_qZIP;# zFYNLfrA__aS(@<`E7F}fm1NyA3EcIk506v7p8HavKhocS zA*q-VRY;_G2(wAxAw7>|$XqfZW}H%rl4cR6H!!Sz1=~;>P>hXm1FEqRX;51?q78Hy zg7w)dV|a|Y7KGV?$bBJ%)J^3WV@FV=aw{wqRVue5Qb|ZSQ>YS?2+H=GI_u#4{4e_3xOnU44F_A`~oJsv2+(MEK|Hyq@w z)1dEcrqgh8z}86-}0W; z4t64A)1Vkuo=IhKYwUI4EbD?VTxN8@S{uic_H+t!9?Bv8EY<8rR(^OKzdqC>qtmiS xTjdjNpLlh`Eao6Qd47iA0|G5z5#A59B$K8@Ls%`THMAvr=wNwLSAM6fz&EZmR|Nn7 delta 88 zcmbQk_JNt})W2Q(7#J9A7lsEGaEYWn`E+`66RKyJucWYI3zXCnqwgOf+#|nxHW`fk|uP0v7h7)WXu#;*yDr z9XN_oiwpAeic>c}y2;2GHF*ycLTK`Drh5j`#i=E(xdl1-m8q#g`8lahl`x)X3L`_W zhEG;vS)zVUVqUtwPkvsyHPi}js1^D^Jrh@(OkTh&=nS)#kwFE?(7@8foXoV$JLH10($=u4QG&!EdfKg@g1Qv4^HAV(6P#A1}&%(vT$T#^H z+u?c^21W)x1}Og%OU~@DXw7|4BgAULlkTtA~47y+;JqBI|<`^_PfU^2PMS?)g#2^H8hyjBkP$PtI Z1mqhtm@qJ7Y62PwRb&cOZU)wF4gg=AZ)^Yn delta 222 zcmXYqyAA`#n*RQ0qL0$_r5GG@Das)uIudLZkBlqVW(CEpaTx z$z*1}$=Qake*fitJOLP>{RL~;WRw~-^2uy%bpv8){wzcotm-eNttrc4PvMAl>+{rLeVfmx5 z=G=St*>~@6f9E^<+{01dS6h+~Lo(a`>xVts){>yK_7h{hAc&(aPP zElykQ{n2<|Z%;frJZO2*YSZvJLakV73r$|t8;d&7i`_c*;9-Kcxp#xK5k6kgCOypj zB-T6Y#d0m5U;I3wL7Hn<4n$(z8@oFriSFJWCmzK<4f}OGhA$A@nOD6@^|IDwPmHODa;6^}Y==xgEy z=Z%)Lgr!6K10tkXc)w0?-QL#~Nksh{Bi*rRmjh=oQNz=sPp`3^hgrh~@wi?!<2=5l z<2lSD=$*Yi+oJu6HIdi=6Zt&8qv5+czK0hG<)W>yT$H#X_Vf6GjvwMjVu$Ol_MhnZ zDQtwCu4pWph&IJycDzWKuzH}gGa8R?9EimR{l;9E9ls!W7I#NuUH;BUkAFkd&rBr- zotT1O>G(BX60_Yw`mI>!F0=hX$18YM+~=O2^BVrF;V(K~7f0P8%NvAxu5oBf(Xc-^ zLZ+P+L;Hf+Y7vL?8Z#OZZ{(G;a>jcMFU&WQX!o=@9WD2CM*HNd$HkE6L0T*P6B=Z& zOn~9ef*Yu&Bpyw)q*qlcs(EniX-OC1v*~q>MS3=c+Io97)u$5{qy-$3@2oP!%xhln zVr{0U2+e8dDevQ4Pq6eW1O_Bc&nAs#4eu;mWpXcaPzx>A=oTHbs8w7ndYYDspxes}ei##B&Snfl9&IiGYi|lcU zpE_XTJ0LeW0t!|hhZd|l4%ZPjneaCrJ+SaNg-1VfPzE>3@prcPjo0ud{=rWiK&2yf z7nB)I_$NQ)nAk37fq(JO#>xN9SHger7Q0*$Z%*2plzB>_@i?91SHOpvJO)vRDm0@S zD=|yutYhH7`b^IC_%AMVEFTu(ZM?(rnmNuD24UuRa*6oPLMDDkAM+wJOe8DHfysRt z(=={H6C_Y8aWDo(R!rq$FA0;cRsnOXLTkBH6)SFIU$pCxmpZkPi)|Pot&?W^F{x!`3h;GtdTi7$ycfQrrC|WuyPhkZxg4VO_rCNE9m zttK~?(zq1KyV%U(m1T_=u?tZN`O+1>%vaVvTE{B9et}6@;UlWTN5U2_*SI%qm4#YU z_+q9|iz>97u>b>%bQ>3X4;T6oUaEU}&ur)2@=@L$_o`wS7yvTGwvH8xR<3ojs&#I< z)?_UTsgz_t40G9jD&x*E)?o}wIa@w35mPB(5W#(CjEKq5bC>-zdwz!7$^#iv7QjK%Xu48ht3gjvE)~sC-A>+B&`eHaLo)@r z@0mGN0B?_LyK0U*pwU9gV7iPF?toXgnOZg2HLBF`JR4XsAdRY(Y#fZVg>j$e&phK8 zp&6{33f3Q|#~qIJONHP=f6C)jcyytR2iZ`ja&PSJRx;rMY()-2a{w zN7*OQku2672B>tT8=0GVG@r|n>|dV*@yt|D@{iZxAjKS1H-8QR6Z>R?%|xaH|?us&O^l&dwfA)60j#8syL& J)IoQ``#;=w_uBvf delta 2787 zcmb_edvIK375|;PclT~KH=E6El6Gmbd35{8JE5W25KD=Mh78SEDmX=@gk;MULenNG z1L(LTI>R6^lk$y9gS1rSA)qv*Cbog5DuSY7eW2hg1yOkyRNj&L`@Xx`2BeOExHI>B z&wI}A{LbU<+n>0)GxF%W2Mz*gmDbV74w2R!d#VDxL;Yii<%^blcy{$A`^jK9f-t`7 z;wIJMmV`!J+>EcOOWYFKrLJ*H^KL;Pg2mY5;_J9gjk*<~+g;p&JJl2JKKZ7)A+J&H zQ3vx*wZA3k+_5LAj#|ZPdDM&FC&)W@Yj5{Zs(e%T=Dt*K1oxuY!TsujXk*SO0uH_- zSgN|CWol!7xGI8COt|_PJVZI z6o*`V58qb<`5PM^a`8ii1UbE_zSL0ajK01w9uX9--`>-c8XVlTy|3@ea{sJ1j33_^ zi-&&V;-~nTDvMRiVbvL{2>r^%ukpCr7F&|@1fF#8I~TuKx5gUek7I{pyG7EfprA(6 zsP6DqtD|0ptWw*&`mr_hL~yiBIP9(O1-L2G)trENz}^8YM8QFJ(%dUN!((!wRFDfDvgF5X%QqcOGkaY%v<^g z1mGbTE)&B;K4L&@fets<`49y0C*GJ=HG{he9!VaN>1we?x!?X$*TqmeiGSa_3)-oo27E7R)Xiu(+TF3jWMX^dSf zl30aWoQ{=PO?d|0Z^K#m2+kuRpF%q};!JG98VsTXSMubu=)@OrHm=25T#qgc<738) zYWfN6%6hR2?_h?;J>JrETC_5Nf2Hv*v1s-R5S&5ML6ec|OG@1T^y3}g6C5-6r#WB2 zmBrDLy;|Z3rOpT7Tmz!mKh1)$G9ZoQ9HkT-{zZ`+N7tB?+H z5s{#TOjUMdx$O|glmM|xSXgIN)Fu%YLx8H1tkk(x>7TvIGaZ2nSTk72vN*;H3pxlp zlI!3AH<)V>NAgT$B1D>QC-A%ZHSyaFjY7gyVd?LZPZ~bQd%9&LCoxKb#=2_iYQ25q z7(WEc{VjG~-1eHrF{QaN?;fG_>-;Ky5I=(jteK~{=eM3@*2$!#wQo9mlbH+(qeSv0 zM$-%6N`dIy(778TB#ktKQ)7IIkH|cfQh_dw7LHn#tHZS)KVaoOd>l`N3V_eEWnFEs z_+7TZ&43Xp#5ue&t&S}#O8;mAMN?W$&3>F^f%&l$d71U27HSUQF+l4Mm{|M1UPGU+ zWy`(J==Te;A?s^{6q#sQjEtni`;9@gd^gI=0cCo2TIMsd z3nWf|v?@~aUl?J4-p9yqPQb`+GO~xR-9|=kKLH~;O1}Sc(tAEVWQ05a3nMzB#t&JD zu#_-&{RGvF=wE>s9>;G-;MjM<4vb;vC^zR4b7|bvaS)cfT3}15K9_{~_~(+DGCt*l tQX!Q*Si-+*i?~r`WQ~z^Mm8APWaM%=g?Bxg=|_{SK#rU$E9ErA{|#2U2+;rl diff --git a/target/classes/africa/semicolon/employeemanagement/service/departmentService/DepartmentService.class b/target/classes/africa/semicolon/employeemanagement/service/departmentService/DepartmentService.class index 94dfbbc9e5b73ca7e04d20cb0cb3ab612336e745..ee1153a385565f7a87c3fa147de42488cdc8e333 100644 GIT binary patch delta 265 zcmeBUKgq#$>ff$?3=9l53^EhB8knbO_)HW~5lBfaNz_j%$=5GREi6qfE}6K~iK8gB zxFA2TICbJLV^+D+f|SI`9~dQsJyRGNd^LQs63Y_xa}x8?^?mXu2Qn7&tDuQpX0)Ds zh*49AFD11gv8W_BHLt`kF*lWwK_n$LC$%KiF(=0bE>q0Nz^tJeHd&Tw>tqMUpvjk* z^cguOGcntR@iQff$?3=9l53=$K$8kn0kd?pI0aHJ%bBzKAqZe`YIWS_j1+0Kub yfsuh7XbUSN13v=;3nPO7gCI~y2q?tFAPnS-FmNH1aD$bIA`1a^0p-QO>cs&wRU|L~ diff --git a/target/classes/africa/semicolon/employeemanagement/service/departmentService/DepartmentServiceImpl.class b/target/classes/africa/semicolon/employeemanagement/service/departmentService/DepartmentServiceImpl.class index 12f964ef0f78852e79b70ee9f7c5071838795707..8fc5e75aabac720c801fe03f15f771efbd40344a 100644 GIT binary patch literal 5521 zcmcIo`%@d&75=WkUJz>@DmHZ-8`U8W2<(j;;y4j?3>a!00WNY#owR8$(goJ6c9q=~ zSbf)RlfLq3o3`ou{rat)X`F%1w4MIY&UE@Gbvixw?xJ0UjHPD!1KQnl?>&$2ocrB# z`R9Lj{tRFOze^&4HVy4M4&g9E?=8N`4U5}r#^TB?QSccKPnfppUt(w*9$D^02Rbz* zb#y^z$n#a#EO5gUC9~jIj%|oi*>b8vl(@~;L`m2_4Z53VK^R3*=B_VA`A~ADUNT3k z8TzA{OQP&}rti2_hHJTItQEP>4Y#(;h-^fb+- z&2Y78Yxl_zL(i&d7pJN*XcmX}+iw}H7*ZOB7?zsxcuTAp;&wrleUnN&QZZ?{f)}eZ zw@uIYW_Bl}XlI?#@d$<)21e2uv}va4@FE(`nYLJ{lvad$gRfX5N#&dZx0bnU z%I{Fv?ys9fO3yaMNi75|5A-ax74yPhcZ%1!ONX2Mdy{}!LurtY&q_Ru_Czb8LPY?+W~{u78sKi-`O%FKB4bp%eIXx3Lc%a_uG!qLxU~Nk_p#K(yU5lh%2!HS zjLZeh-Cr*ZA~|94(n^sJ)sM~P|?qjVhQor+r!v!>*( z2cjs$JA@>dbMi=}Gr1vactkhC@vCKFgiFYL@08>Cp6~KV$)CZZ@DHhPUF7g%bm%SGirZgg2CPoQ+C3-t~kf6f3Gd3vZCK z4W_>ko4M70(-+weyv~q`084LC1DcjRpSFoo(=5${_BAb3|4I;iBZ+U~ zTN>Wf@ojvE;q*QTa;kbLJ|6Ngu>~=D^!2a*KO6^QwP!HMKpe_F!wTnkM^X=AFW#!Z z_k_R`Sl>_5CGrP4zJNQu_z}Z$lQ*{(_euwT!Z6Y>jb@ROSabv>)bXP%{!BXda~+?@ z9lBo5*|u<1n=L#IzhZcJUs4;DtA^hYmmWNo?#@AN)8(&&dMt*I(QiurYk;mmDS5r7 zXBWv2fm0*4LSHv&MjJhQGVg$8M&E{(8G9Q?{y?Gx3iO*oJN+J|-(%>+0J`ZuTO>(3 zSO$Sr`XU9&3{!8?Py%c8-kBh=90bGd~4+HODv`KwnR_%faLAsf%j# z;_pdon+oEXvhX1Ka1v*zR~^S7b@6Ex$arAA7RVATl*q$AOu~jkUXIg>GQG9YnjXAF zZ|!hNcL&(NaYnz3InPA~yVaTurS2@%#kpAWhH8d~ zLc;?%62`p8h1<9ux^Rb-Nf$DqEtRH!piiY~2Me_vX`|ct(5@pv5`s#4j0$3$((pL3 z`h}P?nVK^hRPhN4yo-_)B%lWN$r#vGh0Z5cP02dCNJ}KNN$J`)ZZJeeEdQ$pWT}8B zlu1398JcAH6rK+Q9N(+uIfe+yAa$1;X!tZ~PvA4O_OrF*KSL5}bzo1nUf9i6z1kV2 zHmHb!8WsbMD&liE9eV49=@>jP9b?i~kb|HYa)j+X6U^5NEffWpuw5+LK>YS@=?oX(U7)F+Yuo+}=rMn!?HB|~!Xm+@}1V~<)-DX4t%r0Q~V6J z2t}G~iu)t`Y*0HhWzAsPzKH3NoHJOlg3`kJv5@|&Ah4e#nax%zG|?h(JA!tU!L^m;@C=cHX^UrKrQ1&mIgZcpbLz<2%+#t*bb(hF0O$=^=X}g%NI)|+~&ejlv-SnpI4kZ@#iW4AJz}o delta 23 fcmdnOyqI}HJ9E2+&qM*0iR(Bg?suNd&A1W(WC93V diff --git a/target/classes/africa/semicolon/employeemanagement/service/mobileService/MobileNumberServiceImpl.class b/target/classes/africa/semicolon/employeemanagement/service/mobileService/MobileNumberServiceImpl.class index 953e02864f72c33fb6a6674c3e8735bbbb05ae6c..f4dd70f09381bba5fed73a10972e95674dc1ac34 100644 GIT binary patch delta 167 zcmdlh@?2y?4z{i4*u($wOT%{v(EXt(;0Dh}2eE z$mUt>4vc~l3@i+i44e#7415gI48jaDlV5Y}5mW&36d7a~lo+%alo>1;R3`7>Y+}^} Ls?(Zm&!qtXlPDXV diff --git a/target/classes/africa/semicolon/employeemanagement/web/controller/DepartmentController.class b/target/classes/africa/semicolon/employeemanagement/web/controller/DepartmentController.class new file mode 100644 index 0000000000000000000000000000000000000000..735ccc49f95a7fb6fd8004ee3ea2a32076dfe57c GIT binary patch literal 4257 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 V)w}*1{TW{x)76EkP!@Sxd zMAqsO`m*kkWGpdm7}l)XZiThtg+=krXMGGDw}OG}oK`JNJI(6Vc8V@5EZVG}+LYKT z)pS`?W92?0Gn^Pa5J^QwjEs>=3zYVmL-9yvG-U|H+{>F68p^->LTdL|)JSH`M4Wk= zo;Kq{F+-m)t!U_XMY$eHn!4fg=+^$awI_i9Gzd_jgzG7H^~tE8kN+5$# z6cOud{T2^a3jx-l8m&ZIFR>b#rAn-eyj3HyE>VH#4%Qg8{nJj?IF*Zc$j>?s)8zuw z1kW9&D^!!1f=?mFJ*wmC(t)l{-9GyNR`jZQDyXdp%h8oINItGiTEh%R6TdR=%~)Ts~pe(&Y8vDG7^7 z)c!y6fPy9FrG`I~%yI^8aMKk+N+fIZ(_>4GFm`s zOKIh|1xznTU%ZC5N_RI`T4fjzP{(ttVw8?j6`RCpNokgtTcQ*-b}1$8eZ-Y} zl%e(EVkfbLo!k8z<-GfrxUg$FB%m58O|?92lWk%e9v@F&|*rSEEiH~nB2y6phCq_AAd_Z#jWjV zZ9InGzyUWRW4qF2VeaQ4&$Y3auS0Ds-I4gom349%yHJCDbH~*euQ16&8NY_;d7sHc z7N7jV+Hv#j;P|w*2a8bVT?voim$!w{Afs(QgT1u6b`Ro?wLYk@44VbaD6%%h+RPgZ khGB#e^I;UK9BGX8qF@jl$6w_HO!7Ixms9*r6Z_7-0QPUipBLMg#4b=bu delta 31 mcmZo?X<(TkDI%PeSeB@tlbDyTACgg&U!Ithle*F5G9v(=LJH#m diff --git a/target/classes/application-dev.properties b/target/classes/application-dev.properties new file mode 100644 index 0000000..273cfeb --- /dev/null +++ b/target/classes/application-dev.properties @@ -0,0 +1,12 @@ +APPNAME=employeeManagementSystem +PORT=8080 + +SQl_PLATFORM=mysql +SQL_PASSWORD=admin +SQL_URL=jdbc:mysql://localhost:3306/employeeManagement_db +SQL_USERNAME=admin + +# Hibernate +JPA_PROPERTIES_DIALECT=org.hibernate.dialect.MySQL5InnoDBDialect +JPA_HIBERNATE_AUTO=update +JPA_SHOW_SQL=true \ No newline at end of file diff --git a/target/classes/application-test.properties b/target/classes/application-test.properties new file mode 100644 index 0000000..7c27788 --- /dev/null +++ b/target/classes/application-test.properties @@ -0,0 +1,12 @@ +APPNAME=employeeManagementSystem +PORT=8080 + +SQL_PLATFORM=h2 +SQL_PASSWORD=admin +SQL_URL=jdbc:h2:mem:testdb +SQL_USERNAME=sa + +# Hibernate +JPA_PROPERTIES_DIALECT=org.hibernate.dialect.H2Dialect +JPA_HIBERNATE_AUTO=create-drop +JPA_SHOW_SQL=true \ No newline at end of file diff --git a/target/classes/application.properties b/target/classes/application.properties index da1f70e..c713b9b 100644 --- a/target/classes/application.properties +++ b/target/classes/application.properties @@ -1,8 +1,14 @@ -test.property.name=employeeManagementSystem -spring.datasource.url=jdbc:mysql://localhost:3306/employeeManagement_db -spring.datasource.username=admin -spring.datasource.password=admin -#spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver -spring.jpa.properties.dialect=org.hibernate.dialect.MySQLDialect +spring.application.name=${APPNAME} +server.port=${PORT} +spring.profiles.active=${PROFILE:dev} -spring.jpa.hibernate.ddl-auto=update \ No newline at end of file +#datasource +spring.sql.init.platform=${SQL_PLATFORM} +spring.datasource.password=${SQL_PASSWORD} +spring.datasource.username=${SQL_USERNAME} +spring.datasource.url=${SQL_URL} + +#hibernate +spring.jpa.properties.hibernate.dialect=${JPA_PROPERTIES_DIALECT} +spring.jpa.hibernate.ddl-auto=${JPA_HIBERNATE_AUTO} +spring.jpa.show-sql=${JPA_SHOW_SQL} \ No newline at end of file diff --git a/target/test-classes/africa/semicolon/employeemanagement/service/EmployeeServiceTest.class b/target/test-classes/africa/semicolon/employeemanagement/service/EmployeeServiceTest.class index 862aa773efed78eaf0b05bb8597e3963d1af9d7b..32c73bf27a320376becb2d0e1f549d04fc8c003b 100644 GIT binary patch literal 5663 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 diff --git a/target/test-classes/africa/semicolon/employeemanagement/service/departmentService/DepartmentServiceTest.class b/target/test-classes/africa/semicolon/employeemanagement/service/departmentService/DepartmentServiceTest.class new file mode 100644 index 0000000000000000000000000000000000000000..f5b2eedbee673349a854b950100be873e13f4afd GIT binary patch literal 4301 zcmcgvTUQfT6#fnu2jWzPT5q+eh$VnJ^-{rxVgm*RV^o4zYg>CVIf03jnK*L-<)y!( zFMaG!s7t8!p+BHMs;m3V1O_6I42#vp3NvTV-rxStzRcP4&%b~D4PYG03ACYILx+w| z9AY?D=F8l$xwB|IDwKsO84itGjwL4;+LJ>I-RMHMhJ=p8&>8Z)TE`WDnR?DuE+7s^OT9 z9`rKYYz4o_B{wQ=QP@USEDM`KE7UBzC_IKta;PPajTi#~(qsse>c(+=qTz&&lQ_jN z8k5zmTc{H|oXO44J%5?aEM&3_x8qXV0HQFR!KWI|>i7(O4C$DJ0yf*W$k0{ZWcf>S z-^30g+G=y>bzDF{LuZglhOvF-ky6)%0Uej{If2<>dEAP-y&zr`^dyEf46E84VVG_? z=tb!oo_JlOJ~E>2nhPZiW}Ln4i8b&6dQ`zza8-k$;|pA47;l+-*jH3|5j6GJ^h_?D zo60au#0}*(Bns&b+|=-;j$0UIc-bCUZV;Z^ zs(8O*_$@ZuuxkGwmgA~lzh;;{uv!i}_l}NlkluFqY_`q))=O{C@TU%A3U@VRbWE$$ z_E9TE7~}Y4I8H~CkRol{QT6!B>wO(Fn56^W^aPh8ddl!?jCAk4z1RidS6#;!+ul^6 zi0UzmhZ=G^9^o;=IoDe>xKFW=Wy5qmVeqPDqyvFP7z~N<>HHF>31T#vZ5(8%hjzpW z$D9y}yv`x7VP3~mEHGSXYC&yo`8ikSYBmi6gH)0`nxqT9^tdVOZW!iUi+POPr-q1d z#}v&b3`et;BXYG$L3s1LV3VXb>zdqN;GU({bzz5GvM6#-TdM9DRMZrgqEdS(t}6|x z#uU?ar1)7H`5^O?B(KNe+Kz_XY|^H*mc?VwEfEi2Rl+j2Ys9ESsWIp?jw8G&TfG}7 zi+XTQ)dv-ZQxWa@tG@mS=V_E{qYtEZ^r{aXx`R3$f-B8;bWPB&6VFKFTe_PjZKa`-P`5moJgxYw4?`fsbloy5{=)RND0{D@Bhe-62 zuE0-p-xj!X2#%2?Is6VEy}`%pIK7T@Yq&`3!8f?Pj_bp3ad91E>qxC(A|ldHn*wc3 zqw_O?ejLL9ePmohA8qIY2I(&ukW)kmzfNw02PYX&*yJ%rT1qcL-n93aWQaVek4oS& zZTHF+#6$z4sQ~Fz+Spm1td!kJg-E}N_qf-F?8rMjSjUrR5qucYYZTe*6v-P~B6_m! z;t07eLJ+|X`lZ0x;-<3^S}Xc2f>qH5Mz=6#4U9vOrRE^1rXW^xkULF5%FRKhnu5G) z4sx$4h}|6IK@*U6R4DvyaDtrm(w$4|DkbIh3osuZd|E5{8Opq*4Bwz4t)crrWxm}s literal 0 HcmV?d00001 diff --git a/target/test-classes/africa/semicolon/employeemanagement/web/controller/EmployeeControllerTest.class b/target/test-classes/africa/semicolon/employeemanagement/web/controller/EmployeeControllerTest.class index 6f3e983193dc5399cada2cf4a2cfd9fbbf51406c..9b443ba8a40e10b8f5f7c64adddcd56d3fcbfcf2 100644 GIT binary patch delta 48 scmcbw`cZYmc{WD3$rspkIf_z?3-a@dQ#b!%+r`S{;e#spgy%Oa0ONuat^fc4 delta 29 lcmeyUdS7+Jc{WDd$p?9KH?y(tWM#CUe1J!9^LL(KtN^gH3u^!X