Skip to content

Commit 79a80ef

Browse files
committed
[Refactor]DietControllerV2-response processing 구현
1 parent 780b6f9 commit 79a80ef

File tree

17 files changed

+250
-39
lines changed

17 files changed

+250
-39
lines changed

src/main/java/com/example/Jinus/controller/v2/CafeteriaControllerV2.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
import com.example.Jinus.utility.ListCardResponse;
1111
import org.springframework.web.bind.annotation.PostMapping;
1212
import org.springframework.web.bind.annotation.RequestBody;
13+
import org.springframework.web.bind.annotation.RequestMapping;
1314
import org.springframework.web.bind.annotation.RestController;
1415

1516
import java.util.ArrayList;
@@ -18,6 +19,7 @@
1819
import java.util.Map;
1920

2021
@RestController
22+
@RequestMapping("/api/spring")
2123
public class CafeteriaControllerV2 {
2224

2325
private final UserServiceV2 userServiceV2;
@@ -35,7 +37,7 @@ public CafeteriaControllerV2(
3537

3638

3739
// 사용자 존재 여부에 따라 응답
38-
@PostMapping("/api/spring/cafeteria/v2")
40+
@PostMapping("/cafeteria/v2")
3941
public String responseCafeteriaOrCampusListCard(@RequestBody RequestDto requestDto) {
4042
// userId로 campusId 찾기
4143
String userId = requestDto.getUserRequest().getUser().getId();
Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
package com.example.Jinus.controller.v2;
2+
3+
import com.example.Jinus.dto.request.RequestDto;
4+
import com.example.Jinus.service.v2.cafeteria.DietServiceV2;
5+
import com.example.Jinus.service.v2.userInfo.UserServiceV2;
6+
import com.example.Jinus.utility.SimpleTextResponse;
7+
import org.h2.engine.User;
8+
import org.springframework.web.bind.annotation.PostMapping;
9+
import org.springframework.web.bind.annotation.RequestBody;
10+
import org.springframework.web.bind.annotation.RequestMapping;
11+
import org.springframework.web.bind.annotation.RestController;
12+
13+
import java.time.LocalTime;
14+
15+
@RestController
16+
@RequestMapping("/api/spring")
17+
public class DishControllerV2 {
18+
private final DietServiceV2 dietServiceV2;
19+
private final UserServiceV2 userServiceV2;
20+
21+
public DishControllerV2(DietServiceV2 dietServiceV2,
22+
UserServiceV2 userServiceV2) {
23+
this.dietServiceV2 = dietServiceV2;
24+
this.userServiceV2 = userServiceV2;
25+
}
26+
27+
@PostMapping("/dish/v2")
28+
public void handleRequest(@RequestBody RequestDto requestDto) {
29+
String kakaoId = requestDto.getUserRequest().getUser().getId();
30+
int campusId = userServiceV2.getUserCampusId(kakaoId);
31+
32+
// 일반 파라미터 null값 여부 확인
33+
String sysCampusName = requestDto.getAction().getParams().getSys_campus_name();
34+
String sysDate = requestDto.getAction().getParams().getSys_date();
35+
String sysPeriod = requestDto.getAction().getParams().getSys_time_period();
36+
// 필수 파라미터
37+
String sysCafeteriaName = requestDto.getAction().getParams().getSys_cafeteria_name();
38+
39+
// 현재 시간 파악
40+
LocalTime time = dietServiceV2.getCurrentTime();
41+
// 일반 파라미터 값 채우기
42+
if (sysCampusName == null) {
43+
sysCampusName = dietServiceV2.getCampusName(kakaoId);
44+
} else if (sysDate == null) {
45+
sysDate = dietServiceV2.getDay(time);
46+
} else if (sysPeriod == null) {
47+
sysPeriod = dietServiceV2.getPeriodOfDay(time);
48+
}
49+
50+
// sysDate로 날짜 계산하기
51+
String dateTime = dietServiceV2.getCurrentDateTime(sysDate);
52+
String dietDescription = dietServiceV2.getDietDescription(sysCafeteriaName, campusId, sysPeriod, dateTime);
53+
// 식당 imgUrl 찾기
54+
String imgUrl = dietServiceV2.getImageUrl(campusId);
55+
}
56+
57+
58+
}

src/main/java/com/example/Jinus/controller/v2/NoticeControllerV2.java

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,15 @@
33
import com.example.Jinus.dto.request.RequestDto;
44
import com.example.Jinus.dto.response.*;
55
import com.example.Jinus.entity.notice.NoticeCategoryEntity;
6-
import com.example.Jinus.service.v2.notice.NoticeCategoryServiceV2;
6+
import com.example.Jinus.service.v2.notice.CategoryServiceV2;
77
import com.example.Jinus.service.v2.notice.NoticeServiceV2;
88
import com.example.Jinus.service.v2.userInfo.DepartmentServiceV2;
99
import com.example.Jinus.service.v2.userInfo.UserServiceV2;
1010
import com.example.Jinus.utility.JsonUtils;
1111
import com.example.Jinus.utility.TextCardResponse;
1212
import org.springframework.web.bind.annotation.PostMapping;
1313
import org.springframework.web.bind.annotation.RequestBody;
14+
import org.springframework.web.bind.annotation.RequestMapping;
1415
import org.springframework.web.bind.annotation.RestController;
1516

1617
import java.util.ArrayList;
@@ -19,15 +20,16 @@
1920
import static java.lang.String.valueOf;
2021

2122
@RestController
23+
@RequestMapping("/api/spring")
2224
public class NoticeControllerV2 {
2325

2426
private final NoticeServiceV2 noticeServiceV2;
25-
private final NoticeCategoryServiceV2 noticeCategoryServiceV2;
27+
private final CategoryServiceV2 noticeCategoryServiceV2;
2628
private final DepartmentServiceV2 departmentServiceV2;
2729
private final UserServiceV2 userServiceV2;
2830

2931
public NoticeControllerV2(NoticeServiceV2 noticeServiceV2,
30-
NoticeCategoryServiceV2 noticeCategoryServiceV2,
32+
CategoryServiceV2 noticeCategoryServiceV2,
3133
DepartmentServiceV2 departmentServiceV2,
3234
UserServiceV2 userServiceV2) {
3335
this.noticeServiceV2 = noticeServiceV2;
@@ -37,15 +39,15 @@ public NoticeControllerV2(NoticeServiceV2 noticeServiceV2,
3739
}
3840

3941
// 학교 공지사항 조회
40-
@PostMapping("/api/spring/main-notice/v2")
42+
@PostMapping("/main-notice/v2")
4143
public String getMainNotice() {
4244
int departmentId = 117; // 학교 공지사항 id
4345
String departmentEng = "main"; // 학과 영문명
4446
return existUserReturnNotice(departmentEng, departmentId);
4547
}
4648

4749
// 학과 공지사항 조회
48-
@PostMapping("/api/spring/department-notice/v2")
50+
@PostMapping("/department-notice/v2")
4951
public String responseDepartmentNotice(@RequestBody RequestDto requestDto) {
5052
String userId = requestDto.getUserRequest().getUser().getId();
5153
int departmentId = userServiceV2.getUserDepartmentId(userId);

src/main/java/com/example/Jinus/repository/v2/cafeteria/CafeteriaRepositoryV2.java

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77

88
import java.util.HashMap;
99
import java.util.List;
10+
import java.util.Optional;
1011

1112
public interface CafeteriaRepositoryV2 extends JpaRepository<CafeteriaEntity, Integer> {
1213
// 사용자 campusId와 동일한 식당이름과 url 찾기
@@ -16,6 +17,10 @@ public interface CafeteriaRepositoryV2 extends JpaRepository<CafeteriaEntity, In
1617
// campusId와 식당이름으로 cafeteriaId 찾기
1718
@Query("SELECT c.id FROM CafeteriaEntity c " +
1819
"WHERE c.campusId = :campusId AND c.cafeteriaNameKo = :cafeteriaName")
19-
int findCafeteriaId(@Param("cafeteriaName") String cafeteriaName,
20-
@Param("campusId") int campusId);
20+
Optional<Integer> findCafeteriaId(@Param("cafeteriaName") String cafeteriaName,
21+
@Param("campusId") int campusId);
22+
23+
// 식당 url 찾기
24+
@Query("SELECT c.thumbnailUrl FROM CafeteriaEntity c WHERE c.campusId = :campusId")
25+
String findCafeteriaUrlByCampusId(@Param("campusId")int campusId);
2126
}

src/main/java/com/example/Jinus/repository/v2/cafeteria/CampusRepositoryV2.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
public interface CampusRepositoryV2 extends JpaRepository<CampusEntity, Integer> {
1313
// 사용자 campusId로 캠퍼스 이름 찾기
1414
@Query("SELECT c.campusNameKo FROM CampusEntity c WHERE c.id = :campusId")
15-
String findCampusNameById(@Param("campusId") int campusId);
15+
String findCampusNameByCampusId(@Param("campusId") int campusId);
1616

1717
// campusId가 5보다 작은 캠퍼스들 찾기
1818
@Query("SELECT c FROM CampusEntity c WHERE c.id < 5")

src/main/java/com/example/Jinus/repository/v2/cafeteria/DietRepositoryV2.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,10 +12,10 @@
1212

1313
@Repository
1414
public interface DietRepositoryV2 extends JpaRepository<CafeteriaDietEntity, Integer> {
15-
@Query("SELECT c.dishName, c.dishCategory, c.dishType FROM CafeteriaDietEntity c " +
16-
"WHERE c.dateTime = :date " +
15+
@Query("SELECT c.dishCategory, c.dishType, c.dishName FROM CafeteriaDietEntity c " +
16+
"WHERE c.dateTime = :dateTime " +
1717
"AND c.time = :period AND c.cafeteriaId = :cafeteriaId")
18-
List<Object[]> findDietList(@Param("date") LocalDateTime date,
18+
List<Object[]> findDietList(@Param("dateTime") String dateTime,
1919
@Param("period") String period,
2020
@Param("cafeteriaId") int cafeteriaId);
2121
}

src/main/java/com/example/Jinus/repository/v2/notice/NoticeCategoryRepositoryV2.java renamed to src/main/java/com/example/Jinus/repository/v2/notice/CategoryRepositoryV2.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77

88
import java.util.List;
99

10-
public interface NoticeCategoryRepositoryV2 extends JpaRepository<NoticeCategoryEntity, Integer> {
10+
public interface CategoryRepositoryV2 extends JpaRepository<NoticeCategoryEntity, Integer> {
1111
@Query("SELECT n FROM NoticeCategoryEntity n" +
1212
" WHERE n.departmentId = :departmentId AND n.lastNttSn != 0")
1313
List<NoticeCategoryEntity> findCategoryListByDepartmentId(@Param("departmentId")int departmentId);

src/main/java/com/example/Jinus/service/v2/cafeteria/CampusServiceV2.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ public CampusServiceV2(CampusRepositoryV2 campusRepositoryV2) {
2525

2626
// 사용자의 campusId 받아 캠퍼스 이름 찾기
2727
public String getUserCampusName(int campusId) {
28-
return campusRepositoryV2.findCampusNameById(campusId);
28+
return campusRepositoryV2.findCampusNameByCampusId(campusId);
2929
}
3030

3131
// id < 5인 캠퍼스 찾아 리스트로 반환
Lines changed: 140 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,140 @@
1+
package com.example.Jinus.service.v2.cafeteria;
2+
3+
import com.example.Jinus.repository.v2.cafeteria.CafeteriaRepositoryV2;
4+
import com.example.Jinus.repository.v2.cafeteria.CampusRepositoryV2;
5+
import com.example.Jinus.repository.v2.cafeteria.DietRepositoryV2;
6+
import com.example.Jinus.repository.v2.userInfo.UserRepositoryV2;
7+
import com.example.Jinus.utility.SimpleTextResponse;
8+
import org.springframework.stereotype.Service;
9+
import org.springframework.util.LinkedMultiValueMap;
10+
import org.springframework.util.MultiValueMap;
11+
12+
import java.time.LocalDate;
13+
import java.time.LocalDateTime;
14+
import java.time.LocalTime;
15+
import java.time.ZoneId;
16+
import java.util.*;
17+
import java.util.stream.Collectors;
18+
19+
@Service
20+
public class DietServiceV2 {
21+
private final DietRepositoryV2 dietRepositoryV2;
22+
private final UserRepositoryV2 userRepositoryV2;
23+
private final CampusRepositoryV2 campusRepositoryV2;
24+
private final CafeteriaRepositoryV2 cafeteriaRepositoryV2;
25+
26+
public DietServiceV2(DietRepositoryV2 dietRepositoryV2,
27+
UserRepositoryV2 userRepositoryV2,
28+
CampusRepositoryV2 campusRepositoryV2,
29+
CafeteriaRepositoryV2 cafeteriaRepositoryV2) {
30+
this.dietRepositoryV2 = dietRepositoryV2;
31+
this.userRepositoryV2 = userRepositoryV2;
32+
this.campusRepositoryV2 = campusRepositoryV2;
33+
this.cafeteriaRepositoryV2 = cafeteriaRepositoryV2;
34+
}
35+
36+
// cafeteria_id 존재여부 확인(캠퍼스에 식당이 존재하는지)
37+
public String getDietDescription(String cafeteriaName, int campusId, String period, String dateTime) {
38+
int cafeteriaId = cafeteriaRepositoryV2.findCafeteriaId(cafeteriaName, campusId).orElse(-1);
39+
// 존재한다면
40+
if (cafeteriaId != -1) {
41+
// 해당 식당 메뉴 찾아오기
42+
return getDietList(cafeteriaId, period, dateTime).toString();
43+
} else { // 존재하지 않는다면
44+
// 오류메시지 반환
45+
return SimpleTextResponse.simpleTextResponse("\"식당을 찾지 못했어!\\n어떤 캠퍼스에 있는 식당인지 정확히 알려줘!\"");
46+
}
47+
}
48+
49+
// 해당 식당 메뉴 찾아오기
50+
public StringBuilder getDietList(int cafeteriaId, String period, String dateTime) {
51+
List<Object[]> dietObject = dietRepositoryV2.findDietList(dateTime, period, cafeteriaId);
52+
MultiValueMap<String, String> dietList = new LinkedMultiValueMap<>(); // 중복 키 허용(값을 리스트로 반환)
53+
54+
for (Object[] o : dietObject) {
55+
String dishName = (String) o[2];
56+
57+
String key = (o[0] != null) ? (String)o[0] // dishCategory
58+
: (o[1] != null) ? (String) o[1] // dishType
59+
: "메뉴";
60+
61+
dietList.add(key, dishName);
62+
}
63+
return processDietList(dietList);
64+
}
65+
66+
// 식당 리스트 가공
67+
public StringBuilder processDietList(MultiValueMap<String, String> dietList) {
68+
// 키 추출
69+
Set<String> keys = new TreeSet<>(dietList.keySet()); // 순서 보장 - 오름차순
70+
StringBuilder description = new StringBuilder();
71+
72+
for (String key : keys) {
73+
description.append("[").append(key).append("]").append("\n");
74+
dietList.get(key).forEach(diet -> description.append(diet).append("\n"));
75+
}
76+
return description;
77+
}
78+
79+
80+
// 일반 파라미터 값 채우기
81+
// sys_campus_name 파라미터 초기화
82+
public String getCampusName(String kakaoId) {
83+
// 학과 등록 여부 확인
84+
int campusId = userRepositoryV2.findCampusIdById(kakaoId).orElse(-1);
85+
// 학과 등록한 경우 campusId가 존재함
86+
if (campusId != -1) {
87+
return campusRepositoryV2.findCampusNameByCampusId(campusId);
88+
} else { // 학과 등록 안한 경우
89+
return "가좌캠퍼스";
90+
}
91+
}
92+
93+
// sys_date 파라미터 초기화 - 시간 범위에 따라 오늘, 내일 판별
94+
public String getDay(LocalTime time) {
95+
if (time.isAfter(LocalTime.parse("00:00:00")) && time.isBefore(LocalTime.parse("19:00:00"))) {
96+
return "오늘";
97+
} else {
98+
return "내일";
99+
}
100+
}
101+
102+
// sys_period 파라미터 초기화 - 시간 범위에 따라 아침, 점심, 저녁을 판별
103+
public String getPeriodOfDay(LocalTime time) {
104+
if (time.isAfter(LocalTime.parse("19:00:00")) && time.isBefore(LocalTime.parse("09:30:00"))) {
105+
return "아침";
106+
} else if (time.isAfter(LocalTime.parse("09:30:00")) && time.isBefore(LocalTime.parse("13:30:00"))) {
107+
return "점심";
108+
} else {
109+
return "저녁";
110+
}
111+
}
112+
113+
// 현재 시간 출력 함수
114+
public LocalTime getCurrentTime() {
115+
LocalDateTime currentDateTime = LocalDateTime.now(ZoneId.of("Asia/Seoul"));
116+
String[] dateTimeParts = currentDateTime.toString().split("T");
117+
String[] timeSplit = dateTimeParts[1].split("\\.");
118+
119+
return LocalTime.parse(timeSplit[0]);
120+
}
121+
122+
// sys_date 파라미터 값으로 조회할 날짜 찾는 함수
123+
public String getCurrentDateTime(String sysDate) {
124+
// 현재 날짜
125+
LocalDate currentDate = LocalDateTime.now(ZoneId.of("Asia/Seoul")).toLocalDate();
126+
127+
if (sysDate.equals("오늘")) {
128+
return currentDate.toString();
129+
} else { // 내일
130+
LocalDate tomorrowDate = currentDate.plusDays(1);
131+
return tomorrowDate.toString();
132+
}
133+
}
134+
135+
// 식당 imgUrl 찾기
136+
public String getImageUrl(int campusId) {
137+
return cafeteriaRepositoryV2.findCafeteriaUrlByCampusId(campusId);
138+
}
139+
140+
}

src/main/java/com/example/Jinus/service/v2/notice/NoticeCategoryServiceV2.java renamed to src/main/java/com/example/Jinus/service/v2/notice/CategoryServiceV2.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,17 @@
11
package com.example.Jinus.service.v2.notice;
22

33
import com.example.Jinus.entity.notice.NoticeCategoryEntity;
4-
import com.example.Jinus.repository.v2.notice.NoticeCategoryRepositoryV2;
4+
import com.example.Jinus.repository.v2.notice.CategoryRepositoryV2;
55
import org.springframework.stereotype.Service;
66

77
import java.util.List;
88

99
@Service
10-
public class NoticeCategoryServiceV2 {
10+
public class CategoryServiceV2 {
1111

12-
private final NoticeCategoryRepositoryV2 noticeCategoryRepository;
12+
private final CategoryRepositoryV2 noticeCategoryRepository;
1313

14-
public NoticeCategoryServiceV2(NoticeCategoryRepositoryV2 noticeCategoryRepository) {
14+
public CategoryServiceV2(CategoryRepositoryV2 noticeCategoryRepository) {
1515
this.noticeCategoryRepository = noticeCategoryRepository;
1616
}
1717

0 commit comments

Comments
 (0)