이번포스팅에서는 약알림을 생성하는 api를 구현해보겠다.
dto 패키지 아래에 medication 패키지 아래에 CreateMedicationRequest 클래스를 생성한다.
@Getter
public class CreateMedicationRequest {
private Long memberId;
private String description;
private List<Integer> dayOfTheWeek;
private LocalTime dosingTime;
}
service 패키지 아래에 MedicationService 클래스를 생성한다
controller 패키지 아래에 MedicationController 클래스를 생성한다
@Service
@RequiredArgsConstructor
public class MedicationService {
private final MedicationRepository medicationRepo;
private final MemberRepository memberRepo;
private final UserService userService;
}
@Controller
@RequiredArgsConstructor
public class MedicationController {
private final MedicationService medicationService;
}
MedicationService에 다음과 같이 메서드를 구현한다.
1. 컨트롤러로부터 멤버 id와 약 설명, 요일 리스트, 복용시간을 받고
2. member_id가 유효한지 확인하고
3. 현재 로그인한 유저와 같은 family인지 확인하고 (아직 구현 x)
4. 요일의 값이 0부터 6까지인지 확인하고
5. medication을 insert한 후 dto로 변환해서 리스트에 저장하고
6. dto 리스트를 반환한다.
@Transactional
public List<MedicationDTO> createMedication(
Long memberId,
String description,
List<Integer> dayOfTheWeekList,
LocalTime dosingTime
) {
Member member = memberRepo.findById(memberId)
.orElseThrow(() -> new InvalidUserIdException(memberId));
// TODO: 현재 로그인한 유저와 memberId에 해당하는 유저가 같은 family_id를 가지고 있는지 확인
return MedicationDTO.entityToDto(
medicationRepo.save(
new Medication(
null,
member,
description,
dayOfTheWeekList.stream()
.map(String::valueOf)
.collect(Collectors.joining(" ")),
dosingTime
)
)
);
}
토큰을 구현한 후에 같은 family_id를 가지고 있는 경우에만 medication을 추가할 수 있도록 수정할 것이다.
MedicationController에서 /api/medication/createMedication 경로에 대한 POST요청에 응답하는 메서드를 구현한다
1. CreateMedicationRequest를 body로 받고
2. MedicationService의 createMedication 메서드를 호출하고
3. MedicationDTO 리스트를 반환한다
@PostMapping("/api/medication/createMedication")
public MedicationDTO createMedication(
@RequestBody CreateMedicationRequest body
){
return medicationService.createMedication(
body.getMemberId(),
body.getDescription(),
body.getDayOfTheWeekList(),
body.getDosingTime()
);
}
다음과 같이 request를 작성하고 전송한다.
월요일, 화요일, 수요일 10시에 아침약 알림을 추가하겠다는 뜻이다.
그럼 다음과 같이 정상적으로 응답을 받을 수 있다.
[WithParents] 약알림 삭제 기능 구현, deleteMedication api 구현 (0) | 2022.12.02 |
---|---|
[WithParents] 약알림 수정 기능 구현, modifyMedication api 구현 (0) | 2022.12.02 |
[WithParents] Medication 엔티티, 레파지토리, MedicationDTO 생성 (1) | 2022.11.23 |
[WithParents] 예외처리 | custom exception | RestControllerAdvice | ExceptionHandler (0) | 2022.11.16 |
[WithParents] UserController 생성 | member, family 생성 api 구현 (0) | 2022.11.09 |