Skip to content

Commit db943bb

Browse files
authored
Merge pull request #12 from gist-helper/charging
[#7] soonmenu specmenu 구현
2 parents 005c031 + 119a9ad commit db943bb

File tree

5 files changed

+189
-150
lines changed

5 files changed

+189
-150
lines changed

src/main/java/com/example/helper/controller/MealController.java

Lines changed: 38 additions & 144 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
import com.example.helper.service.MealService;
88
import com.fasterxml.jackson.core.JsonProcessingException;
99
import com.fasterxml.jackson.databind.ObjectMapper;
10+
import jakarta.servlet.http.HttpServletRequest;
1011
import lombok.extern.slf4j.Slf4j;
1112
import org.springframework.beans.BeanUtils;
1213
import org.springframework.beans.factory.annotation.Autowired;
@@ -57,183 +58,76 @@ public String createMeal(@RequestBody Mealdto mealDto) {
5758
}
5859

5960
@PostMapping("/kor")
60-
public String readKorMeal() throws JsonProcessingException {
61+
public Map<String, Object> readKorMeal() throws JsonProcessingException {
6162
// input : None (먼저 서버에서 현재 시간 측정)
6263
// output : 한국어 식단이 포함된 JSON (단, JSON은 카톡 서버가 받을 수 있는 형식이여야 함.)
6364

64-
// TODO 아래 기능 구현해 주세요.
6565
String nowMeal = mealService.getNowKorMeal();
66+
Map<String, Object> responseBody = mealService.responseMeal(nowMeal);
67+
// if need to stratify.
68+
// ObjectMapper objectMapper = new ObjectMapper();
69+
// String result = objectMapper.writeValueAsString(responseBody);
6670

67-
// Response Body Construct
68-
// TODO 더 좋은 방식이 있으면 구현해 주세요. ex) dto 이용.
69-
// const responseBody = {
70-
// version: "2.0",
71-
// template: {
72-
// outputs: [
73-
// {
74-
// simpleText: {
75-
// text: nowMeal
76-
// }
77-
// }
78-
// ]
79-
// }
80-
// };
81-
82-
Map<String, Object> simpleText = new HashMap<>();
83-
simpleText.put("text", nowMeal);
84-
85-
Map<String, Object> simpleTextWrapper = new HashMap<>();
86-
simpleTextWrapper.put("simpleText", simpleText);
87-
88-
List<Object> outputs = new ArrayList(1);
89-
outputs.add(simpleTextWrapper);
90-
91-
Map<String, Object> template = new HashMap<>();
92-
template.put("outputs", outputs);
93-
94-
Map<String, Object> responseBody = new HashMap<>();
95-
responseBody.put("version", "2.0");
96-
responseBody.put("template", template);
97-
98-
ObjectMapper objectMapper = new ObjectMapper();
99-
String result = objectMapper.writeValueAsString(responseBody);
100-
101-
return result;
71+
return responseBody;
10272
}
10373

10474
@PostMapping("/eng")
105-
public String readEngMeal() throws JsonProcessingException {
75+
public Map<String, Object> readEngMeal() throws JsonProcessingException {
10676
// input : None (먼저 서버에서 현재 시간 측정)
10777
// output : 영어 식단이 포함된 JSON (단, JSON은 카톡 서버가 받을 수 있는 형식이여야 함.)
10878

109-
// TODO 아래 기능 구현해 주세요.
11079
String nowMeal = mealService.getNowEngMeal();
80+
Map<String, Object> responseBody = mealService.responseMeal(nowMeal);
11181

112-
// Response Body Construct
113-
// TODO 더 좋은 방식이 있으면 구현해 주세요. ex) dto 이용.
114-
// const responseBody = {
115-
// version: "2.0",
116-
// template: {
117-
// outputs: [
118-
// {
119-
// simpleText: {
120-
// text: nowMeal
121-
// }
122-
// }
123-
// ]
124-
// }
125-
// };
126-
127-
Map<String, Object> simpleText = new HashMap<>();
128-
simpleText.put("text", nowMeal);
129-
130-
Map<String, Object> simpleTextWrapper = new HashMap<>();
131-
simpleTextWrapper.put("simpleText", simpleText);
132-
133-
List<Object> outputs = new ArrayList(1);
134-
outputs.add(simpleTextWrapper);
135-
136-
Map<String, Object> template = new HashMap<>();
137-
template.put("outputs", outputs);
138-
139-
Map<String, Object> responseBody = new HashMap<>();
140-
responseBody.put("version", "2.0");
141-
responseBody.put("template", template);
142-
143-
ObjectMapper objectMapper = new ObjectMapper();
144-
String result = objectMapper.writeValueAsString(responseBody);
145-
146-
return result;
82+
// if need to stratify.
83+
// ObjectMapper objectMapper = new ObjectMapper();
84+
// String result = objectMapper.writeValueAsString(responseBody);
85+
86+
return responseBody;
14787
}
14888

14989
@PostMapping("/speckor")
150-
public String readSpecKorMeal() throws JsonProcessingException {
90+
public Map<String, Object> readSpecKorMeal(@RequestBody Map<String, Map<String, Map<String, String>>> requestBody) throws JsonProcessingException {
15191
// input : 날짜요일내일 + 아점저 + 1/2학
15292
// output : 한국어 식단이 포함된 JSON (단, JSON은 카톡 서버가 받을 수 있는 형식이여야 함.)
15393

154-
// TODO 아래 기능 구현해 주세요.
155-
String specMeal = mealService.getSpecKorMeal();
156-
157-
// Response Body Construct
158-
// TODO 더 좋은 방식이 있으면 구현해 주세요. ex) dto 이용.
159-
// const responseBody = {
160-
// version: "2.0",
161-
// template: {
162-
// outputs: [
163-
// {
164-
// simpleText: {
165-
// text: specMeal
166-
// }
167-
// }
168-
// ]
169-
// }
170-
// };
171-
172-
Map<String, Object> simpleText = new HashMap<>();
173-
simpleText.put("text", specMeal);
174-
175-
Map<String, Object> simpleTextWrapper = new HashMap<>();
176-
simpleTextWrapper.put("simpleText", simpleText);
177-
178-
List<Object> outputs = new ArrayList(1);
179-
outputs.add(simpleTextWrapper);
94+
Map<String, Map<String, String>> action = requestBody.get("action");
95+
Map<String, String> params = action.get("params");
96+
String dateCustom = params.get("dateCustom");
97+
String bld = params.get("bld");
18098

181-
Map<String, Object> template = new HashMap<>();
182-
template.put("outputs", outputs);
99+
log.info(dateCustom + " " + bld);
183100

184-
Map<String, Object> responseBody = new HashMap<>();
185-
responseBody.put("version", "2.0");
186-
responseBody.put("template", template);
101+
String specMeal = mealService.getSpecKorMeal(dateCustom, bld);
102+
Map<String, Object> responseBody = mealService.responseMeal(specMeal);
187103

188-
ObjectMapper objectMapper = new ObjectMapper();
189-
String result = objectMapper.writeValueAsString(responseBody);
104+
// if need to stratify.
105+
// ObjectMapper objectMapper = new ObjectMapper();
106+
// String result = objectMapper.writeValueAsString(responseBody);
190107

191-
return result;
108+
return responseBody;
192109
}
193110

194111
@PostMapping("/speceng")
195-
public String readSpecEngMeal() throws JsonProcessingException {
112+
public Map<String, Object> readSpecEngMeal(@RequestBody Map<String, Map<String, Map<String, String>>> requestBody) throws JsonProcessingException {
196113
// input : 날짜요일내일 + 아점저 + 1/2학
197114
// output : 영어 식단이 포함된 JSON (단, JSON은 카톡 서버가 받을 수 있는 형식이여야 함.)
198115

199-
// TODO 아래 기능 구현해 주세요.
200-
String specMeal = mealService.getSpecEngMeal();
201-
202-
// Response Body Construct
203-
// TODO 더 좋은 방식이 있으면 구현해 주세요. ex) dto 이용.
204-
// const responseBody = {
205-
// version: "2.0",
206-
// template: {
207-
// outputs: [
208-
// {
209-
// simpleText: {
210-
// text: specMeal
211-
// }
212-
// }
213-
// ]
214-
// }
215-
// };
216-
217-
Map<String, Object> simpleText = new HashMap<>();
218-
simpleText.put("text", specMeal);
219-
220-
Map<String, Object> simpleTextWrapper = new HashMap<>();
221-
simpleTextWrapper.put("simpleText", simpleText);
222-
223-
List<Object> outputs = new ArrayList(1);
224-
outputs.add(simpleTextWrapper);
116+
Map<String, Map<String, String>> action = requestBody.get("action");
117+
Map<String, String> params = action.get("params");
118+
String dateCustom = params.get("dateCustom");
119+
String bld = params.get("bld");
225120

226-
Map<String, Object> template = new HashMap<>();
227-
template.put("outputs", outputs);
121+
log.info(dateCustom + " " + bld);
228122

229-
Map<String, Object> responseBody = new HashMap<>();
230-
responseBody.put("version", "2.0");
231-
responseBody.put("template", template);
123+
String specMeal = mealService.getSpecEngMeal(dateCustom, bld);
124+
Map<String, Object> responseBody = mealService.responseMeal(specMeal);
232125

233-
ObjectMapper objectMapper = new ObjectMapper();
234-
String result = objectMapper.writeValueAsString(responseBody);
126+
// if need to stratify.
127+
// ObjectMapper objectMapper = new ObjectMapper();
128+
// String result = objectMapper.writeValueAsString(responseBody);
235129

236-
return result;
130+
return responseBody;
237131
}
238132

239133
// FE쪽에서 query에 담아주면 아래처럼 dto 객체 하나만 req로 받으면 되서 코드 깔끔함.

src/main/java/com/example/helper/entity/Meal.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,4 +39,16 @@ public class Meal {
3939
private String menu;
4040
@Column
4141
private String special;
42+
43+
public String generateMenu() {
44+
String menu = "";
45+
menu += this.date + " " + this.kind + "\n\n";
46+
menu += this.bldg + "\n\n";
47+
menu += this.menu;
48+
if(kindType == 1) {
49+
menu += "\n\\코너\\\n";
50+
menu += this.special;
51+
}
52+
return menu;
53+
}
4254
}

src/main/java/com/example/helper/repository/SqlMealRepository.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,19 @@ public Optional<Meal> findById(Long mealId) {
5151
return Optional.ofNullable(meal);
5252
}
5353

54+
public Optional<Meal> findByDate(Integer bldgType, Integer langType, Integer kindType, String date) {
55+
List<Meal> result = em.createQuery("select m from Meal m where " +
56+
"m.bldgType = :bldgType and m.langType = :langType and m.kindType = :kindType " +
57+
"and m.date = :date", Meal.class)
58+
.setParameter("bldgType", bldgType)
59+
.setParameter("langType", langType)
60+
.setParameter("kindType", kindType)
61+
.setParameter("date", date)
62+
.getResultList();
63+
64+
return result.stream().findAny();
65+
}
66+
5467
@Override
5568
public Long delete(Long mealId) {
5669
return null;

src/main/java/com/example/helper/service/MealService.java

Lines changed: 84 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,21 @@
55
import com.example.helper.entity.Meal;
66
import com.example.helper.repository.MealRepository;
77
import com.example.helper.repository.SqlMealRepository;
8+
import com.fasterxml.jackson.databind.ObjectMapper;
9+
import lombok.extern.slf4j.Slf4j;
10+
811
import java.util.List;
912
import org.springframework.beans.factory.annotation.Autowired;
1013
import org.springframework.stereotype.Service;
1114
import org.springframework.transaction.annotation.Transactional;
1215

16+
import java.time.LocalDateTime;
17+
import java.time.ZoneId;
18+
import java.util.*;
19+
1320
@Service
1421
@Transactional
22+
@Slf4j
1523
public class MealService {
1624

1725
@Autowired(required = true)
@@ -35,23 +43,93 @@ private void validateDuplicateMeal(Meal meal) {
3543
});
3644
}
3745

46+
private String getNowMeal(Integer langType) {
47+
LocalDateTime currentDateTime = LocalDateTime.now(ZoneId.of("Asia/Seoul"));
48+
49+
Integer hour = currentDateTime.getHour();
50+
Integer kindType = 0;
51+
if(9 <= hour && hour < 13) {
52+
kindType = 1;
53+
}
54+
else if(13 <= hour && hour < 19) {
55+
kindType = 2;
56+
}
57+
else if(19 <= hour && hour < 24) {
58+
kindType = 0;
59+
}
60+
else {
61+
kindType = 0;
62+
currentDateTime.plusDays(1);
63+
}
64+
65+
String date = currentDateTime.getYear() + "-";
66+
date += String.format("%02d", currentDateTime.getMonth().getValue()) + "-";
67+
date += String.format("%02d", currentDateTime.getDayOfMonth()) + "";
68+
69+
Optional<Meal> result = sqlMealRepository.findByDate(2, langType, kindType, date);
70+
71+
if(result.isEmpty()) {
72+
//throw new IllegalStateException("조건에 맞는 식단이 존재하지 않습니다.");
73+
if(langType == 0) {
74+
return "식단 준비중입니다.";
75+
}
76+
else {
77+
return "The meal is being prepared.";
78+
}
79+
}
80+
Meal meal = result.get();
81+
return meal.generateMenu();
82+
}
83+
3884
public String getNowKorMeal() {
39-
//TODO sqlMealRepository.findNowKorMeal
40-
return "2023-01-27 조식\n\n제2학생회관1층\n\n얼갈이된장국\n";
85+
return getNowMeal(0);
4186
}
4287

4388
public String getNowEngMeal() {
44-
//TODO sqlMealRepository.findNowEngMeal
45-
return "2023-01-27 Breakfast\n\nStudent Union Bldg.2 1st floor\n\nSoybean Paste Soup\n";
89+
return getNowMeal(1);
4690
}
4791

48-
public String getSpecKorMeal() {
92+
public String getSpecKorMeal(String dateCustom, String bld) {
4993
//TODO sqlMealRepository.findSpecKorMeal
5094
return "2023-01-27 조식\n\n제2학생회관1층\n\n흰밥*김가루양념밥\n";
5195
}
5296

53-
public String getSpecEngMeal() {
97+
public String getSpecEngMeal(String dateCustom, String bld) {
5498
//TODO sqlMealRepository.findSpecEngMeal
5599
return "2023-01-27 Breakfast\n\nStudent Union Bldg.2 1st floor\n\nWhite rice*Seasoned rice with seaweed\n";
56100
}
101+
102+
public Map<String, Object> responseMeal(String menu) {
103+
// Response Body Construct
104+
// const responseBody = {
105+
// version: "2.0",
106+
// template: {
107+
// outputs: [
108+
// {
109+
// simpleText: {
110+
// text: nowMeal
111+
// }
112+
// }
113+
// ]
114+
// }
115+
// };
116+
117+
Map<String, Object> simpleText = new HashMap<>();
118+
simpleText.put("text", menu);
119+
120+
Map<String, Object> simpleTextWrapper = new HashMap<>();
121+
simpleTextWrapper.put("simpleText", simpleText);
122+
123+
List<Object> outputs = new ArrayList(1);
124+
outputs.add(simpleTextWrapper);
125+
126+
Map<String, Object> template = new HashMap<>();
127+
template.put("outputs", outputs);
128+
129+
Map<String, Object> responseBody = new HashMap<>();
130+
responseBody.put("version", "2.0");
131+
responseBody.put("template", template);
132+
133+
return responseBody;
134+
}
57135
}

0 commit comments

Comments
 (0)