Skip to content

Commit f9801fd

Browse files
김산김산
authored andcommitted
[#7] Feat: GET method to read the whole menus of a date
1 parent 173c502 commit f9801fd

File tree

6 files changed

+152
-16
lines changed

6 files changed

+152
-16
lines changed
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
package com.example.helper.constant;
2+
3+
public enum Types {
4+
LANG_KOR(0),
5+
LANG_ENG(1),
6+
BLDG1_1ST(0),
7+
BLDG1_2ND(1),
8+
BLDG2_1ST(2),
9+
KIND_BREAKFAST(0),
10+
KIND_LUNCH(1),
11+
KIND_DINNER(2),
12+
KIND_LUNCH_CORNER(3);
13+
14+
private Integer type;
15+
16+
Types(Integer type) {
17+
this.type = type;
18+
}
19+
20+
public Integer getType() {
21+
return type;
22+
}
23+
}

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

Lines changed: 20 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -234,10 +234,26 @@ public String readSpecEngMeal() throws JsonProcessingException {
234234
return result;
235235
}
236236

237-
@GetMapping("/date")
238-
public List<DateMealDto> DateMealRead(DateReqDto dateReqDto) {
239-
240-
List<DateMealDto> dateMealDtoList = dateMealService.getDateMeal(dateReqDto);
237+
// FE쪽에서 query에 담아주면 아래처럼 dto 객체 하나만 req로 받으면 되서 코드 깔끔함.
238+
// DateMealDto dateMealDtoList = dateMealService.getDateMeal(dateReqDto);
239+
// 근데 FE에서 보낼때 parameter 일일이 적기 귀찮으니 pathvariable로 받아서 처리
240+
@GetMapping("/date/{year}/{month}/{day}/{bldgType}/{langType}")
241+
public DateMealDto DateMealRead(
242+
@PathVariable("langType") Integer langType,
243+
@PathVariable("bldgType") Integer bldgType,
244+
@PathVariable("year") Integer year,
245+
@PathVariable("month") Integer month,
246+
@PathVariable("day") Integer day) {
247+
248+
DateReqDto dateReqDto = DateReqDto.builder()
249+
.langType(langType)
250+
.bldgType(bldgType)
251+
.year(year.toString())
252+
.month(month.toString())
253+
.date(day.toString())
254+
.build();
255+
256+
DateMealDto dateMealDtoList = dateMealService.getDateMenus(dateReqDto);
241257

242258
return dateMealDtoList;
243259
}
Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,24 @@
11
package com.example.helper.dto;
22

3-
import lombok.Data;
3+
import lombok.AccessLevel;
4+
import lombok.Builder;
5+
import lombok.Getter;
6+
import lombok.NoArgsConstructor;
47

5-
@Data
8+
// https://dev-jhl.tistory.com/entry/Lombok-올바른-Lombok-사용법-Builder
9+
@Getter
10+
@NoArgsConstructor(access = AccessLevel.PROTECTED)
611
public class DateMealDto {
712
private String breakfast;
8-
private String lunch_A;
13+
private String lunch;
14+
private String lunch_corner;
915
private String dinner;
10-
private String lunch_B;
16+
17+
@Builder
18+
public DateMealDto(String breakfast, String lunch, String lunch_corner, String dinner) {
19+
this.breakfast = breakfast;
20+
this.lunch = lunch;
21+
this.lunch_corner = lunch_corner;
22+
this.dinner = dinner;
23+
}
1124
}
Lines changed: 19 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,27 @@
11
package com.example.helper.dto;
22

3-
import lombok.Data;
3+
import lombok.AccessLevel;
4+
import lombok.Builder;
5+
import lombok.Getter;
6+
import lombok.NoArgsConstructor;
7+
import lombok.ToString;
48

5-
@Data
9+
@Getter
10+
@ToString
11+
@NoArgsConstructor(access = AccessLevel.PROTECTED)
612
public class DateReqDto {
13+
private Integer langType;
14+
private Integer bldgType;
715
private String year;
816
private String month;
917
private String date;
10-
private Integer langType;
11-
private Integer bldgType;
18+
19+
@Builder
20+
public DateReqDto(Integer langType, Integer bldgType, String year, String month, String date) {
21+
this.langType = langType;
22+
this.bldgType = bldgType;
23+
this.year = year;
24+
this.month = month;
25+
this.date = date;
26+
}
1227
}

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

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,18 @@ public Optional<Meal> findByPk(Integer bldgType, Integer langType, Integer dateT
3333
return result.stream().findAny();
3434
}
3535

36+
public Optional<Meal> findByDate(Integer bldgType, Integer langType, Integer kindType, String date) {
37+
List<Meal> result = em.createQuery("select m from Meal m where " +
38+
"m.bldgType = :bldgType and m.langType = :langType and m.kindType = :kindType " +
39+
"and m.date = :date", Meal.class)
40+
.setParameter("bldgType", bldgType)
41+
.setParameter("langType", langType)
42+
.setParameter("kindType", kindType)
43+
.setParameter("date", date)
44+
.getResultList();
45+
return result.stream().findAny();
46+
}
47+
3648
@Override
3749
public Optional<Meal> findById(Long mealId) {
3850
Meal meal = em.find(Meal.class, mealId);
Lines changed: 61 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,74 @@
11
package com.example.helper.service;
22

3+
import com.example.helper.constant.Types;
34
import com.example.helper.dto.DateMealDto;
45
import com.example.helper.dto.DateReqDto;
5-
import java.util.List;
6+
import com.example.helper.entity.Meal;
7+
import com.example.helper.repository.SqlMealRepository;
8+
import java.util.Optional;
9+
import lombok.extern.slf4j.Slf4j;
10+
import org.springframework.beans.factory.annotation.Autowired;
611
import org.springframework.stereotype.Service;
712
import org.springframework.transaction.annotation.Transactional;
813

914
@Service
1015
@Transactional
16+
@Slf4j
1117
public class DateMealService {
12-
// TODO: exception handling(target data is not in DB)
1318

14-
public List<DateMealDto> getDateMeal(DateReqDto dateReqDto) {
15-
return null;
19+
@Autowired
20+
private SqlMealRepository sqlMealRepository;
21+
22+
public DateMealDto getDateMenus(DateReqDto dateReqDto) {
23+
DateMealDto result = DateMealDto.builder()
24+
.breakfast(getMenuFromMeal(dateReqDto, Types.KIND_BREAKFAST.getType()))
25+
.lunch(getMenuFromMeal(dateReqDto, Types.KIND_LUNCH.getType()))
26+
.dinner(getMenuFromMeal(dateReqDto, Types.KIND_DINNER.getType()))
27+
.lunch_corner((getMenuFromMeal(dateReqDto, Types.KIND_LUNCH_CORNER.getType())))
28+
.build();
29+
30+
// TODO: exception handling(target data is not in DB)
31+
32+
return result;
33+
}
34+
35+
public String getMenuFromMeal(DateReqDto dateReqDto, Integer kindType) {
36+
String result = "";
37+
38+
// DB에는 KIND_TYPE이 0,1,2만 존재. 따라서 KIND_LUNCH_CORNER는 KIND_LUNCH로 찾아서 getSpecial해야함.
39+
Integer temp = kindType; // Integer는 immutable이므로 '='로 복사가능
40+
if (kindType.equals(Types.KIND_LUNCH_CORNER.getType())) {
41+
temp = Types.KIND_LUNCH.getType();
42+
}
43+
44+
Optional<Meal> meal = sqlMealRepository.findByDate(
45+
dateReqDto.getBldgType(),
46+
dateReqDto.getLangType(),
47+
temp,
48+
conv2DateStr(dateReqDto.getYear(), dateReqDto.getMonth(), dateReqDto.getDate()));
49+
50+
if (meal.isPresent()) {
51+
result = meal.get().getMenu();
52+
if (kindType.equals(Types.KIND_LUNCH_CORNER.getType())) {
53+
result = meal.get().getSpecial();
54+
}
55+
}
56+
return result;
57+
}
58+
59+
public String conv2DateStr(String year, String month, String date) {
60+
String result = "";
61+
result = year + "-" + padZero(month) + "-" + padZero(date);
62+
return result;
63+
}
64+
65+
public String padZero(String str) {
66+
String result = "";
67+
if (str.length() == 1) {
68+
result = "0" + str;
69+
} else {
70+
result = str;
71+
}
72+
return result;
1673
}
1774
}

0 commit comments

Comments
 (0)