From ad139d5b1cf6e384b2e4efb4f6ec8c2db3a25216 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Slov=C3=ADk?= <xslovik@fi.muni.cz> Date: Wed, 5 Apr 2023 23:00:45 +0200 Subject: [PATCH] Implementing Airplane update --- .../core/facade/airplane/AirplaneFacade.java | 2 ++ .../facade/airplane/AirplaneFacadeImpl.java | 36 +++++++++++++------ .../pa165/core/rest/AirplaneController.java | 6 ++-- .../service/airplane/AirplaneService.java | 1 + .../service/airplane/AirplaneServiceImpl.java | 12 +++++++ 5 files changed, 43 insertions(+), 14 deletions(-) diff --git a/core/src/main/java/cz/muni/fi/pa165/core/facade/airplane/AirplaneFacade.java b/core/src/main/java/cz/muni/fi/pa165/core/facade/airplane/AirplaneFacade.java index 09a4492..f260b24 100644 --- a/core/src/main/java/cz/muni/fi/pa165/core/facade/airplane/AirplaneFacade.java +++ b/core/src/main/java/cz/muni/fi/pa165/core/facade/airplane/AirplaneFacade.java @@ -25,4 +25,6 @@ public interface AirplaneFacade<K> { AirplaneDto assignAirplaneType(Long airplaneId, Long airplaneTypeId); void deleteAirplaneTypeAssignment(Long airplaneId, Long airplaneTypeId); + + AirplaneDto update(Long id, NewAirplaneDtoRequest newAirplaneDto); } diff --git a/core/src/main/java/cz/muni/fi/pa165/core/facade/airplane/AirplaneFacadeImpl.java b/core/src/main/java/cz/muni/fi/pa165/core/facade/airplane/AirplaneFacadeImpl.java index b0f969d..d9b9f44 100644 --- a/core/src/main/java/cz/muni/fi/pa165/core/facade/airplane/AirplaneFacadeImpl.java +++ b/core/src/main/java/cz/muni/fi/pa165/core/facade/airplane/AirplaneFacadeImpl.java @@ -1,6 +1,7 @@ package cz.muni.fi.pa165.core.facade.airplane; import cz.muni.fi.pa165.core.data.domain.Airplane; +import cz.muni.fi.pa165.core.exceptions.ResourceNotFoundException; import cz.muni.fi.pa165.core.model.AirplaneDto; import cz.muni.fi.pa165.core.model.AirplaneTypeDto; import cz.muni.fi.pa165.core.model.NewAirplaneDtoRequest; @@ -42,7 +43,7 @@ public class AirplaneFacadeImpl implements AirplaneFacade<Long> { @Override public List<AirplaneDto> findAll() { - var entities = airplaneTypeService.findAll(); + var entities = airplaneService.findAll(); return entities.stream() .map(entity -> modelMapper.map(entity, AirplaneDto.class)) .toList(); @@ -63,19 +64,17 @@ public class AirplaneFacadeImpl implements AirplaneFacade<Long> { var airplaneEntityOpt = airplaneService.findById(airplaneId); var airplaneTypeEntityOpt = airplaneTypeService.findById(airplaneTypeId); - if (airplaneEntityOpt.isPresent() && airplaneTypeEntityOpt.isPresent()) { - var airplaneEntity = airplaneEntityOpt.get(); - var airplaneTypeEntity = airplaneTypeEntityOpt.get(); + if (airplaneEntityOpt.isEmpty() || airplaneTypeEntityOpt.isEmpty()) { + throw new ResourceNotFoundException("Not Found."); + } - airplaneEntity.setType(airplaneTypeEntity); - var airplaneTypeDto = modelMapper.map(airplaneTypeEntity, AirplaneTypeDto.class); - var airplaneDto = modelMapper.map(airplaneEntity, AirplaneDto.class); - airplaneDto.setType(airplaneTypeDto); + var airplaneEntity = airplaneEntityOpt.get(); + var airplaneTypeEntity = airplaneTypeEntityOpt.get(); - return airplaneDto; - } + airplaneEntity.setType(airplaneTypeEntity); + airplaneService.save(airplaneEntity); - return null; + return mapToDtoWithMember(airplaneEntity); } @Override @@ -87,4 +86,19 @@ public class AirplaneFacadeImpl implements AirplaneFacade<Long> { airplaneEntity.get().setType(null); } } + + @Override + public AirplaneDto update(Long id, NewAirplaneDtoRequest newAirplaneDto) { + var newAirplaneEntity = modelMapper.map(newAirplaneDto, Airplane.class); + + return modelMapper.map(airplaneService.update(id, newAirplaneEntity), AirplaneDto.class); + } + + private AirplaneDto mapToDtoWithMember(Airplane airplane) { + var airplaneTypeDto = modelMapper.map(airplane.getType(), AirplaneTypeDto.class); + var airplaneDto = modelMapper.map(airplane, AirplaneDto.class); + airplaneDto.setType(airplaneTypeDto); + + return airplaneDto; + } } diff --git a/core/src/main/java/cz/muni/fi/pa165/core/rest/AirplaneController.java b/core/src/main/java/cz/muni/fi/pa165/core/rest/AirplaneController.java index 5272433..d108beb 100644 --- a/core/src/main/java/cz/muni/fi/pa165/core/rest/AirplaneController.java +++ b/core/src/main/java/cz/muni/fi/pa165/core/rest/AirplaneController.java @@ -108,14 +108,14 @@ public class AirplaneController implements AirplaneApiDelegate { * Updates a airplane by id and returns it as a response. * * @param id (required) - * @param airplaneDto (required) + * @param newAirplaneDtoRequest (required) * @return OK (status code 200) * or Input data not correct (status code 400) * @see AirplaneApi#updateAirplane */ @Override - public ResponseEntity<AirplaneDto> updateAirplane(Long id, AirplaneDto airplaneDto) { - return AirplaneApiDelegate.super.updateAirplane(id, airplaneDto); + public ResponseEntity<AirplaneDto> updateAirplane(Long id, NewAirplaneDtoRequest newAirplaneDtoRequest) { + return ResponseEntity.ok(airplaneFacade.update(id, newAirplaneDtoRequest)); } /** diff --git a/core/src/main/java/cz/muni/fi/pa165/core/service/airplane/AirplaneService.java b/core/src/main/java/cz/muni/fi/pa165/core/service/airplane/AirplaneService.java index eefbeed..c724f1e 100644 --- a/core/src/main/java/cz/muni/fi/pa165/core/service/airplane/AirplaneService.java +++ b/core/src/main/java/cz/muni/fi/pa165/core/service/airplane/AirplaneService.java @@ -5,4 +5,5 @@ import cz.muni.fi.pa165.core.service.common.BaseService; public interface AirplaneService extends BaseService<Airplane, Long> { + Airplane update(Long id, Airplane newAirplane); } diff --git a/core/src/main/java/cz/muni/fi/pa165/core/service/airplane/AirplaneServiceImpl.java b/core/src/main/java/cz/muni/fi/pa165/core/service/airplane/AirplaneServiceImpl.java index 26dedd4..a69211a 100644 --- a/core/src/main/java/cz/muni/fi/pa165/core/service/airplane/AirplaneServiceImpl.java +++ b/core/src/main/java/cz/muni/fi/pa165/core/service/airplane/AirplaneServiceImpl.java @@ -2,6 +2,7 @@ package cz.muni.fi.pa165.core.service.airplane; import cz.muni.fi.pa165.core.data.domain.Airplane; import cz.muni.fi.pa165.core.data.repository.airplane.AirplaneRepository; +import cz.muni.fi.pa165.core.exceptions.ResourceNotFoundException; import cz.muni.fi.pa165.core.service.common.BaseServiceImpl; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -16,4 +17,15 @@ public class AirplaneServiceImpl extends BaseServiceImpl<Airplane, Long> impleme super(airplaneRepository); this.airplaneRepository = airplaneRepository; } + + @Override + public Airplane update(Long id, Airplane newAirplane) { + var entityToUpdate = airplaneRepository.findById(id) + .orElseThrow(() -> new ResourceNotFoundException("Not Found.")); + + entityToUpdate.setName(newAirplane.getName()); + entityToUpdate.setCapacity(newAirplane.getCapacity()); + + return airplaneRepository.save(entityToUpdate); + } } -- GitLab