diff --git a/src/main/java/com/example/Jinus/controller/v2/CafeteriaControllerV2.java b/src/main/java/com/example/Jinus/controller/v2/CafeteriaControllerV2.java index 17d704e..934c374 100644 --- a/src/main/java/com/example/Jinus/controller/v2/CafeteriaControllerV2.java +++ b/src/main/java/com/example/Jinus/controller/v2/CafeteriaControllerV2.java @@ -19,7 +19,7 @@ import java.util.Map; @RestController -@RequestMapping("/api/spring") +@RequestMapping("/api/v2/spring") public class CafeteriaControllerV2 { private final UserServiceV2 userServiceV2; @@ -37,18 +37,34 @@ public CafeteriaControllerV2( // 사용자 존재 여부에 따라 응답 - @PostMapping("/cafeteria/v2") + @PostMapping("/cafeteria") public String responseCafeteriaOrCampusListCard(@RequestBody RequestDto requestDto) { // userId로 campusId 찾기 String userId = requestDto.getUserRequest().getUser().getId(); int campusId = userServiceV2.getUserCampusId(userId); int sysCampusId = requestDto.getAction().getClientExtra().getSys_campus_id(); - // 사용자가 존재 & 식당 블록에서 캠퍼스 눌렀을 때 -> 식당 리스트 - if (campusId != -1 && sysCampusId != -1) { - return cafeteriaServiceV2.makeCafeteriaListCard(campusId); - } else { // 사용자가 존재 X & 식당 블록에서 더보기 버튼 눌렀을 때 -> 캠퍼스 리스트 + return campusOrCafeteria(campusId, sysCampusId); + } + + + // 반환 조건 설정 + private String campusOrCafeteria(int campusId, int sysCampusId) { + // 더보기 버튼 누른 경우 + if (sysCampusId == -1) { return campusServiceV2.makeCampusListCard(); } + + // 사용자가 원하는 캠퍼스가 있을 때 + if (sysCampusId > 0) { + return cafeteriaServiceV2.makeCafeteriaListCard(sysCampusId); + } + + // 사용자가 원하는 캠퍼스가 없을 때 + return (campusId != -1) + ? cafeteriaServiceV2.makeCafeteriaListCard(campusId) + : campusServiceV2.makeCampusListCard(); } + + } diff --git a/src/main/java/com/example/Jinus/controller/v2/DietControllerV2.java b/src/main/java/com/example/Jinus/controller/v2/DietControllerV2.java new file mode 100644 index 0000000..eea29e8 --- /dev/null +++ b/src/main/java/com/example/Jinus/controller/v2/DietControllerV2.java @@ -0,0 +1,21 @@ +package com.example.Jinus.controller.v2; + +import com.example.Jinus.dto.request.RequestDto; +import com.example.Jinus.service.v2.cafeteria.DietServiceV2; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequestMapping("/api/v2/spring") +@RequiredArgsConstructor +public class DietControllerV2 { + private final DietServiceV2 dietServiceV2; + + @PostMapping("/dish") + public String handleRequest(@RequestBody RequestDto requestDto) { + return dietServiceV2.requestHandler(requestDto); + } +} diff --git a/src/main/java/com/example/Jinus/controller/v2/DishControllerV2.java b/src/main/java/com/example/Jinus/controller/v2/DishControllerV2.java deleted file mode 100644 index eba0617..0000000 --- a/src/main/java/com/example/Jinus/controller/v2/DishControllerV2.java +++ /dev/null @@ -1,58 +0,0 @@ -package com.example.Jinus.controller.v2; - -import com.example.Jinus.dto.request.RequestDto; -import com.example.Jinus.service.v2.cafeteria.DietServiceV2; -import com.example.Jinus.service.v2.userInfo.UserServiceV2; -import com.example.Jinus.utility.SimpleTextResponse; -import org.h2.engine.User; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - -import java.time.LocalTime; - -@RestController -@RequestMapping("/api/spring") -public class DishControllerV2 { - private final DietServiceV2 dietServiceV2; - private final UserServiceV2 userServiceV2; - - public DishControllerV2(DietServiceV2 dietServiceV2, - UserServiceV2 userServiceV2) { - this.dietServiceV2 = dietServiceV2; - this.userServiceV2 = userServiceV2; - } - - @PostMapping("/dish/v2") - public void handleRequest(@RequestBody RequestDto requestDto) { - String kakaoId = requestDto.getUserRequest().getUser().getId(); - int campusId = userServiceV2.getUserCampusId(kakaoId); - - // 일반 파라미터 null값 여부 확인 - String sysCampusName = requestDto.getAction().getParams().getSys_campus_name(); - String sysDate = requestDto.getAction().getParams().getSys_date(); - String sysPeriod = requestDto.getAction().getParams().getSys_time_period(); - // 필수 파라미터 - String sysCafeteriaName = requestDto.getAction().getParams().getSys_cafeteria_name(); - - // 현재 시간 파악 - LocalTime time = dietServiceV2.getCurrentTime(); - // 일반 파라미터 값 채우기 - if (sysCampusName == null) { - sysCampusName = dietServiceV2.getCampusName(kakaoId); - } else if (sysDate == null) { - sysDate = dietServiceV2.getDay(time); - } else if (sysPeriod == null) { - sysPeriod = dietServiceV2.getPeriodOfDay(time); - } - - // sysDate로 날짜 계산하기 - String dateTime = dietServiceV2.getCurrentDateTime(sysDate); - String dietDescription = dietServiceV2.getDietDescription(sysCafeteriaName, campusId, sysPeriod, dateTime); - // 식당 imgUrl 찾기 - String imgUrl = dietServiceV2.getImageUrl(campusId); - } - - -} diff --git a/src/main/java/com/example/Jinus/controller/v2/NoticeControllerV2.java b/src/main/java/com/example/Jinus/controller/v2/NoticeControllerV2.java index 251cdba..9964f77 100644 --- a/src/main/java/com/example/Jinus/controller/v2/NoticeControllerV2.java +++ b/src/main/java/com/example/Jinus/controller/v2/NoticeControllerV2.java @@ -20,7 +20,7 @@ import static java.lang.String.valueOf; @RestController -@RequestMapping("/api/spring") +@RequestMapping("/api/v2/spring") public class NoticeControllerV2 { private final NoticeServiceV2 noticeServiceV2; @@ -39,7 +39,7 @@ public NoticeControllerV2(NoticeServiceV2 noticeServiceV2, } // 학교 공지사항 조회 - @PostMapping("/main-notice/v2") + @PostMapping("/main-notice") public String getMainNotice() { int departmentId = 117; // 학교 공지사항 id String departmentEng = "main"; // 학과 영문명 @@ -47,7 +47,7 @@ public String getMainNotice() { } // 학과 공지사항 조회 - @PostMapping("/department-notice/v2") + @PostMapping("/department-notice") public String responseDepartmentNotice(@RequestBody RequestDto requestDto) { String userId = requestDto.getUserRequest().getUser().getId(); int departmentId = userServiceV2.getUserDepartmentId(userId); diff --git a/src/main/java/com/example/Jinus/dto/request/HandleRequestDto.java b/src/main/java/com/example/Jinus/dto/request/HandleRequestDto.java new file mode 100644 index 0000000..aa4ad92 --- /dev/null +++ b/src/main/java/com/example/Jinus/dto/request/HandleRequestDto.java @@ -0,0 +1,23 @@ +package com.example.Jinus.dto.request; + +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +public class HandleRequestDto { + private final String kakaoId; + private final String campusName; + private final String day; + private final String period; + private final String cafeteriaName; + + public HandleRequestDto(String kakaoId, String campusName, String day, String period, String cafeteriaName) { + this.kakaoId = kakaoId; + this.campusName = campusName; + this.day = day; + this.period = period; + this.cafeteriaName = cafeteriaName; + } + +} diff --git a/src/main/java/com/example/Jinus/entity/cafeteria/CafeteriaDietEntity.java b/src/main/java/com/example/Jinus/entity/cafeteria/CafeteriaDietEntity.java index 9809b9a..ae8c42b 100644 --- a/src/main/java/com/example/Jinus/entity/cafeteria/CafeteriaDietEntity.java +++ b/src/main/java/com/example/Jinus/entity/cafeteria/CafeteriaDietEntity.java @@ -6,7 +6,7 @@ import lombok.NoArgsConstructor; import lombok.Setter; -import java.time.LocalDateTime; +import java.sql.Date; @Entity @Getter @@ -20,11 +20,8 @@ public class CafeteriaDietEntity { @GeneratedValue(strategy = GenerationType.IDENTITY) private int dietId; - @Column(name = "date", columnDefinition = "TIMESTAMP WITH TIME ZONE") - private LocalDateTime dateTime; // 날짜 + 시간 + 시간대 - -// @Column(name = "date") -// private LocalTime date; + @Column(name = "date") + private Date dietDate; @Column(name = "day") private String day_of_week; diff --git a/src/main/java/com/example/Jinus/repository/v2/cafeteria/CafeteriaRepositoryV2.java b/src/main/java/com/example/Jinus/repository/v2/cafeteria/CafeteriaRepositoryV2.java index 467eda2..390fbbd 100644 --- a/src/main/java/com/example/Jinus/repository/v2/cafeteria/CafeteriaRepositoryV2.java +++ b/src/main/java/com/example/Jinus/repository/v2/cafeteria/CafeteriaRepositoryV2.java @@ -20,7 +20,7 @@ public interface CafeteriaRepositoryV2 extends JpaRepository findCafeteriaId(@Param("cafeteriaName") String cafeteriaName, @Param("campusId") int campusId); - // 식당 url 찾기 - @Query("SELECT c.thumbnailUrl FROM CafeteriaEntity c WHERE c.campusId = :campusId") - String findCafeteriaUrlByCampusId(@Param("campusId")int campusId); + // cafeteriaId로 imgUrl 찾기 + @Query("SELECT c.thumbnailUrl FROM CafeteriaEntity c WHERE c.id = :cafeteriaId") + String findImgUrlByCafeteriaId(@Param("cafeteriaId")int cafeteriaId); } diff --git a/src/main/java/com/example/Jinus/repository/v2/cafeteria/CampusRepositoryV2.java b/src/main/java/com/example/Jinus/repository/v2/cafeteria/CampusRepositoryV2.java index 7aba879..4565376 100644 --- a/src/main/java/com/example/Jinus/repository/v2/cafeteria/CampusRepositoryV2.java +++ b/src/main/java/com/example/Jinus/repository/v2/cafeteria/CampusRepositoryV2.java @@ -17,4 +17,12 @@ public interface CampusRepositoryV2 extends JpaRepository // campusId가 5보다 작은 캠퍼스들 찾기 @Query("SELECT c FROM CampusEntity c WHERE c.id < 5") List findCampusList(); + + // campusName으로 imgUrl 찾기 + @Query("SELECT c.thumbnailUrl FROM CampusEntity c WHERE c.campusNameKo = :campusName") + String findCampusImgUrlByCampusName(@Param("campusName")String campusName); + + // campusName으로 id 찾기 + @Query("SELECT c.id FROM CampusEntity c WHERE c.campusNameKo = :campusName") + int findCampusIdByName(@Param("campusName")String campusName); } diff --git a/src/main/java/com/example/Jinus/repository/v2/cafeteria/DietRepositoryV2.java b/src/main/java/com/example/Jinus/repository/v2/cafeteria/DietRepositoryV2.java index 683a592..42dd8e9 100644 --- a/src/main/java/com/example/Jinus/repository/v2/cafeteria/DietRepositoryV2.java +++ b/src/main/java/com/example/Jinus/repository/v2/cafeteria/DietRepositoryV2.java @@ -6,16 +6,15 @@ import org.springframework.data.repository.query.Param; import org.springframework.stereotype.Repository; -import java.time.LocalDateTime; -import java.time.OffsetDateTime; +import java.sql.Date; import java.util.List; @Repository public interface DietRepositoryV2 extends JpaRepository { @Query("SELECT c.dishCategory, c.dishType, c.dishName FROM CafeteriaDietEntity c " + - "WHERE c.dateTime = :dateTime " + + "WHERE c.dietDate = :dietDate " + "AND c.time = :period AND c.cafeteriaId = :cafeteriaId") - List findDietList(@Param("dateTime") String dateTime, + List findDietList(@Param("dietDate") Date dietDate, @Param("period") String period, @Param("cafeteriaId") int cafeteriaId); } diff --git a/src/main/java/com/example/Jinus/service/v2/cafeteria/CafeteriaServiceV2.java b/src/main/java/com/example/Jinus/service/v2/cafeteria/CafeteriaServiceV2.java index 640e478..0341672 100644 --- a/src/main/java/com/example/Jinus/service/v2/cafeteria/CafeteriaServiceV2.java +++ b/src/main/java/com/example/Jinus/service/v2/cafeteria/CafeteriaServiceV2.java @@ -31,6 +31,16 @@ public List getCafeteriaList(int campusId) { return cafeteriaRepositoryV2.findCafeteriaListByCampusId(campusId); } + // 캠퍼스에 식당이 존재한다면 cafeteriaId 찾기 + public int getCafeteriaId(String cafeteriaName, int campusId) { + return cafeteriaRepositoryV2.findCafeteriaId(cafeteriaName, campusId).orElse(-1); + } + + // 식당 imgUrl 찾기 + public String getImgUrl(int cafeteriaId) { + return cafeteriaRepositoryV2.findImgUrlByCafeteriaId(cafeteriaId); + } + // 식당 리스트 반환 메소드 public String makeCafeteriaListCard(int campusId) { String campusName = campusServiceV2.getUserCampusName(campusId); diff --git a/src/main/java/com/example/Jinus/service/v2/cafeteria/CampusServiceV2.java b/src/main/java/com/example/Jinus/service/v2/cafeteria/CampusServiceV2.java index 748627a..e82fd8c 100644 --- a/src/main/java/com/example/Jinus/service/v2/cafeteria/CampusServiceV2.java +++ b/src/main/java/com/example/Jinus/service/v2/cafeteria/CampusServiceV2.java @@ -33,6 +33,11 @@ public List getCampusList() { return campusRepositoryV2.findCampusList(); } + // 캠퍼스 이름으로 id 찾기 + public int getCampusId(String campusName) { + return campusRepositoryV2.findCampusIdByName(campusName); + } + // 캠퍼스 리스트 반환 메소드 public String makeCampusListCard() { List campusList = getCampusList(); @@ -53,6 +58,7 @@ public List mappingCampusList(List campusList) { String imageUrl = campus.getThumbnailUrl(); Map extra = new HashMap<>(); extra.put("sys_campus_id", campus.getId()); + System.out.println("campusId: " + campus.getId()); // 캠퍼스 아이템 객체 생성 ListItemDto listItem = new ListItemDto(campusName, imageUrl, "block", "66067167cdd882158c759fc2", extra); diff --git a/src/main/java/com/example/Jinus/service/v2/cafeteria/DietServiceV2.java b/src/main/java/com/example/Jinus/service/v2/cafeteria/DietServiceV2.java index 09e41b4..c4d9bae 100644 --- a/src/main/java/com/example/Jinus/service/v2/cafeteria/DietServiceV2.java +++ b/src/main/java/com/example/Jinus/service/v2/cafeteria/DietServiceV2.java @@ -1,82 +1,203 @@ package com.example.Jinus.service.v2.cafeteria; -import com.example.Jinus.repository.v2.cafeteria.CafeteriaRepositoryV2; +import com.example.Jinus.dto.request.DetailParamsItemFieldDto; +import com.example.Jinus.dto.request.HandleRequestDto; +import com.example.Jinus.dto.request.RequestDto; +import com.example.Jinus.dto.response.*; import com.example.Jinus.repository.v2.cafeteria.CampusRepositoryV2; import com.example.Jinus.repository.v2.cafeteria.DietRepositoryV2; import com.example.Jinus.repository.v2.userInfo.UserRepositoryV2; +import com.example.Jinus.utility.JsonUtils; import com.example.Jinus.utility.SimpleTextResponse; +import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import org.springframework.util.LinkedMultiValueMap; import org.springframework.util.MultiValueMap; +import org.springframework.web.servlet.View; +import java.sql.Date; import java.time.LocalDate; import java.time.LocalDateTime; import java.time.LocalTime; import java.time.ZoneId; -import java.util.*; -import java.util.stream.Collectors; +import java.util.List; +import java.util.Set; +import java.util.TreeSet; @Service +@RequiredArgsConstructor public class DietServiceV2 { private final DietRepositoryV2 dietRepositoryV2; private final UserRepositoryV2 userRepositoryV2; private final CampusRepositoryV2 campusRepositoryV2; - private final CafeteriaRepositoryV2 cafeteriaRepositoryV2; - - public DietServiceV2(DietRepositoryV2 dietRepositoryV2, - UserRepositoryV2 userRepositoryV2, - CampusRepositoryV2 campusRepositoryV2, - CafeteriaRepositoryV2 cafeteriaRepositoryV2) { - this.dietRepositoryV2 = dietRepositoryV2; - this.userRepositoryV2 = userRepositoryV2; - this.campusRepositoryV2 = campusRepositoryV2; - this.cafeteriaRepositoryV2 = cafeteriaRepositoryV2; + private final CampusServiceV2 campusServiceV2; + private final CafeteriaServiceV2 cafeteriaServiceV2; + private final View error; + + // 식단 데이터 찾기 위해 필요한 파라미터 추출 및 초기화 + public String requestHandler(RequestDto requestDto) { + String kakaoId = requestDto.getUserRequest().getUser().getId(); + + // 현재 시간 파악 + LocalTime time = getCurrentTime(); + + // 요청 일반 파라미터 추출 + DetailParamsItemFieldDto campusName = requestDto.getAction().getDetailParams().getSys_campus_name(); + DetailParamsItemFieldDto day = requestDto.getAction().getDetailParams().getSys_date(); + DetailParamsItemFieldDto period = requestDto.getAction().getDetailParams().getSys_time_period(); + // null이면 값 초기화하기 + String campusNameValue = (campusName != null) ? campusName.getValue() : getCampusName(kakaoId); + String dayValue = (day != null) ? day.getValue() : getDay(time); // 오늘, 내일 + String periodValue = (period != null) ? period.getValue() : getPeriodOfDay(time); // 아침, 점심, 저녁 + // 요청 필수 파라미터 추출 + String cafeteriaName = requestDto.getAction().getParams().getSys_cafeteria_name(); + + // 요청 파라미터 객체 생성 + HandleRequestDto parameters = new HandleRequestDto(kakaoId, campusNameValue, dayValue, periodValue, cafeteriaName); + + return makeResponse(parameters); } - // cafeteria_id 존재여부 확인(캠퍼스에 식당이 존재하는지) - public String getDietDescription(String cafeteriaName, int campusId, String period, String dateTime) { - int cafeteriaId = cafeteriaRepositoryV2.findCafeteriaId(cafeteriaName, campusId).orElse(-1); - // 존재한다면 - if (cafeteriaId != -1) { - // 해당 식당 메뉴 찾아오기 - return getDietList(cafeteriaId, period, dateTime).toString(); - } else { // 존재하지 않는다면 - // 오류메시지 반환 - return SimpleTextResponse.simpleTextResponse("\"식당을 찾지 못했어!\\n어떤 캠퍼스에 있는 식당인지 정확히 알려줘!\""); + // response 생성 로직 + public String makeResponse(HandleRequestDto parameters) { + int campusId = campusServiceV2.getCampusId(parameters.getCampusName()); + int cafeteriaId = cafeteriaServiceV2.getCafeteriaId(parameters.getCafeteriaName(), campusId); + // 캠퍼스에 식당이 존재하는 경우 + if (checkIsThereCafeteria(parameters) != -1) { + // 식당 메뉴가 존재하는 경우 + if (checkThereIsDiet(parameters, cafeteriaId) != -1) { + // 메뉴 찾기 + MultiValueMap dietList = getDiets(parameters, cafeteriaId); + StringBuilder diets = processDietList(dietList); + return makeContents(parameters, cafeteriaId, diets); + } else { // 메뉴 존재하지 않는 경우 + StringBuilder diets = new StringBuilder("\n\n").append("메뉴가 존재하지 않습니다."); + return makeContents(parameters, cafeteriaId, diets); + } + } else { // 식당 존재하지 않는 경우 + return errorMsgThereIsNoCafeteria(); } } - // 해당 식당 메뉴 찾아오기 - public StringBuilder getDietList(int cafeteriaId, String period, String dateTime) { - List dietObject = dietRepositoryV2.findDietList(dateTime, period, cafeteriaId); + + // 캠퍼스에 식당 존재여부 확인 -> cafeteriaId 찾기 + // cafeteriaId가 -1이면 존재하지 않음 + private int checkIsThereCafeteria(HandleRequestDto parameters) { + int campusId = campusServiceV2.getCampusId(parameters.getCampusName()); + return cafeteriaServiceV2.getCafeteriaId(parameters.getCafeteriaName(), campusId); + } + + + // 캠퍼스에 식당이 존재하지 않는 경우 메시지 출력 + private String errorMsgThereIsNoCafeteria() { + return SimpleTextResponse + .simpleTextResponse("식당을 찾지 못했어!\n어떤 캠퍼스에 있는 식당인지 정확히 알려줘!"); + } + + + // 식당 메뉴 존재여부 확인 + private int checkThereIsDiet(HandleRequestDto parameters, int cafeteriaId) { + // 오늘, 내일 문자열로 날짜 설정하기 + Date dietDate = getCurrentDate(parameters.getDay()); + List dietObject = + dietRepositoryV2.findDietList(dietDate, parameters.getPeriod(), cafeteriaId); + return (!dietObject.isEmpty()) ? 1 : -1; + } + + + // 카테고리별 메뉴 리스트 생성하기 + private MultiValueMap getDiets(HandleRequestDto parameters, int cafeteriaId) { + // 오늘, 내일 문자열로 날짜 설정하기 + Date dietDate = getCurrentDate(parameters.getDay()); + List dietObject = + dietRepositoryV2.findDietList(dietDate, parameters.getPeriod(), cafeteriaId); MultiValueMap dietList = new LinkedMultiValueMap<>(); // 중복 키 허용(값을 리스트로 반환) for (Object[] o : dietObject) { - String dishName = (String) o[2]; - String key = (o[0] != null) ? (String)o[0] // dishCategory : (o[1] != null) ? (String) o[1] // dishType : "메뉴"; + String dishName = (String) o[2]; dietList.add(key, dishName); } - return processDietList(dietList); + return dietList; } - // 식당 리스트 가공 + + // 카테고리별 메뉴 문자열로 나열하기 public StringBuilder processDietList(MultiValueMap dietList) { // 키 추출 Set keys = new TreeSet<>(dietList.keySet()); // 순서 보장 - 오름차순 StringBuilder description = new StringBuilder(); for (String key : keys) { - description.append("[").append(key).append("]").append("\n"); + description.append("\n[").append(key).append("]").append("\n"); dietList.get(key).forEach(diet -> description.append(diet).append("\n")); } return description; } + // 응답 내용 초기화 + private String makeContents(HandleRequestDto parameters, int cafeteriaId, StringBuilder diets) { + // 식당 img 찾기 + String imgUrl = cafeteriaServiceV2.getImgUrl(cafeteriaId); + + // title 데이터 연결 + StringBuilder title = new StringBuilder("\uD83C\uDF71 ") + .append(parameters.getCafeteriaName()).append("(") + .append(parameters.getCampusName(), 0, 2).append(") 메뉴"); + + // 식단 날짜 + Date dietDate = getCurrentDate(parameters.getDay()); + // 메뉴 연결 + StringBuilder description = new StringBuilder(String.valueOf(dietDate)).append(" ") + .append(parameters.getPeriod()).append(diets); + + return mappingResponse(parameters, imgUrl, title.toString(), description.toString()); + } + + // 응답 객체 매핑 + public String mappingResponse(HandleRequestDto parameters, String imgUrl, String title, String description) { + // imgUrl 객체 생성 + ThumbnailDto thumbnail = new ThumbnailDto(imgUrl); + + // 버튼 리스트 객체 생성 + List buttonList = List.of(new ButtonDto("공유하기", "share")); + + // 아이템 객체 생성 + BasicCardDto basicCardDto = new BasicCardDto(title, description, thumbnail, buttonList); + List outputs = List.of(new ComponentDto(basicCardDto)); + + List quickReplies = mappingQuickReply(parameters); + + TemplateDto templateDto = new TemplateDto(outputs, quickReplies); + ResponseDto responseDto = new ResponseDto("2.0", templateDto); + + return JsonUtils.toJsonResponse(responseDto); + } + + + // quickReply 객체 생성 + private List mappingQuickReply(HandleRequestDto parameters) { + return switch (parameters.getPeriod()) { + case "아침" -> List.of( + new QuickReplyDto("점심", "message", parameters.getCampusName() + " " + parameters.getCafeteriaName() + " " + parameters.getDay() + " 점심 메뉴"), + new QuickReplyDto("저녁", "message", parameters.getCampusName() + " " + parameters.getCafeteriaName() + " " + parameters.getDay() + " 저녁 메뉴") + ); + case "점심" -> List.of( + new QuickReplyDto("아침", "message", parameters.getCampusName() + " " + parameters.getCafeteriaName() + " " + parameters.getDay() + " 아침 메뉴"), + new QuickReplyDto("저녁", "message", parameters.getCampusName() + " " + parameters.getCafeteriaName() + " " + parameters.getDay() + " 저녁 메뉴") + ); + default -> List.of( + new QuickReplyDto("아침", "message", parameters.getCampusName() + " " + parameters.getCafeteriaName() + " " + parameters.getDay() + " 아침 메뉴"), + new QuickReplyDto("점심", "message", parameters.getCampusName() + " " + parameters.getCafeteriaName() + " " + parameters.getDay() + " 점심 메뉴") + ); + }; + } + + // 일반 파라미터 값 채우기 // sys_campus_name 파라미터 초기화 public String getCampusName(String kakaoId) { @@ -100,10 +221,10 @@ public String getDay(LocalTime time) { } // sys_period 파라미터 초기화 - 시간 범위에 따라 아침, 점심, 저녁을 판별 - public String getPeriodOfDay(LocalTime time) { - if (time.isAfter(LocalTime.parse("19:00:00")) && time.isBefore(LocalTime.parse("09:30:00"))) { + public static String getPeriodOfDay(LocalTime time) { + if (time.isAfter(LocalTime.parse("19:00:00")) || time.isBefore(LocalTime.parse("09:30:00"))) { return "아침"; - } else if (time.isAfter(LocalTime.parse("09:30:00")) && time.isBefore(LocalTime.parse("13:30:00"))) { + } else if (!time.isBefore(LocalTime.parse("09:30:00")) && time.isBefore(LocalTime.parse("13:30:00"))) { return "점심"; } else { return "저녁"; @@ -119,22 +240,16 @@ public LocalTime getCurrentTime() { return LocalTime.parse(timeSplit[0]); } - // sys_date 파라미터 값으로 조회할 날짜 찾는 함수 - public String getCurrentDateTime(String sysDate) { + // sysDay 파라미터 값으로 조회할 날짜 찾는 함수 + public Date getCurrentDate(String sysDate) { // 현재 날짜 - LocalDate currentDate = LocalDateTime.now(ZoneId.of("Asia/Seoul")).toLocalDate(); + LocalDate today = LocalDate.now(); + LocalDate tomorrow = today.plusDays(1); // 하루 뒤 날짜 계산 if (sysDate.equals("오늘")) { - return currentDate.toString(); + return Date.valueOf(today); } else { // 내일 - LocalDate tomorrowDate = currentDate.plusDays(1); - return tomorrowDate.toString(); + return Date.valueOf(tomorrow); } } - - // 식당 imgUrl 찾기 - public String getImageUrl(int campusId) { - return cafeteriaRepositoryV2.findCafeteriaUrlByCampusId(campusId); - } - } diff --git a/src/test/java/com/example/Jinus/repository/cafeteria/DietRepositoryV2Test.java b/src/test/java/com/example/Jinus/repository/cafeteria/DietRepositoryV2Test.java deleted file mode 100644 index 713457d..0000000 --- a/src/test/java/com/example/Jinus/repository/cafeteria/DietRepositoryV2Test.java +++ /dev/null @@ -1,63 +0,0 @@ -package com.example.Jinus.repository.cafeteria; - -import com.example.Jinus.entity.cafeteria.CafeteriaDietEntity; -import com.example.Jinus.repository.v2.cafeteria.DietRepositoryV2; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.ExtendWith; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.autoconfigure.jdbc.AutoConfigureTestDatabase; -import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest; -import org.springframework.test.context.ActiveProfiles; -import org.springframework.test.context.junit.jupiter.SpringExtension; - -import java.time.LocalDateTime; -import java.util.ArrayList; -import java.util.List; - -import static org.assertj.core.api.Assertions.assertThat; - - -@ExtendWith(SpringExtension.class) -@DataJpaTest -@ActiveProfiles("test") // application-test.properties 적용 -@AutoConfigureTestDatabase(replace = AutoConfigureTestDatabase.Replace.ANY) // H2 사용 -public class DietRepositoryV2Test { - @Autowired - private DietRepositoryV2 dietRepositoryV2; - - @BeforeEach - void setUp() { - // 날짜 + 시간 + 시간대 포함 (한국 시간: UTC+9) - LocalDateTime dateTime = LocalDateTime.of(25, 2, 11, 0, 0, 0); - CafeteriaDietEntity cafeteriaDietEntity = - new CafeteriaDietEntity(1, dateTime, "월", "점심", "A코스", "주식", "쌀밥", 7); - CafeteriaDietEntity cafeteriaDietEntity2 = - new CafeteriaDietEntity(1, dateTime, "월", "점심", "B코스", "주식", "달걀", 7); - dietRepositoryV2.save(cafeteriaDietEntity); - dietRepositoryV2.save(cafeteriaDietEntity2); - } - - @Test - @DisplayName("조건에 맞는 식단 찾기") - public void checkDiet_meetConditions() { - //given - String dateTime = "2025-03-09 00:00:00.000000 +09:00"; - String period = "점심"; - int cafeteriaId = 7; - - // 예상 데이터 - List dietList = new ArrayList<>(); - Object[] diet1 = {"A코스", "주식", "쌀밥"}; - Object[] diet2 = {"B코스", "주식", "달걀"}; - dietList.add(diet1); - dietList.add(diet2); - - // when - List result = dietRepositoryV2.findDietList(dateTime, period, cafeteriaId); - - // then - assertThat(result).usingRecursiveComparison().isEqualTo(dietList); - } -}