diff --git a/hr-microservice-hexagonal/pom.xml b/hr-microservice-hexagonal/pom.xml
index fa43ac4..bd9c023 100644
--- a/hr-microservice-hexagonal/pom.xml
+++ b/hr-microservice-hexagonal/pom.xml
@@ -39,6 +39,21 @@
mysql-connector-java
runtime
+
+ io.springfox
+ springfox-swagger2
+ 2.8.0
+
+
+ io.swagger
+ swagger-annotations
+ 1.5.18
+
+
+ io.springfox
+ springfox-swagger-ui
+ 2.8.0
+
org.springframework.boot
spring-boot-starter-test
diff --git a/hr-microservice-hexagonal/src/main/java/com/example/hr/adapter/EmployeeRepositoryAdapter.java b/hr-microservice-hexagonal/src/main/java/com/example/hr/adapter/EmployeeRepositoryAdapter.java
index e1609fb..637015b 100644
--- a/hr-microservice-hexagonal/src/main/java/com/example/hr/adapter/EmployeeRepositoryAdapter.java
+++ b/hr-microservice-hexagonal/src/main/java/com/example/hr/adapter/EmployeeRepositoryAdapter.java
@@ -2,31 +2,53 @@
import java.util.Optional;
+import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;
import com.example.hr.domain.Employee;
+import com.example.hr.domain.FullName;
import com.example.hr.domain.TcKimlikNo;
+import com.example.hr.orm.EmployeeEntity;
+import com.example.hr.repository.EmployeeJpaRepository;
import com.example.hr.repository.EmployeeRepository;
@Repository
public class EmployeeRepositoryAdapter implements EmployeeRepository {
- //TODO: Spring Data Jpa
+ @Autowired
+ private EmployeeJpaRepository empJpaRepo;
+
@Override
public Optional findByIdentity(TcKimlikNo identity) {
- // TODO Auto-generated method stub
- return null;
+ var emp = empJpaRepo.findById(identity.getValue());
+ if (emp.isPresent()) {
+ // EmployeeEntity -> Employee
+ Employee employee = new Employee.Builder(emp.get().getIdentity())
+ // TODO: set other fields of domain entity
+ .build();
+ return Optional.of(employee);
+ }
+ return Optional.empty();
}
@Override
public void save(Employee employee) {
- // TODO Auto-generated method stub
-
+ EmployeeEntity entity = new EmployeeEntity();
+ entity.setIdentity(employee.getIdentityNo().getValue());
+ FullName fullname = employee.getFullname();
+ entity.setFullname(fullname.getFirst() + " " + fullname.getLast());
+ entity.setSalary(employee.getSalary().getValue());
+ entity.setIban(employee.getIban().getValue());
+ entity.setBirthYear(employee.getBirthYear().getValue());
+ entity.setDepartment(employee.getDepartment());
+ entity.setPhoto(employee.getPhoto().getValue());
+ entity.setFulltime(employee.isFulltime());
+ empJpaRepo.save(entity);
}
@Override
public void remove(Employee employee) {
- // TODO Auto-generated method stub
-
+ var identity = employee.getIdentityNo().getValue();
+ empJpaRepo.deleteById(identity);
}
}
diff --git a/hr-microservice-hexagonal/src/main/java/com/example/hr/adapter/EventPuslisherAdapter.java b/hr-microservice-hexagonal/src/main/java/com/example/hr/adapter/EventPuslisherAdapter.java
index 815186f..c0091b3 100644
--- a/hr-microservice-hexagonal/src/main/java/com/example/hr/adapter/EventPuslisherAdapter.java
+++ b/hr-microservice-hexagonal/src/main/java/com/example/hr/adapter/EventPuslisherAdapter.java
@@ -11,7 +11,7 @@ public class EventPuslisherAdapter implements EventPushlisher {
@Override
public void publishEvent(BusinessEvent event) {
// TODO Auto-generated method stub
-
+
}
}
diff --git a/hr-microservice-hexagonal/src/main/java/com/example/hr/config/AppConfig.java b/hr-microservice-hexagonal/src/main/java/com/example/hr/config/AppConfig.java
index 1213c71..e777551 100644
--- a/hr-microservice-hexagonal/src/main/java/com/example/hr/config/AppConfig.java
+++ b/hr-microservice-hexagonal/src/main/java/com/example/hr/config/AppConfig.java
@@ -12,10 +12,9 @@
public class AppConfig {
@Bean
- public EmployeeApplication employeeApplication(
- EmployeeRepository employeeRepository,
+ public EmployeeApplication employeeApplication(EmployeeRepository employeeRepository,
EventPushlisher eventPushlisher) {
- SimpleEmployeeApplication employeeApplication= new SimpleEmployeeApplication();
+ SimpleEmployeeApplication employeeApplication = new SimpleEmployeeApplication();
employeeApplication.setEmployeeRepository(employeeRepository);
employeeApplication.setEventPushlisher(eventPushlisher);
return employeeApplication;
diff --git a/hr-microservice-hexagonal/src/main/java/com/example/hr/config/SwaggerConfig.java b/hr-microservice-hexagonal/src/main/java/com/example/hr/config/SwaggerConfig.java
new file mode 100644
index 0000000..5ab102e
--- /dev/null
+++ b/hr-microservice-hexagonal/src/main/java/com/example/hr/config/SwaggerConfig.java
@@ -0,0 +1,69 @@
+package com.example.hr.config;
+
+import java.util.Date;
+
+import javax.servlet.ServletContext;
+
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
+import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
+
+import springfox.documentation.builders.ApiInfoBuilder;
+import springfox.documentation.builders.PathSelectors;
+import springfox.documentation.builders.RequestHandlerSelectors;
+import springfox.documentation.service.ApiInfo;
+import springfox.documentation.spi.DocumentationType;
+import springfox.documentation.spring.web.paths.RelativePathProvider;
+import springfox.documentation.spring.web.plugins.Docket;
+import springfox.documentation.swagger2.annotations.EnableSwagger2;
+
+@Configuration
+@EnableSwagger2
+public class SwaggerConfig implements WebMvcConfigurer {
+ @Value("${major.version}")
+ private String majorVersion;
+ @Value("${minor.version}")
+ private String minorVersion;
+ @Value("${timestamp}")
+ private long timestamp;
+ @Value("${server.servlet.context-path}")
+ private String contextPath;
+ @Value("${spring.mvc.servlet.path}")
+ private String servletPath;
+
+ @Value("${server.address}")
+ private String host;
+
+ @Value("${server.port}")
+ private long port;
+
+ @Bean
+ public Docket api(ServletContext servletContext) {
+ return new Docket(DocumentationType.SWAGGER_2).select().apis(RequestHandlerSelectors.any())
+ .paths(PathSelectors.any()).build().host(host.concat(":").concat(Long.toString(port)))
+ .pathProvider(new RelativePathProvider(servletContext) {
+ @Override
+ public String getApplicationBasePath() {
+ return contextPath;
+ }
+ }).apiInfo(apiInfo());
+ }
+
+ private ApiInfo apiInfo() {
+
+ return new ApiInfoBuilder().title("Market Service")
+ .description("Client FrontEnd API
Updated: [" + (new Date(timestamp)).toString()
+ + " ]" + " ")
+ .version(majorVersion + "." + minorVersion).build();
+ }
+
+ @Override
+ public void addResourceHandlers(ResourceHandlerRegistry registry) {
+ registry.addResourceHandler("swagger-ui.html").addResourceLocations("classpath:/META-INF/resources/");
+
+ registry.addResourceHandler("/webjars/**").addResourceLocations("classpath:/META-INF/resources/webjars/");
+ }
+}
diff --git a/hr-microservice-hexagonal/src/main/java/com/example/hr/controller/EmployeeController.java b/hr-microservice-hexagonal/src/main/java/com/example/hr/controller/EmployeeController.java
index 5db82fb..60cb442 100644
--- a/hr-microservice-hexagonal/src/main/java/com/example/hr/controller/EmployeeController.java
+++ b/hr-microservice-hexagonal/src/main/java/com/example/hr/controller/EmployeeController.java
@@ -19,10 +19,10 @@
public class EmployeeController {
@Autowired
private EmployeeApplication employeeApplication;
-
+
@PostMapping
public EmployeeResponse hireEmployee(@RequestBody EmployeeRequest request) {
- employeeApplication.hireEmployee(null);
- return null;
+ employeeApplication.hireEmployee(request.toEmployee());
+ return new EmployeeResponse("success");
}
}
diff --git a/hr-microservice-hexagonal/src/main/java/com/example/hr/dto/EmployeeRequest.java b/hr-microservice-hexagonal/src/main/java/com/example/hr/dto/EmployeeRequest.java
index 1ce7761..574f9fe 100644
--- a/hr-microservice-hexagonal/src/main/java/com/example/hr/dto/EmployeeRequest.java
+++ b/hr-microservice-hexagonal/src/main/java/com/example/hr/dto/EmployeeRequest.java
@@ -1,5 +1,96 @@
package com.example.hr.dto;
+import com.example.hr.domain.Department;
+import com.example.hr.domain.Employee;
+import com.example.hr.domain.MoneyCurrency;
+
public class EmployeeRequest {
+ private String identity;
+ private String fullname;
+ private double salary;
+ private String iban;
+ private boolean fulltime;
+ private int birthYear;
+ private byte[] photo;
+ private Department department;
+
+ public EmployeeRequest() {
+ }
+
+ public String getIdentity() {
+ return identity;
+ }
+
+ public void setIdentity(String identity) {
+ this.identity = identity;
+ }
+
+ public String getFullname() {
+ return fullname;
+ }
+
+ public void setFullname(String fullname) {
+ this.fullname = fullname;
+ }
+
+ public double getSalary() {
+ return salary;
+ }
+
+ public void setSalary(double salary) {
+ this.salary = salary;
+ }
+
+ public String getIban() {
+ return iban;
+ }
+
+ public void setIban(String iban) {
+ this.iban = iban;
+ }
+
+ public boolean isFulltime() {
+ return fulltime;
+ }
+
+ public void setFulltime(boolean fulltime) {
+ this.fulltime = fulltime;
+ }
+
+ public int getBirthYear() {
+ return birthYear;
+ }
+
+ public void setBirthYear(int birthYear) {
+ this.birthYear = birthYear;
+ }
+
+ public byte[] getPhoto() {
+ return photo;
+ }
+
+ public void setPhoto(byte[] photo) {
+ this.photo = photo;
+ }
+
+ public Department getDepartment() {
+ return department;
+ }
+
+ public void setDepartment(Department department) {
+ this.department = department;
+ }
+
+ @Override
+ public String toString() {
+ return "EmployeeRequest [identity=" + identity + ", fullname=" + fullname + ", salary=" + salary + ", iban="
+ + iban + ", fulltime=" + fulltime + ", birthYear=" + birthYear + ", department=" + department + "]";
+ }
+
+ public Employee toEmployee() {
+ String[] tokens = fullname.split("\\w+");
+ return new Employee.Builder(identity).fullname(tokens[0], tokens[1]).iban(iban).salary(salary, MoneyCurrency.TL)
+ .birthYear(birthYear).fulltime(fulltime).department(department).photo(photo).build();
+ }
}
diff --git a/hr-microservice-hexagonal/src/main/java/com/example/hr/dto/EmployeeResponse.java b/hr-microservice-hexagonal/src/main/java/com/example/hr/dto/EmployeeResponse.java
index f20fc0e..1fb01f9 100644
--- a/hr-microservice-hexagonal/src/main/java/com/example/hr/dto/EmployeeResponse.java
+++ b/hr-microservice-hexagonal/src/main/java/com/example/hr/dto/EmployeeResponse.java
@@ -1,5 +1,14 @@
package com.example.hr.dto;
public class EmployeeResponse {
+ private String status;
+
+ public EmployeeResponse(String status) {
+ this.status = status;
+ }
+
+ public String getStatus() {
+ return status;
+ }
}
diff --git a/hr-microservice-hexagonal/src/main/java/com/example/hr/orm/EmployeeEntity.java b/hr-microservice-hexagonal/src/main/java/com/example/hr/orm/EmployeeEntity.java
new file mode 100644
index 0000000..a30eaa0
--- /dev/null
+++ b/hr-microservice-hexagonal/src/main/java/com/example/hr/orm/EmployeeEntity.java
@@ -0,0 +1,128 @@
+package com.example.hr.orm;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.EnumType;
+import javax.persistence.Enumerated;
+import javax.persistence.Id;
+import javax.persistence.Lob;
+import javax.persistence.Table;
+
+import com.example.hr.domain.Department;
+
+@Entity
+@Table(name = "employees")
+public class EmployeeEntity {
+ @Id
+ @Column(name = "identity")
+ private String identity;
+ private String fullname;
+ private double salary;
+ private String iban;
+ private boolean fulltime;
+ private int birthYear;
+ @Lob
+ @Column(columnDefinition = "longblob")
+ private byte[] photo;
+ @Enumerated(EnumType.STRING)
+ private Department department;
+
+ public EmployeeEntity() {
+ }
+
+ public String getIdentity() {
+ return identity;
+ }
+
+ public void setIdentity(String identity) {
+ this.identity = identity;
+ }
+
+ public String getFullname() {
+ return fullname;
+ }
+
+ public void setFullname(String fullname) {
+ this.fullname = fullname;
+ }
+
+ public double getSalary() {
+ return salary;
+ }
+
+ public void setSalary(double salary) {
+ this.salary = salary;
+ }
+
+ public String getIban() {
+ return iban;
+ }
+
+ public void setIban(String iban) {
+ this.iban = iban;
+ }
+
+ public boolean isFulltime() {
+ return fulltime;
+ }
+
+ public void setFulltime(boolean fulltime) {
+ this.fulltime = fulltime;
+ }
+
+ public int getBirthYear() {
+ return birthYear;
+ }
+
+ public void setBirthYear(int birthYear) {
+ this.birthYear = birthYear;
+ }
+
+ public byte[] getPhoto() {
+ return photo;
+ }
+
+ public void setPhoto(byte[] photo) {
+ this.photo = photo;
+ }
+
+ public Department getDepartment() {
+ return department;
+ }
+
+ public void setDepartment(Department department) {
+ this.department = department;
+ }
+
+ @Override
+ public int hashCode() {
+ final int prime = 31;
+ int result = 1;
+ result = prime * result + ((identity == null) ? 0 : identity.hashCode());
+ return result;
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if (this == obj)
+ return true;
+ if (obj == null)
+ return false;
+ if (getClass() != obj.getClass())
+ return false;
+ EmployeeEntity other = (EmployeeEntity) obj;
+ if (identity == null) {
+ if (other.identity != null)
+ return false;
+ } else if (!identity.equals(other.identity))
+ return false;
+ return true;
+ }
+
+ @Override
+ public String toString() {
+ return "EmployeeEntity [identity=" + identity + ", fullname=" + fullname + ", salary=" + salary + ", iban="
+ + iban + ", fulltime=" + fulltime + ", birthYear=" + birthYear + ", department=" + department + "]";
+ }
+
+}
diff --git a/hr-microservice-hexagonal/src/main/java/com/example/hr/repository/EmployeeJpaRepository.java b/hr-microservice-hexagonal/src/main/java/com/example/hr/repository/EmployeeJpaRepository.java
new file mode 100644
index 0000000..697c078
--- /dev/null
+++ b/hr-microservice-hexagonal/src/main/java/com/example/hr/repository/EmployeeJpaRepository.java
@@ -0,0 +1,9 @@
+package com.example.hr.repository;
+
+import org.springframework.data.jpa.repository.JpaRepository;
+
+import com.example.hr.orm.EmployeeEntity;
+
+public interface EmployeeJpaRepository extends JpaRepository {
+
+}
diff --git a/hr-microservice-hexagonal/src/main/resources/application.properties b/hr-microservice-hexagonal/src/main/resources/application.properties
index 780d201..65016f1 100644
--- a/hr-microservice-hexagonal/src/main/resources/application.properties
+++ b/hr-microservice-hexagonal/src/main/resources/application.properties
@@ -4,6 +4,10 @@ server.address=localhost
server.port=7001
server.servlet.context-path=/hr
spring.mvc.servlet.path=/api/v1
+major.version=1
+minor.version=0
+timestamp=1581420934
+#http://localhost:7001/hr/api/v1/swagger-ui.html
# Spring Data JPA - Data Source
spring.datasource.url=jdbc:mysql://localhost:3306/hr?useSSL=false