Skip to content

Commit c5ca89c

Browse files
authored
Merge pull request #120 from prgrms-web-devcourse-final-project/feat-schedule
프론트 요청에 따른 다음 예방접종 일정 목록 받아오기
2 parents 1d63d30 + 406165e commit c5ca89c

3 files changed

Lines changed: 48 additions & 2 deletions

File tree

src/main/java/com/grepp/teamnotfound/app/controller/api/schedule/ScheduleApiController.java

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222

2323
@AllArgsConstructor
2424
@RestController
25-
@RequestMapping(value = "/api/dashboard/v2", produces = MediaType.APPLICATION_JSON_VALUE)
25+
@RequestMapping(value = "/api/schedule/v2", produces = MediaType.APPLICATION_JSON_VALUE)
2626
@PreAuthorize("isAuthenticated()")
2727
public class ScheduleApiController {
2828

@@ -86,4 +86,13 @@ public ResponseEntity<?> ScheduleIsDone(
8686
scheduleService.checkIsDone(principal.getUserId(), scheduleId);
8787
return ResponseEntity.ok(HttpStatus.ACCEPTED);
8888
}
89+
90+
@GetMapping("/vaccination/{petId}")
91+
public ResponseEntity<?> NextVaccination(
92+
@AuthenticationPrincipal Principal principal,
93+
@PathVariable Long petId
94+
){
95+
List<ScheduleDto> schedules = scheduleService.getNextVaccination(principal.getUserId(), petId);
96+
return ResponseEntity.ok(Map.of("data", schedules));
97+
}
8998
}

src/main/java/com/grepp/teamnotfound/app/model/schedule/ScheduleService.java

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
import com.grepp.teamnotfound.app.model.schedule.repository.ScheduleRepository;
1111
import com.grepp.teamnotfound.app.model.user.entity.User;
1212
import com.grepp.teamnotfound.app.model.user.repository.UserRepository;
13+
import com.grepp.teamnotfound.app.model.vaccination.code.VaccineName;
1314
import com.grepp.teamnotfound.infra.error.exception.PetException;
1415
import com.grepp.teamnotfound.infra.error.exception.ScheduleException;
1516
import com.grepp.teamnotfound.infra.error.exception.UserException;
@@ -21,6 +22,8 @@
2122
import java.time.YearMonth;
2223
import java.util.ArrayList;
2324
import java.util.List;
25+
import java.util.Optional;
26+
2427
import lombok.RequiredArgsConstructor;
2528
import org.springframework.stereotype.Service;
2629
import org.springframework.transaction.annotation.Transactional;
@@ -217,4 +220,34 @@ public void deleteVaccinationSchedule(Pet pet, String keywords) {
217220
schedules.forEach(schedule -> schedule.setDeletedAt(OffsetDateTime.now()));
218221
scheduleRepository.saveAll(schedules);
219222
}
223+
224+
@Transactional
225+
public List<ScheduleDto> getNextVaccination(Long userId, Long petId) {
226+
Pet pet = petRepository.findById(petId).orElseThrow(() -> new PetException(PetErrorCode.PET_NOT_FOUND));
227+
userRepository.findById(userId).orElseThrow(() -> new UserException(UserErrorCode.USER_NOT_FOUND));
228+
229+
List<Schedule> schedules = new ArrayList<>();
230+
for (VaccineName name: VaccineName.values()){
231+
Optional<Schedule> schedule = scheduleRepository.findTop1ByPetAndNameContainingAndDeletedAtNullAndScheduleDateAfterOrderByScheduleDateAsc(pet, name.name(), LocalDate.now());
232+
if (schedule.isPresent()){
233+
schedules.add(schedule.get());
234+
}
235+
}
236+
237+
List<ScheduleDto> scheduleDtos = new ArrayList<>();
238+
239+
schedules.forEach(schedule ->
240+
scheduleDtos.add(ScheduleDto.builder()
241+
.scheduleId(schedule.getScheduleId())
242+
.date(schedule.getScheduleDate())
243+
.name(schedule.getName())
244+
.cycle(schedule.getCycle())
245+
.cycleEnd(schedule.getCycleEnd())
246+
.isDone(schedule.getIsDone())
247+
.petName(schedule.getPet().getName())
248+
.petId(schedule.getPet().getPetId()).build())
249+
);
250+
251+
return scheduleDtos;
252+
}
220253
}

src/main/java/com/grepp/teamnotfound/app/model/schedule/repository/ScheduleRepository.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@
77
import feign.Param;
88
import java.time.LocalDate;
99
import java.util.List;
10+
import java.util.Optional;
11+
1012
import org.springframework.data.jpa.repository.JpaRepository;
1113
import org.springframework.data.jpa.repository.Query;
1214

@@ -23,4 +25,6 @@ public interface ScheduleRepository extends JpaRepository<Schedule, Long> {
2325

2426
@Query("SELECT s FROM Schedule s WHERE s.scheduleDate = :tomorrow AND s.isDone = false AND s.deletedAt IS NULL")
2527
List<Schedule> findSchedulesForNotification(LocalDate tomorrow);
26-
}
28+
29+
Optional<Schedule> findTop1ByPetAndNameContainingAndDeletedAtNullAndScheduleDateAfterOrderByScheduleDateAsc(Pet pet, String name, LocalDate today);
30+
}

0 commit comments

Comments
 (0)