Skip to content

Commit

Permalink
Merge pull request #43 from everymeals/test/meal-service
Browse files Browse the repository at this point in the history
[Test/meal-service] 식사 관련 API 테스트 코드 작성 ( 실패 케이스 ) 및 리펙토링
  • Loading branch information
Qbeom0925 authored Oct 3, 2023
2 parents d81708c + 34604fb commit 3ea6d6c
Show file tree
Hide file tree
Showing 7 changed files with 197 additions and 151 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -3,27 +3,16 @@

import io.swagger.v3.oas.annotations.media.Schema;
import java.time.LocalDate;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;

@Getter
@Setter
@NoArgsConstructor
public class MealRegisterReq {

@Schema(description = "메뉴를 ',' 구분자를 기준으로 묶어서 하나의 문자열로 보내주세요.", defaultValue = "갈비탕, 깍두기, 흰쌀밥")
private String menu;

@Schema(description = "식사 분류 ( 조식 | 중식 | 석식 | 특식 ) ENUM으로 관리합니다.", defaultValue = "LUNCH")
private String mealType;

@Schema(description = "식사 운영 상태 ( 운영 | 미운영 | 단축운영 )", defaultValue = "OPEN")
private String mealStatus;

@Schema(description = "식사 제공 날짜 ( yyyy-MM-dd ) ", defaultValue = "2023-10-01")
private LocalDate offeredAt;

@Schema(description = "가격을 Double 형태로 관리합니다.", defaultValue = "10000.0")
private Double price;
}
public record MealRegisterReq(
@Schema(
description = "메뉴를 ',' 구분자를 기준으로 묶어서 하나의 문자열로 보내주세요.",
defaultValue = "갈비탕, 깍두기, 흰쌀밥")
String menu,
@Schema(description = "식사 분류 ( 조식 | 중식 | 석식 | 특식 ) ENUM으로 관리합니다.", defaultValue = "LUNCH")
String mealType,
@Schema(description = "식사 운영 상태 ( 운영 | 미운영 | 단축운영 )", defaultValue = "OPEN")
String mealStatus,
@Schema(description = "식사 제공 날짜 ( yyyy-MM-dd ) ", defaultValue = "2023-10-01")
LocalDate offeredAt,
@Schema(description = "가격을 Double 형태로 관리합니다.", defaultValue = "10000.0") Double price) {}
Original file line number Diff line number Diff line change
Expand Up @@ -3,30 +3,17 @@

import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.validation.constraints.NotBlank;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;

@Getter
@Setter
@NoArgsConstructor
public class RestaurantRegisterReq {
@Schema(title = "대학 이름", description = "학교 한글명", defaultValue = "명지대학교")
@NotBlank
private String universityName;

@Schema(title = "캠퍼스 이름", description = "학교 캠퍼스명", defaultValue = "인문캠퍼스")
@NotBlank
private String campusName;

@Schema(
title = "학교 주소",
description = "시/구/동 도로명 주소 모두 기입",
defaultValue = "서울시 서대문구 남가좌동 거북골로 34")
@NotBlank
private String address;

@Schema(title = "학생 식당 이름", description = "학생식당 한글명", defaultValue = "MCC 식당")
@NotBlank
private String restaurantName;
}
public record RestaurantRegisterReq(
@Schema(title = "대학 이름", description = "학교 한글명", defaultValue = "명지대학교") @NotBlank
String universityName,
@Schema(title = "캠퍼스 이름", description = "학교 캠퍼스명", defaultValue = "인문캠퍼스") @NotBlank
String campusName,
@Schema(
title = "학교 주소",
description = "시/구/동 도로명 주소 모두 기입",
defaultValue = "서울시 서대문구 남가좌동 거북골로 34")
@NotBlank
String address,
@Schema(title = "학생 식당 이름", description = "학생식당 한글명", defaultValue = "MCC 식당") @NotBlank
String restaurantName) {}
Original file line number Diff line number Diff line change
Expand Up @@ -3,17 +3,7 @@

import io.swagger.v3.oas.annotations.media.Schema;
import java.util.List;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;

