try {
for (FoodRequestDto foodRequestDto : requestDto) {
//메뉴이름, 가격 유효성 체크
validPrice(foodRequestDto);
Food food = new Food(restaurant, foodRequestDto);
addList.add(food);
restaurant.addFoods(food);
}
} catch (Exception e) {
addList.clear();
return new ResponseEntity(HttpStatus.BAD_REQUEST);
}
foodRepository.saveAll(addList);
restaurantRepository.save(restaurant);
return new ResponseEntity(HttpStatus.OK);
}
처음에 이런식으로 코드를 짰다.
그런데 exception 발생한 것을 catch로 잡아줘서 새로 에러코드를 짜야 한다는 것이 맘에 안들었다.
또, 문제는 처음에는 메뉴이름 중복, 가격 유효성 체크를 하다가 캐치로 넘어가면 리턴 넘겼으면 했는데,
유효성 체크를 foodRepository에서 값을 가져오는 것으로 코드를 짜서 동시에 중복된 것들이 넘어오면 그냥 넘어가는 문제가 있었다.
조원과 상의해서 바꿔 본 것
register 함수 안 내용 {
Food food = new Food(restaurant, foodRequestDto);
restaurant.addFoods(food);
validDuplicationMenu(foodListSize,requestDto.size(),restaurant.getFoods().size());
}
public void validDuplicationMenu(int orginalSize, int addSize, int resultSize) {
if (orginalSize + addSize != resultSize) {
throw new IllegalArgumentException("중복 된 메뉴가 있습니다.");
}
}
Restaurant model 안 내용
(Food, Restaurant 다대일 관계 설정 되어 있음.)
public void addFoods(Food food) {
if (foods.stream().filter(e -> e.getName().equals(food.getName())).count() == 0) {
foods.add(food);
}
}
아직 스트림을 잘 못써서 이런 방법도 있구나.. 라는 생각이 들었다.
연관관계 매핑도 익숙치 않아서 계속 건드려 봐야할 것 같다.
재밌네
'TIL' 카테고리의 다른 글
항해99_TIL220610 (미니프로젝트 시작) (0) | 2022.06.10 |
---|---|
항해99_TIL220609 (db연결 안하고 테스트코드 돌리기) (0) | 2022.06.10 |
항해99_TIL220607 (클린코드) (0) | 2022.06.07 |
항해99_WIL220605 (ORM, SQL, MVC) (0) | 2022.06.05 |
항해99_TIL220604 (트랜잭션) (0) | 2022.06.04 |