Skip to content

Commit

Permalink
add modelmapper and configure it to convert EmployeeRequest to Employee
Browse files Browse the repository at this point in the history
  • Loading branch information
deepcloudlabs committed Jun 23, 2020
1 parent b8a0c6c commit 9ddbc5d
Show file tree
Hide file tree
Showing 21 changed files with 164 additions and 41 deletions.
5 changes: 5 additions & 0 deletions hr-microservice-hexagonal/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,11 @@
<artifactId>hr-domain</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.modelmapper</groupId>
<artifactId>modelmapper</artifactId>
<version>2.3.0</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,11 @@
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

/**
*
* @author Binnur Kurt <binnur.kurt@gmail.com>
*
*/
@SpringBootApplication
public class HrMicroserviceHexagonalApplication {

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,11 @@
import com.example.hr.repository.EmployeeJpaRepository;
import com.example.hr.repository.EmployeeRepository;

/**
*
* @author Binnur Kurt <binnur.kurt@gmail.com>
*
*/
@Repository
public class EmployeeRepositoryAdapter implements EmployeeRepository {
@Autowired
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,11 @@
import com.example.hr.events.BusinessEvent;
import com.example.hr.infrastructure.EventPushlisher;

/**
*
* @author Binnur Kurt <binnur.kurt@gmail.com>
*
*/
@Service
public class EventPuslisherAdapter implements EventPushlisher {

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,11 @@
import com.example.hr.infrastructure.EventPushlisher;
import com.example.hr.repository.EmployeeRepository;

/**
*
* @author Binnur Kurt <binnur.kurt@gmail.com>
*
*/
@Configuration
public class AppConfig {

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
package com.example.hr.config;

import org.modelmapper.Converter;
import org.modelmapper.ModelMapper;
import org.modelmapper.TypeMap;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import com.example.hr.domain.Employee;
import com.example.hr.domain.MoneyCurrency;
import com.example.hr.dto.EmployeeRequest;

/**
*
* @author Binnur Kurt <binnur.kurt@gmail.com>
*
*/
@Configuration
public class ModelMapperConfig {

@Bean
public ModelMapper modelMapper() {
ModelMapper mapper = new ModelMapper();
TypeMap<EmployeeRequest, Employee> employeeRequestToEmployeeTypeMap = mapper.getTypeMap(EmployeeRequest.class,
Employee.class);
if (employeeRequestToEmployeeTypeMap == null) {
employeeRequestToEmployeeTypeMap = mapper.createTypeMap(EmployeeRequest.class, Employee.class);
}
employeeRequestToEmployeeTypeMap.setProvider(provisionRequest -> {
var employeeRequest = EmployeeRequest.class.cast(provisionRequest.getSource());
String[] tokens = employeeRequest.getFullname().split("\\w+");
return new Employee.Builder(employeeRequest.getIdentity()).fullname(tokens[0], tokens[1])
.iban(employeeRequest.getIban()).salary(employeeRequest.getSalary(), MoneyCurrency.TL)
.birthYear(employeeRequest.getBirthYear()).fulltime(employeeRequest.isFulltime())
.department(employeeRequest.getDepartment()).photo(employeeRequest.getPhoto()).build();
});
return mapper;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,11 @@
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;

/**
*
* @author Binnur Kurt <binnur.kurt@gmail.com>
*
*/
@Configuration
@EnableSwagger2
public class SwaggerConfig implements WebMvcConfigurer {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,8 @@

import java.util.Map;

import org.modelmapper.ModelMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.MediaType;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.DeleteMapping;
Expand All @@ -17,11 +17,17 @@
import org.springframework.web.context.annotation.RequestScope;

import com.example.hr.application.EmployeeApplication;
import com.example.hr.domain.Employee;
import com.example.hr.dto.EmployeeRequest;
import com.example.hr.dto.EmployeeResponse;
import com.example.hr.orm.EmployeeEntity;
import com.example.validation.TcKimlikNo;

/**
*
* @author Binnur Kurt <binnur.kurt@gmail.com>
*
*/
@RestController
@RequestScope
@RequestMapping("/employees")
Expand All @@ -30,32 +36,34 @@
public class EmployeeController {
@Autowired
private EmployeeApplication employeeApplication;
@Autowired
private ModelMapper mapper;

@PostMapping
public EmployeeResponse hireEmployee(@RequestBody @Validated EmployeeRequest request) {
employeeApplication.hireEmployee(request.toEmployee());
employeeApplication.hireEmployee(mapper.map(request, Employee.class));
return new EmployeeResponse("success");
}

@PutMapping("{identity}")
public void updateEmployee(@PathVariable @TcKimlikNo String identity,
@Validated @RequestBody EmployeeEntity e) {

public void updateEmployee(@PathVariable @TcKimlikNo String identity, @Validated @RequestBody EmployeeEntity e) {

}

@PatchMapping("{identity}")
public void patchEmployee(@PathVariable @TcKimlikNo String identity,
Map<String,Object> employee) {
EmployeeEntity employeeEntity= null;
public void patchEmployee(@PathVariable @TcKimlikNo String identity, Map<String, Object> employee) {
EmployeeEntity employeeEntity = null;
var clazz = EmployeeEntity.class;
employee.forEach((field,value)->{
try {
employee.forEach((field, value) -> {
try {
clazz.getDeclaredField(field).set(employeeEntity, value);
} catch (Exception e) {}
} catch (Exception e) {
}
});
}
//@GetMapping

// @GetMapping

@DeleteMapping("{identity}")
public EmployeeResponse fireEmployee(@PathVariable @TcKimlikNo String identity) {
employeeApplication.fireEmployee(null);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,15 +6,18 @@
import javax.validation.constraints.Size;

import com.example.hr.domain.Department;
import com.example.hr.domain.Employee;
import com.example.hr.domain.MoneyCurrency;
import com.example.validation.Iban;
import com.example.validation.TcKimlikNo;

/**
*
* @author Binnur Kurt <binnur.kurt@gmail.com>
*
*/
public class EmployeeRequest {
@TcKimlikNo
private String identity;
@Size(min=6)
@Size(min = 6)
private String fullname;
@Min(3_000)
private double salary;
Expand Down Expand Up @@ -101,10 +104,4 @@ public String toString() {
+ 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();
}

}
Original file line number Diff line number Diff line change
@@ -1,5 +1,10 @@
package com.example.hr.dto;

/**
*
* @author Binnur Kurt <binnur.kurt@gmail.com>
*
*/
public class EmployeeResponse {
private String status;

Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,10 @@
package com.example.hr.dto;

/**
*
* @author Binnur Kurt <binnur.kurt@gmail.com>
*
*/
public class RestErrorMessage {
private int errorId;
private String message;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,36 +14,34 @@

import com.example.hr.dto.RestErrorMessage;

/**
*
* @author Binnur Kurt <binnur.kurt@gmail.com>
*
*/
@RestControllerAdvice
public class RestErrorHandler {

@ExceptionHandler(RuntimeException.class)
@ResponseStatus(code = HttpStatus.BAD_REQUEST)
public RestErrorMessage handleException(Exception e) {
return new RestErrorMessage(100,e.getMessage(),"6b8038e5-3b8f-4230-bfe8-4de2c422469f");
return new RestErrorMessage(100, e.getMessage(), "6b8038e5-3b8f-4230-bfe8-4de2c422469f");
}

@ExceptionHandler(ConstraintViolationException.class)
@ResponseStatus(code = HttpStatus.BAD_REQUEST)
public RestErrorMessage handleConstraintViolationException(ConstraintViolationException e) {
var violations = e.getConstraintViolations()
.stream()
.map(ConstraintViolation::getMessage)
.collect(Collectors.joining("|"));
return new RestErrorMessage(200,violations,"7c248b97-9aa8-46fd-b5b2-9f8ea537635c");
var violations = e.getConstraintViolations().stream().map(ConstraintViolation::getMessage)
.collect(Collectors.joining("|"));
return new RestErrorMessage(200, violations, "7c248b97-9aa8-46fd-b5b2-9f8ea537635c");
}



@ExceptionHandler(MethodArgumentNotValidException.class)
@ResponseStatus(code = HttpStatus.BAD_REQUEST)
public RestErrorMessage handleMethodArgumentNotValidException(MethodArgumentNotValidException e) {
var violations = e.getBindingResult()
.getAllErrors()
.stream()
.map(ObjectError::getDefaultMessage)
var violations = e.getBindingResult().getAllErrors().stream().map(ObjectError::getDefaultMessage)
.collect(Collectors.joining("|"));
return new RestErrorMessage(200,violations,"7c248b97-9aa8-46fd-b5b2-9f8ea537635c");
return new RestErrorMessage(200, violations, "7c248b97-9aa8-46fd-b5b2-9f8ea537635c");
}



}
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,11 @@
import com.example.validation.Iban;
import com.example.validation.TcKimlikNo;

/**
*
* @author Binnur Kurt <binnur.kurt@gmail.com>
*
*/
@Entity
@Table(name = "employees")
@DynamicUpdate
Expand All @@ -28,7 +33,7 @@ public class EmployeeEntity {
@Size(min = 5)
private String fullname;
@Min(3_000)
//@Column(columnDefinition = "float default 1000")
// @Column(columnDefinition = "float default 1000")
private Double salary;
@Iban
private String iban;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,11 @@

import com.example.hr.orm.EmployeeEntity;

/**
*
* @author Binnur Kurt <binnur.kurt@gmail.com>
*
*/
public interface EmployeeJpaRepository extends JpaRepository<EmployeeEntity, String> {

}
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,11 @@
import javax.validation.Payload;
import javax.validation.constraints.Pattern;

/**
*
* @author Binnur Kurt <binnur.kurt@gmail.com>
*
*/
@Target({ ElementType.FIELD })
@Retention(RetentionPolicy.RUNTIME)
@Pattern(regexp = "^\\+?[a-z0-9](([-+.]|[_]+)?[a-z0-9]+)*@([a-z0-9]+(\\.|\\-))+[a-z]{2,6}$", message = "{validation.email}")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,11 @@
import javax.validation.Constraint;
import javax.validation.Payload;

/**
*
* @author Binnur Kurt <binnur.kurt@gmail.com>
*
*/
@Target({ ElementType.FIELD })
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy = IbanValidator.class)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,11 @@
import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;

/**
*
* @author Binnur Kurt <binnur.kurt@gmail.com>
*
*/
public class IbanValidator implements ConstraintValidator<Iban, String> {
private static final long MAX = 999999999;
private static final long MODULUS = 97;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,11 @@
import javax.validation.constraints.Pattern;
import javax.validation.constraints.Size;

/**
*
* @author Binnur Kurt <binnur.kurt@gmail.com>
*
*/
@Target({ ElementType.FIELD })
@Retention(RetentionPolicy.RUNTIME)
@Pattern.List({ @Pattern(regexp = "^.*\\d+.*$", message = "{validation.strongPassword2}"),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,11 @@
import javax.validation.Constraint;
import javax.validation.Payload;

/**
*
* @author Binnur Kurt <binnur.kurt@gmail.com>
*
*/
@Target({ ElementType.FIELD, ElementType.PARAMETER })
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy = TcKimlikNoValidator.class)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,11 @@
import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;

/**
*
* @author Binnur Kurt <binnur.kurt@gmail.com>
*
*/
public class TcKimlikNoValidator implements ConstraintValidator<TcKimlikNo, String> {

@Override
Expand Down
Loading

0 comments on commit 9ddbc5d

Please sign in to comment.