Commit ab33b427 authored by Giridhari Sahoo's avatar Giridhari Sahoo

adding validation to the controller

parent 2f5528af
...@@ -5,6 +5,7 @@ import com.nisum.Employeeinfo.mapper.EmployeeMapper; ...@@ -5,6 +5,7 @@ import com.nisum.Employeeinfo.mapper.EmployeeMapper;
import com.nisum.Employeeinfo.model.Employee; import com.nisum.Employeeinfo.model.Employee;
import com.nisum.Employeeinfo.service.EmployeeService; import com.nisum.Employeeinfo.service.EmployeeService;
import com.nisum.Employeeinfo.service.EmployeeServiceImpl; import com.nisum.Employeeinfo.service.EmployeeServiceImpl;
import com.nisum.Employeeinfo.validator.CommonServiceValidator;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
...@@ -20,38 +21,71 @@ public class EmployeeController { ...@@ -20,38 +21,71 @@ public class EmployeeController {
@Autowired @Autowired
private EmployeeService employeeService; private EmployeeService employeeService;
@Autowired
private CommonServiceValidator validator;
private static final Logger log= LoggerFactory.getLogger(EmployeeController.class); private static final Logger log= LoggerFactory.getLogger(EmployeeController.class);
@PostMapping("/addEmployee") @PostMapping("/addEmployee")
public Mono<ResponseEntity<Employee>> addEmployee(@RequestBody Mono<EmployeeDto> mono){ public Mono<ResponseEntity<Employee>> addEmployee(@RequestBody Mono<EmployeeDto> mono){
return employeeService.addEmployee(mono) // return employeeService.addEmployee(mono)
.map(ResponseEntity::ok); // .map(ResponseEntity::ok);
return mono
.doOnNext(employeeDto -> log.info("validating incoming employee data: {}",employeeDto))
.flatMap(employeeDto -> {
Employee employee= EmployeeMapper.toEntity(employeeDto);
return validateEmployee(employee)
.then(employeeService.addEmployee(Mono.just(employeeDto)));
})
.map(ResponseEntity::ok)
.doOnError(error -> log.error("Error while adding employee: {}", error.getMessage()));
} }
@GetMapping("/getEmployeeById/{id}") @GetMapping("/getEmployeeById/{id}")
public Mono<Employee> getEmployeeById(@PathVariable Integer id){ public Mono<ResponseEntity<Employee>> getEmployeeById(@PathVariable Integer id){
return employeeService.getEmployeeById(id) // return employeeService.getEmployeeById(id)
.doOnNext(employee -> log.info("received employee {}",employee)); // .doOnNext(employee -> log.info("received employee {}",employee));
return validator.isEmployeeIdValid(id)
.flatMap(valid -> employeeService.getEmployeeById(id))
.map(ResponseEntity::ok)
.doOnError(error -> log.error("Error fetching employee by ID: {}", error.getMessage()));
} }
@GetMapping("/getAllEmployee") @GetMapping("/getAllEmployee")
public Flux<Employee> getAllEmployee(){ public Flux<Employee> getAllEmployee(){
return employeeService.getAllEmployee() return employeeService.getAllEmployee()
.doOnNext(employee -> log.info("received all employee {}", employee)); .doOnNext(employee -> log.info("Processing employee data: {}", employee))
.doOnError(error -> log.error("Error fetching employees: {}", error.getMessage()));
} }
@PutMapping("/{id}/updateEmployee") @PutMapping("/{id}/updateEmployee")
public Mono<Employee> updateEmployee(@PathVariable Integer id, @RequestBody Mono<EmployeeDto> updatedEmployee){ public Mono<ResponseEntity<Employee>> updateEmployee(@PathVariable Integer id, @RequestBody Mono<EmployeeDto> updatedEmployee) {
return validator.isEmployeeIdValid(id)
return employeeService.updateEmployee(id,updatedEmployee); .flatMap(valid -> updatedEmployee
.flatMap(dto -> {
Employee employee = EmployeeMapper.toEntity(dto);
return validateEmployee(employee)
.then(employeeService.updateEmployee(id, Mono.just(dto)));
})
)
.map(ResponseEntity::ok)
.doOnError(error -> log.error("Error updating employee: {}", error.getMessage()));
} }
@DeleteMapping("/deleteMapping/{id}") @DeleteMapping("/deleteMapping/{id}")
public Mono<Void> deleteEmployee(@PathVariable Integer id){ public Mono<ResponseEntity<Object>> deleteEmployee(@PathVariable Integer id){
return validator.isEmployeeIdValid(id)
.flatMap(valid -> employeeService.deleteEmployee(id))
.thenReturn(ResponseEntity.ok().build())
.doOnError(error -> log.error("Error deleting employee: {}", error.getMessage()));
}
return employeeService.deleteEmployee(id); private Mono<Void> validateEmployee(Employee employee) {
return validator.isEmployeeNameValid(employee.getName())
.then(validator.isEmployeeSalaryValid(employee.getSal()))
.then();
} }
} }
package com.nisum.Employeeinfo.validator; package com.nisum.Employeeinfo.validator;
import com.nisum.Employeeinfo.errorcode.ApiErrorCode;
import com.nisum.Employeeinfo.exception.EmployeeNotFoundException;
import com.nisum.Employeeinfo.exception.InvalidEmployeeDataException;
import com.nisum.Employeeinfo.model.Employee;
import org.springframework.stereotype.Component;
import reactor.core.publisher.Mono;
@Component
public class CommonServiceValidator { public class CommonServiceValidator {
//validate if employee id is not null
public Mono<Boolean> isEmployeeIdValid(Integer id) {
if (id != null) {
return Mono.just(true);
}
return Mono.error(new InvalidEmployeeDataException(ApiErrorCode.INVALID_EMPLOYEE_DATA, "Employee ID cannot be null"));
}
// Validate if Employee name is not null or empty
public Mono<Boolean> isEmployeeNameValid(String name) {
if (name != null && !name.trim().isEmpty()) {
return Mono.just(true);
}
return Mono.error(new InvalidEmployeeDataException(ApiErrorCode.INVALID_EMPLOYEE_DATA, "Employee name cannot be empty"));
}
// Validate if Employee salary is non-negative
public Mono<Boolean> isEmployeeSalaryValid(Double sal) {
if (sal != null && sal >= 0) {
return Mono.just(true);
}
return Mono.error(new InvalidEmployeeDataException(ApiErrorCode.INVALID_EMPLOYEE_DATA, "Employee salary must be non-negative"));
}
// Validate if the Employee object is valid as a whole
public Mono<Boolean> isEmployeeObjectValid(Employee employee) {
if (employee == null) {
return Mono.error(new EmployeeNotFoundException(ApiErrorCode.EMPLOYEE_NOT_FOUND, "Employee object cannot be null"));
}
return isEmployeeIdValid(employee.getId())
.flatMap(valid -> isEmployeeNameValid(employee.getName()))
.flatMap(valid -> isEmployeeSalaryValid(employee.getSal()));
}
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment