Skip to content

Commit 119a9ad

Browse files
authored
Merge branch 'release' into charging
2 parents cd9dbd6 + 005c031 commit 119a9ad

File tree

7 files changed

+213
-4
lines changed

7 files changed

+213
-4
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: 40 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,40 +1,49 @@
11
package com.example.helper.controller;
2+
import com.example.helper.dto.DateMealDto;
3+
import com.example.helper.dto.DateReqDto;
24
import com.example.helper.dto.Mealdto;
35
import com.example.helper.entity.Meal;
6+
import com.example.helper.service.DateMealService;
47
import com.example.helper.service.MealService;
58
import com.fasterxml.jackson.core.JsonProcessingException;
69
import com.fasterxml.jackson.databind.ObjectMapper;
710
import jakarta.servlet.http.HttpServletRequest;
811
import lombok.extern.slf4j.Slf4j;
912
import org.springframework.beans.BeanUtils;
1013
import org.springframework.beans.factory.annotation.Autowired;
14+
import org.springframework.http.HttpStatus;
1115
import org.springframework.web.bind.annotation.*;
1216

1317
import java.util.ArrayList;
1418
import java.util.HashMap;
1519
import java.util.List;
1620
import java.util.Map;
21+
import org.springframework.web.server.ResponseStatusException;
1722

1823

19-
@RestController
24+
@RestController // @Controller + @ResponseBody. return이 view가 아닌, http body에 직접 쓰여짐.
2025
@RequestMapping(path = "/meals", produces = "application/json;charset=UTF-8")
2126
@Slf4j
2227
public class MealController {
2328

2429
@Autowired
2530
private MealService mealService;
2631

32+
@Autowired
33+
private DateMealService dateMealService;
34+
2735
@GetMapping("/all")
2836
public String hello() {
2937
return "Hello HELPERs. 초기 세팅 완료.";
3038
}
3139

3240
@PostMapping("/test")
33-
public @ResponseBody void test(String testStr) {
41+
public void test(String testStr) {
3442
log.info(testStr);
3543
}
44+
3645
@PostMapping("/create")
37-
public @ResponseBody String createMeal(@RequestBody Mealdto mealDto) {
46+
public String createMeal(@RequestBody Mealdto mealDto) {
3847
// input : 식단 json
3948
// output : None
4049

@@ -55,7 +64,6 @@ public Map<String, Object> readKorMeal() throws JsonProcessingException {
5564

5665
String nowMeal = mealService.getNowKorMeal();
5766
Map<String, Object> responseBody = mealService.responseMeal(nowMeal);
58-
5967
// if need to stratify.
6068
// ObjectMapper objectMapper = new ObjectMapper();
6169
// String result = objectMapper.writeValueAsString(responseBody);
@@ -121,4 +129,32 @@ public Map<String, Object> readSpecEngMeal(@RequestBody Map<String, Map<String,
121129

122130
return responseBody;
123131
}
132+
133+
// FE쪽에서 query에 담아주면 아래처럼 dto 객체 하나만 req로 받으면 되서 코드 깔끔함.
134+
// DateMealDto dateMealDtoList = dateMealService.getDateMeal(dateReqDto);
135+
// 근데 FE에서 보낼때 parameter 일일이 적기 귀찮으니 pathvariable로 받아서 처리
136+
@GetMapping("/date/{year}/{month}/{day}/{bldgType}/{langType}")
137+
public DateMealDto DateMealRead(
138+
@PathVariable("langType") Integer langType,
139+
@PathVariable("bldgType") Integer bldgType,
140+
@PathVariable("year") Integer year,
141+
@PathVariable("month") Integer month,
142+
@PathVariable("day") Integer day) {
143+
144+
DateReqDto dateReqDto = DateReqDto.builder()
145+
.langType(langType)
146+
.bldgType(bldgType)
147+
.year(year.toString())
148+
.month(month.toString())
149+
.date(day.toString())
150+
.build();
151+
152+
try {
153+
DateMealDto dateMealDto = dateMealService.getDateMenus(dateReqDto);
154+
return dateMealDto;
155+
} catch (IllegalStateException e) {
156+
throw new ResponseStatusException(
157+
HttpStatus.NOT_ACCEPTABLE, e.getMessage());
158+
}
159+
}
124160
}
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
package com.example.helper.dto;
2+
3+
import lombok.AccessLevel;
4+
import lombok.Builder;
5+
import lombok.Getter;
6+
import lombok.NoArgsConstructor;
7+
8+
// https://dev-jhl.tistory.com/entry/Lombok-올바른-Lombok-사용법-Builder
9+
@Getter
10+
@NoArgsConstructor(access = AccessLevel.PROTECTED)
11+
public class DateMealDto {
12+
private String breakfast;
13+
private String lunch;
14+
private String lunch_corner;
15+
private String dinner;
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+
}
24+
}
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
package com.example.helper.dto;
2+
3+
import lombok.AccessLevel;
4+
import lombok.Builder;
5+
import lombok.Getter;
6+
import lombok.NoArgsConstructor;
7+
import lombok.ToString;
8+
9+
@Getter
10+
@ToString
11+
@NoArgsConstructor(access = AccessLevel.PROTECTED)
12+
public class DateReqDto {
13+
private Integer langType;
14+
private Integer bldgType;
15+
private String year;
16+
private String month;
17+
private String date;
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+
}
27+
}

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: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
package com.example.helper.service;
2+
3+
import com.example.helper.constant.Types;
4+
import com.example.helper.dto.DateMealDto;
5+
import com.example.helper.dto.DateReqDto;
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;
11+
import org.springframework.stereotype.Service;
12+
import org.springframework.transaction.annotation.Transactional;
13+
14+
@Service
15+
@Transactional
16+
@Slf4j
17+
public class DateMealService {
18+
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+
if (checkMenusEmpty(result)) {
32+
throw new IllegalStateException("해당 날짜의 식단이 존재하지 않습니다.");
33+
}
34+
return result;
35+
}
36+
37+
public String getMenuFromMeal(DateReqDto dateReqDto, Integer kindType) {
38+
String result = "";
39+
40+
// DB에는 KIND_TYPE이 0,1,2만 존재. 따라서 KIND_LUNCH_CORNER는 KIND_LUNCH로 찾아서 getSpecial해야함.
41+
Integer temp = kindType; // Integer는 immutable이므로 '='로 복사가능
42+
if (kindType.equals(Types.KIND_LUNCH_CORNER.getType())) {
43+
temp = Types.KIND_LUNCH.getType();
44+
}
45+
46+
Optional<Meal> meal = sqlMealRepository.findByDate(
47+
dateReqDto.getBldgType(),
48+
dateReqDto.getLangType(),
49+
temp,
50+
conv2DateStr(dateReqDto.getYear(), dateReqDto.getMonth(), dateReqDto.getDate()));
51+
52+
if (meal.isPresent()) {
53+
result = meal.get().getMenu();
54+
if (kindType.equals(Types.KIND_LUNCH_CORNER.getType())) {
55+
result = meal.get().getSpecial();
56+
}
57+
}
58+
return result;
59+
}
60+
61+
public String conv2DateStr(String year, String month, String date) {
62+
String result = "";
63+
result = year + "-" + padZero(month) + "-" + padZero(date);
64+
return result;
65+
}
66+
67+
public String padZero(String str) {
68+
String result = "";
69+
if (str.length() == 1) {
70+
result = "0" + str;
71+
} else {
72+
result = str;
73+
}
74+
return result;
75+
}
76+
77+
public boolean checkMenusEmpty(DateMealDto dateMealDto) {
78+
return dateMealDto.getBreakfast().isEmpty() &&
79+
dateMealDto.getLunch().isEmpty() &&
80+
dateMealDto.getDinner().isEmpty() &&
81+
dateMealDto.getLunch_corner().isEmpty();
82+
}
83+
}

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,14 @@
11
package com.example.helper.service;
22

3+
import com.example.helper.dto.DateMealDto;
4+
import com.example.helper.dto.DateReqDto;
35
import com.example.helper.entity.Meal;
46
import com.example.helper.repository.MealRepository;
57
import com.example.helper.repository.SqlMealRepository;
68
import com.fasterxml.jackson.databind.ObjectMapper;
79
import lombok.extern.slf4j.Slf4j;
10+
11+
import java.util.List;
812
import org.springframework.beans.factory.annotation.Autowired;
913
import org.springframework.stereotype.Service;
1014
import org.springframework.transaction.annotation.Transactional;

0 commit comments

Comments
 (0)