package com.nisum.poc.api.employee.controller; import com.nisum.poc.api.employee.dto.EmployeeDto; import com.nisum.poc.api.employee.entity.Employee; import com.nisum.poc.api.employee.request.EmployeeProfileRequest; import com.nisum.poc.api.employee.response.EmployeeProfileResponse; import com.nisum.poc.api.employee.service.IEmployeeProfileService; import org.modelmapper.ModelMapper; import org.modelmapper.convention.MatchingStrategies; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import reactor.core.publisher.Flux; import reactor.core.publisher.Mono; @RestController @RequestMapping(value = "/employee") public class EmployeeController { /* Customer Profile Service */ private IEmployeeProfileService employeeProfileService; /** * * @param employeeProfileService */ @Autowired public EmployeeController(IEmployeeProfileService employeeProfileService){ this.employeeProfileService = employeeProfileService; } /** * * @param employeeProfileRequest * @return */ @PostMapping(value = "/v1/profile") public Mono<Employee> createCustomer(@RequestBody EmployeeProfileRequest employeeProfileRequest){ return employeeProfileService.createEmployeeProfile(serviceDtoConvertor(employeeProfileRequest)); } @GetMapping(value = "/all") Flux<Employee> findAllEmployee(){ return employeeProfileService.findAllEmployee(); } @GetMapping(value = "/v1/{empId}/details") public Mono<Employee> fetchEmployeeDetailsById(@PathVariable Long empId) { return employeeProfileService.fetchEmployeeDetailsById(empId); } /** * * @param employeeProfileRequest * @return */ private EmployeeDto serviceDtoConvertor(EmployeeProfileRequest employeeProfileRequest){ ModelMapper modelMapper = new ModelMapper(); modelMapper.getConfiguration().setMatchingStrategy(MatchingStrategies.STRICT); return modelMapper.map(employeeProfileRequest, EmployeeDto.class); } }