이번 포스팅에서는 medication을 수정하는 요청을 처리하는 api를 구현해보겠다
dto패키지 > medication 패키지에 ModifyMedicationRequest 클래스를 생성하고
아래와 같이 작성한다.
@Getter
public class ModifyMedicationRequest {
private Long medicationId;
private String description;
private List<Integer> dayOfTheWeekList;
private LocalTime dosingTime;
}
@Transactional
public MedicationDTO modifyMedication(
Long medicationId,
String description,
List<Integer> dayOfTheWeekList,
LocalTime dosingTime
) {
Medication medication = medicationRepo.findById(medicationId)
.orElseThrow(() -> new InvalidIdException(medicationId, "medication"));
if (description != null) {
medication.setDescription(description);
}
if (dayOfTheWeekList != null) {
medication.setDayOfTheWeekList(
dayOfTheWeekList.stream()
.map(String::valueOf)
.collect(Collectors.joining(" "))
);
}
if (dosingTime != null) {
medication.setDosingTime(dosingTime);
}
return MedicationDTO.entityToDto(medication);
}
만약 description이나 dayOfTheWeekList, dosingTime의 값이 null이라면 수정하지 않는다
MedicationController에 다음과 같이 메서드를 작성한다
@PatchMapping("/api/medication/modifyMedication")
public MedicationDTO modifyMedication(
@RequestBody ModifyMedicationRequest body
){
return medicationService.modifyMedication(
body.getMedicationId(),
body.getDescription(),
body.getDayOfTheWeekList(),
body.getDosingTime()
);
}
위와같은 request를 보내면 아래와같이 response가 도착한다
데이터베이스의 값도 잘 변경되는 것을 확인할 수 있다
[WithParents] 약알림 조회 기능 구현, getMedicationList api 구현 (1) | 2022.12.02 |
---|---|
[WithParents] 약알림 삭제 기능 구현, deleteMedication api 구현 (0) | 2022.12.02 |
[WithParents] 약알림 추가 기능, createMedication api 구현 (0) | 2022.11.23 |
[WithParents] Medication 엔티티, 레파지토리, MedicationDTO 생성 (1) | 2022.11.23 |
[WithParents] 예외처리 | custom exception | RestControllerAdvice | ExceptionHandler (0) | 2022.11.16 |