From f8760347e2bd1624d7bf6f7b1a9fd7c43f504daa Mon Sep 17 00:00:00 2001 From: kssosoy Date: Sun, 30 Mar 2025 18:25:14 +0900 Subject: [PATCH] =?UTF-8?q?:sparkles:=20=EA=B3=BC=EB=AA=A9=EB=AA=85=20?= =?UTF-8?q?=EA=B2=80=EC=83=89=ED=95=98=EA=B8=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../timetable/controller/TimeTableController.java | 7 +++++++ .../controller/TimeTableControllerSpec.java | 7 +++++++ .../timetable/repository/SubjectRepository.java | 8 +++++++- .../timetable/service/TimeTableService.java | 15 +++++++++++++++ 4 files changed, 36 insertions(+), 1 deletion(-) diff --git a/src/main/java/org/example/skuhomepage/domain/timetable/controller/TimeTableController.java b/src/main/java/org/example/skuhomepage/domain/timetable/controller/TimeTableController.java index 786076a..c7ac849 100644 --- a/src/main/java/org/example/skuhomepage/domain/timetable/controller/TimeTableController.java +++ b/src/main/java/org/example/skuhomepage/domain/timetable/controller/TimeTableController.java @@ -70,4 +70,11 @@ public ApiResponse dailyTimeTable( timeTableService.getSubjectsByDay(userDetails, dayOfWeek); return ApiResponse.onSuccess(result); } + + @Override + public ApiResponse searchTimeTable( + UserDetails userDetails, String name) { + TimeTableResponseDTO.TimeTableListDTO result = timeTableService.searchSubjects(name); + return ApiResponse.onSuccess(result); + } } diff --git a/src/main/java/org/example/skuhomepage/domain/timetable/controller/TimeTableControllerSpec.java b/src/main/java/org/example/skuhomepage/domain/timetable/controller/TimeTableControllerSpec.java index ae3d792..7038675 100644 --- a/src/main/java/org/example/skuhomepage/domain/timetable/controller/TimeTableControllerSpec.java +++ b/src/main/java/org/example/skuhomepage/domain/timetable/controller/TimeTableControllerSpec.java @@ -82,4 +82,11 @@ ApiResponse dailyTimeTable( @AuthenticationPrincipal UserDetails userDetails, @Parameter(description = "조회할 요일", example = "MONDAY") @PathVariable String dayOfWeek); + + @GetMapping("/search/name") + @Operation(summary = "과목명으로 과목 검색하기", description = "과목 검색하기 api") + @ApiErrorCodeExample(TimeTableErrorStatus.class) + ApiResponse searchTimeTable( + @Parameter(hidden = true) @AuthenticationPrincipal UserDetails userDetails, + @Parameter(description = "검색할 과목명", example = "알고리즘") @RequestParam String name); } diff --git a/src/main/java/org/example/skuhomepage/domain/timetable/repository/SubjectRepository.java b/src/main/java/org/example/skuhomepage/domain/timetable/repository/SubjectRepository.java index e7f373b..2867ecb 100644 --- a/src/main/java/org/example/skuhomepage/domain/timetable/repository/SubjectRepository.java +++ b/src/main/java/org/example/skuhomepage/domain/timetable/repository/SubjectRepository.java @@ -1,6 +1,12 @@ package org.example.skuhomepage.domain.timetable.repository; import org.example.skuhomepage.domain.timetable.entity.Subject; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; -public interface SubjectRepository extends JpaRepository {} +public interface SubjectRepository extends JpaRepository { + @Query("select s from Subject s where s.subject like %:name%") + Page findBySubjectName(String name, Pageable pageable); +} diff --git a/src/main/java/org/example/skuhomepage/domain/timetable/service/TimeTableService.java b/src/main/java/org/example/skuhomepage/domain/timetable/service/TimeTableService.java index 4a6b7b6..28a6cc5 100644 --- a/src/main/java/org/example/skuhomepage/domain/timetable/service/TimeTableService.java +++ b/src/main/java/org/example/skuhomepage/domain/timetable/service/TimeTableService.java @@ -24,6 +24,8 @@ import org.example.skuhomepage.domain.timetable.repository.TimeTableRepository; import org.example.skuhomepage.domain.timetable.repository.TimeTableSubjectRepository; import org.example.skuhomepage.global.exception.GeneralException; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Slice; import org.springframework.security.core.userdetails.UserDetails; @@ -210,6 +212,19 @@ public TimeTableResponseDTO.MyTimeTableDTO getSubjectsByDay( return new TimeTableResponseDTO.MyTimeTableDTO(subjects); } + public TimeTableResponseDTO.TimeTableListDTO searchSubjects(String name) { + Pageable pageable = PageRequest.of(0, 10); + Page subjectPage = subjectRepository.findBySubjectName(name, pageable); + List subjects = + subjectPage.getContent().stream() + .map(TimeTableResponseDTO.TimeTableDTO::new) + .collect(Collectors.toList()); + + boolean hasNext = subjectPage.hasNext(); + int nextPage = hasNext ? subjectPage.getNumber() + 1 : subjectPage.getNumber(); + return new TimeTableResponseDTO.TimeTableListDTO(subjects, hasNext, nextPage); + } + private boolean isSubjectOnToday(Subject subject, DayOfWeek today) { String time = subject.getTime();