Каким образом можно отрефакторить метод add() метод для Controller?
Работаю с логикой для ProjectController класса, написанного ниже:
@RestController
@RequestMapping("/project")
public class ProjectController {
@Autowired
ProjectRepository projectRepository;
@Autowired
ProjectService projectService;
ProjectAdaptor projectAdaptor = new ProjectAdaptor();
/**
* Logger declaration for knowing the flow of execution for debugging
*/
private static final Logger logger = LoggerFactory.getLogger(ProjectController.class);
@GetMapping("/projects")
@Operation(summary = "Get list of all projects")
public ResponseEntity<List<ProjectDTO>> findAllProjects() {
logger.info("findAllProjects() is calling...");
List<ProjectDTO> projectList = projectService.findAllProducts();
if (projectList.isEmpty()) {
return new ResponseEntity<>(HttpStatus.NO_CONTENT);
}
return new ResponseEntity<>(projectList, HttpStatus.OK);
}
@GetMapping(value = "/{companyId}")
@Operation(summary = "Get list of projects from database based on companyId")
public @ResponseBody List<ProjectDTO> findAllProjects(@PathVariable("companyId") String companyId,
HttpServletRequest req) throws ErrorHandling {
logger.info("findAllProjects() is calling : ");
Long longCompanyId = Long.parseLong(companyId);
List<Project> projectList = projectService.getAllProjects(longCompanyId);
logger.info("findAllProjects ProjectList : " + projectList);
if (projectList != null && !projectList.isEmpty()) {
return projectAdaptor.databaseModelToUiDtoList(projectList);
} else {
throw new ErrorHandling("Project data not present.");
}
}
@PostMapping
@Operation(summary = "Add new project")
public ResponseEntity<ProjectDTO> addProject(@RequestBody Project project) {
logger.info("addProject() is calling...");
if (project != null) {
ProjectDTO projectDTO = projectAdaptor.databaseModelToUiDto(project);
Project entity = projectRepository.save(projectDTO);
return new ResponseEntity<>(entity, HttpStatus.OK);
}
return new ResponseEntity<>(new ProjectDTO("","",""), HttpStatus.BAD_REQUEST);
}
@PutMapping
@Operation(summary = "Updating project")
public ResponseEntity<ProjectDTO> updateById(@RequestBody Project project) {
logger.info("updateById() is calling...");
if (project != null) {
projectRepository.save(project);
return new ResponseEntity<>("Updated successfully.", HttpStatus.OK);
}
return new ResponseEntity<>(new ProjectDTO("","",""), HttpStatus.BAD_REQUEST);
}
@DeleteMapping
@Operation(summary = "Deleting project")
public ResponseEntity<ProjectDTO> deleteById(@PathVariable("id") Long id) {
logger.info("deleteById() is calling...");
Optional<Project> project = projectRepository.findById(id);
if (project.isPresent()) {
projectRepository.deleteById(id);
return new ResponseEntity<>("Successfully deleted.", HttpStatus.OK);
}
return new ResponseEntity<>(new ProjectDTO("","",""), HttpStatus.BAD_REQUEST);
}
}
Возникла проблема, как отрефакторить метод добавления:
@PostMapping
@Operation(summary = "Add new project")
public ResponseEntity<ProjectDTO> addProject(@RequestBody Project project) {
logger.info("addProject() is calling...");
if (project != null) {
ProjectDTO projectDTO = projectAdaptor.databaseModelToUiDto(project);
Project entity = projectRepository.save(projectDTO);
return new ResponseEntity<>(entity, HttpStatus.OK);
}
return new ResponseEntity<>(new ProjectDTO("","",""), HttpStatus.BAD_REQUEST);
}
Возник вопрос с тем, нужно ли конвертировать перед сохранением Entity в DTO. Если да, то будет ли проблемой иметь во входящем параметре Entity или лучше переписать логику под это?
Буду очень благодарен за помощь по данному вопросу.
Готов также предоставить любую дополнительную информацию, способную помочь в данном вопросе при необходимости.
Ответы (1 шт):
Автор решения: invzbl3
→ Ссылка
Итоговое полученное решение:
@Operation(summary = "Add new project")
public ResponseEntity<ProjectDTO> addProject(@RequestBody Project project) {
logger.info("addProject() is calling...");
if (project != null) {
Project entity = projectRepository.save(project);
ProjectDTO projectDTO = projectAdaptor.databaseModelToUiDto(entity);
return new ResponseEntity<>(projectDTO, HttpStatus.OK);
}
return new ResponseEntity<>(new ProjectDTO("","",""), HttpStatus.BAD_REQUEST);
}