@Getter
@Setter
@NoArgsConstructor
public class WeekMealRegisterReq {
@Schema(description = "등록하고자 하는 식단 데이터 객체")
private List<MealRegisterReq> registerReqList;

@Schema(description = "학생식당 PK", defaultValue = "1")
private Long restaurantIdx;
}
public record WeekMealRegisterReq(
@Schema(description = "등록하고자 하는 식단 데이터 객체") List<MealRegisterReq> registerReqList,
@Schema(description = "학생식당 PK", defaultValue = "1") Long restaurantIdx) {}
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ public List<Meal> findAllByAfterOfferedAt(MealRegisterReq mealRegisterReq, Long
.from(QMeal.meal)
.leftJoin(QMeal.meal.restaurant, QRestaurant.restaurant)
.on(QRestaurant.restaurant.idx.eq(restaurantIdx))
.where(isAfterOfferedAt(mealRegisterReq.getOfferedAt()))
.where(isAfterOfferedAt(mealRegisterReq.offeredAt()))
.fetch();
return queryResult;
}
Expand Down
28 changes: 14 additions & 14 deletions src/main/java/everymeal/server/meal/service/MealServiceImpl.java
Original file line number Diff line number Diff line change
Expand Up @@ -46,16 +46,16 @@ public Boolean createRestaurant(RestaurantRegisterReq restaurantRegisterReq) {
University university =
universityRepository
.findByNameAndCampusNameAndIsDeletedFalse(
restaurantRegisterReq.getUniversityName(),
restaurantRegisterReq.getCampusName())
restaurantRegisterReq.universityName(),
restaurantRegisterReq.campusName())
.stream()
.findFirst()
.orElseThrow(
() -> new ApplicationException(ExceptionList.UNIVERSITY_NOT_FOUND));
Restaurant restaurant =
Restaurant.builder()
.name(restaurantRegisterReq.getRestaurantName())
.address(restaurantRegisterReq.getAddress())
.name(restaurantRegisterReq.restaurantName())
.address(restaurantRegisterReq.address())
.university(university)
.build();
return restaurantRepository.save(restaurant).getIdx() != null;
Expand All @@ -67,34 +67,34 @@ public Boolean createWeekMeal(WeekMealRegisterReq weekMealRegisterReq) {
// 식당 조회
Restaurant restaurant =
restaurantRepository
.findById(weekMealRegisterReq.getRestaurantIdx())
.findById(weekMealRegisterReq.restaurantIdx())
.orElseThrow(
() -> new ApplicationException(ExceptionList.RESTAURANT_NOT_FOUND));
// REQ 데이터 제공 날짜 기준 오름차순 정렬
weekMealRegisterReq
.getRegisterReqList()
.sort(Comparator.comparing(MealRegisterReq::getOfferedAt));
.registerReqList()
.sort(Comparator.comparing(MealRegisterReq::offeredAt));
/**
* 조건) 가장 늦은 offeredAt를 기준으로 날짜가 이후인 경우에만 추가할 수 있어야 한다. ( 데이터 간 충돌 방지를 위해서 ) 가정) REQ로 들어온
* offeredAt(식사제공날짜)가 이미 테이블 내에 포함되어 있다. 행동) REQ 중 가장 빠른 offeredAt을 기준으로 테이블 내에 데이터가 존재하는지
* 조회 list.size() > 0 존재한다면, 오류 처리 존재하지 않는다면, 테이블에 삽입
*/
List<Meal> meals =
mealRepositoryCustom.findAllByAfterOfferedAt(
weekMealRegisterReq.getRegisterReqList().get(0), restaurant.getIdx());
weekMealRegisterReq.registerReqList().get(0), restaurant.getIdx());
if (meals.size() > 0)
throw new ApplicationException(ExceptionList.INVALID_MEAL_OFFEREDAT_REQUEST);
// 주간 단위 식단 생성
List<Meal> mealList = new ArrayList<>();
for (MealRegisterReq req : weekMealRegisterReq.getRegisterReqList()) {
for (MealRegisterReq req : weekMealRegisterReq.registerReqList()) {
Meal meal =
Meal.builder()
.mealStatus(MealStatus.valueOf(req.getMealStatus()))
.mealType(MealType.valueOf(req.getMealType()))
.menu(req.getMenu())
.mealStatus(MealStatus.valueOf(req.mealStatus()))
.mealType(MealType.valueOf(req.mealType()))
.menu(req.menu())
.restaurant(restaurant)
.price(req.getPrice())
.offeredAt(req.getOfferedAt())
.price(req.price())
.offeredAt(req.offeredAt())
.build();
mealList.add(meal);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,19 +25,18 @@ class MealControllerTest extends ControllerTestSupport {
@Test
void createWeekMeal() throws Exception {
// given
WeekMealRegisterReq req = new WeekMealRegisterReq();
req.setRestaurantIdx(1L); // 식당 PK
List<MealRegisterReq> list = new ArrayList<>(); // 식사 데이터
for (int i = 0; i < 7; i++) {
MealRegisterReq mealReq = new MealRegisterReq();
mealReq.setMealStatus(MealStatus.OPEN.name());
mealReq.setMenu("갈비탕, 깍두기, 흰쌀밥");
mealReq.setMealType(MealType.BREAKFAST.name());
mealReq.setPrice(10000.0);
mealReq.setOfferedAt(LocalDate.now());
MealRegisterReq mealReq =
new MealRegisterReq(
"갈비탕, 깍두기, 흰쌀밥",
MealType.BREAKFAST.name(),
MealStatus.OPEN.name(),
LocalDate.now(),
10000.0);
list.add(mealReq);
}
req.setRegisterReqList(list);
WeekMealRegisterReq req = new WeekMealRegisterReq(list, 1L);

// when-then
mockMvc.perform(
Expand Down Expand Up @@ -120,11 +119,6 @@ void getWeekMeal() throws Exception {
}

private RestaurantRegisterReq getRestaurantRegisterReq() {
RestaurantRegisterReq req = new RestaurantRegisterReq();
req.setRestaurantName("MCC 식당");
req.setAddress("서울시 서대문구 남가좌동 거북골로 34");
req.setUniversityName("명지대학교");
req.setCampusName("인문캠퍼스");
return req;
return new RestaurantRegisterReq("명지대학교", "인문캠퍼스", "서울시 서대문구 남가좌동 거북골로 34", "MCC 식당");
}
}
Loading

0 comments on commit 3ea6d6c

Please sign in to comment.