상세 컨텐츠

본문 제목

[WithParents] 약알림 추가 기능, createMedication api 구현

Project/WithParents

by yooputer 2022. 11. 23. 16:54

본문

 

이번포스팅에서는 약알림을 생성하는 api를 구현해보겠다.


CreateMedicationRequest 정의

dto 패키지 아래에 medication 패키지 아래에 CreateMedicationRequest 클래스를 생성한다.

@Getter
public class CreateMedicationRequest {

    private Long memberId;
    private String description;
    private List<Integer> dayOfTheWeek;
    private LocalTime dosingTime;

}

createMedication api 구현

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에서 createMedication 메서드 구현

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에서 createMedication 메서드 구현

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시에 아침약 알림을 추가하겠다는 뜻이다.

 

그럼 다음과 같이 정상적으로 응답을 받을 수 있다.

 

 

 

관련글 더보기