Skip to content

Commit

Permalink
Merge pull request #14 from marinesnow34/store_detail
Browse files Browse the repository at this point in the history
Feat: 메뉴 조회 구현
  • Loading branch information
marinesnow34 authored Nov 15, 2023
2 parents 9255c7e + a3a923d commit 9d1cef0
Show file tree
Hide file tree
Showing 10 changed files with 164 additions and 10 deletions.
21 changes: 15 additions & 6 deletions src/main/java/com/readyvery/readyverydemo/domain/Foodie.java
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@
@Getter
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@Entity
@Table(name = "FOODIES")
@Table(name = "FOODIE")
@AllArgsConstructor
@Slf4j
public class Foodie extends BaseTimeEntity {
Expand All @@ -43,21 +43,30 @@ public class Foodie extends BaseTimeEntity {
private Long price;

//식품 이미지
@Column(nullable = false)
@Column(nullable = true)
private String imgUrl;

//식품 매진
@Column(nullable = false, columnDefinition = "BOOLEAN default false")
private boolean soldOut;

//식품 카테고리
@Column(nullable = false)
private String category;
// @Column(nullable = false)
// private String category;

//히트 메뉴
@Column(nullable = false, columnDefinition = "BOOLEAN default false")
private boolean hit;

//메뉴 - 가게 연관관계 매핑
// @ManyToOne(fetch = FetchType.LAZY)
// @JoinColumn(name = "store_idx")
// private Store store;

//메뉴 - 메뉴 카테고리 연관관계 매핑
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "store_idx")
private Store store;
@JoinColumn(name = "foodie_category_idx")
private FoodieCategory foodieCategory;

//메뉴 - 식품 카테고리 연관관계 매핑
@OneToMany(mappedBy = "foodie", cascade = CascadeType.ALL)
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
package com.readyvery.readyverydemo.domain;

import java.util.ArrayList;
import java.util.List;

import jakarta.persistence.CascadeType;
import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.FetchType;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import jakarta.persistence.JoinColumn;
import jakarta.persistence.ManyToOne;
import jakarta.persistence.OneToMany;
import jakarta.persistence.Table;
import lombok.AccessLevel;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.extern.slf4j.Slf4j;

@Getter
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@Entity
@Table(name = "FOODIE_CATEGORY")
@AllArgsConstructor
@Slf4j
public class FoodieCategory {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "foodie_category_idx")
private Long id;

@Column(nullable = false)
private String name;

//메뉴 - 가게 연관관계 매핑
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "store_idx")
private Store store;

@OneToMany(mappedBy = "foodieCategory", cascade = CascadeType.ALL)
private List<Foodie> foodies = new ArrayList<>();
}
8 changes: 6 additions & 2 deletions src/main/java/com/readyvery/readyverydemo/domain/Store.java
Original file line number Diff line number Diff line change
Expand Up @@ -69,9 +69,13 @@ public class Store extends BaseTimeEntity {
@JoinColumn(name = "ceo_idx")
private CeoInfo ceoInfo;

//가게 메뉴 연관관계 매핑
//가게 메뉴 카테고리 연관관계 매핑
@OneToMany(mappedBy = "store", cascade = CascadeType.ALL)
private List<Foodie> foodies = new ArrayList<>();
private List<FoodieCategory> foodieCategories = new ArrayList<>();

//가게 메뉴 연관관계 매핑
// @OneToMany(mappedBy = "store", cascade = CascadeType.ALL)
// private List<Foodie> foodies = new ArrayList<>();

//가게 장바구니 연관관계 매핑
@OneToMany(mappedBy = "store", cascade = CascadeType.ALL)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
import org.springframework.web.bind.annotation.RestController;

import com.readyvery.readyverydemo.src.store.dto.StoreDetailRes;
import com.readyvery.readyverydemo.src.store.dto.StoreMenuRes;

import lombok.RequiredArgsConstructor;

Expand All @@ -22,4 +23,10 @@ public ResponseEntity<StoreDetailRes> getStoreDetail(@PathVariable("storeId") Lo
StoreDetailRes storeDetailRes = storeService.getStoreDetail(storeId);
return new ResponseEntity<>(storeDetailRes, HttpStatus.OK);
}

@GetMapping("/{storeId}/menu")
public ResponseEntity<StoreMenuRes> getStoreMenu(@PathVariable("storeId") Long storeId) {
StoreMenuRes storeMenuRes = storeService.getStoreMenu(storeId);
return new ResponseEntity<>(storeMenuRes, HttpStatus.OK);
}
}
Original file line number Diff line number Diff line change
@@ -1,7 +1,10 @@
package com.readyvery.readyverydemo.src.store;

import com.readyvery.readyverydemo.src.store.dto.StoreDetailRes;
import com.readyvery.readyverydemo.src.store.dto.StoreMenuRes;

public interface StoreService {
StoreDetailRes getStoreDetail(Long storeId);

StoreMenuRes getStoreMenu(Long storeId);
}
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
import com.readyvery.readyverydemo.global.exception.ExceptionCode;
import com.readyvery.readyverydemo.src.store.dto.StoreDetailRes;
import com.readyvery.readyverydemo.src.store.dto.StoreMapper;
import com.readyvery.readyverydemo.src.store.dto.StoreMenuRes;

import lombok.RequiredArgsConstructor;

Expand All @@ -19,8 +20,19 @@ public class StoreServiceImpl implements StoreService {

@Override
public StoreDetailRes getStoreDetail(Long storeId) {
Store store = storeRepository.findById(storeId)
.orElseThrow(() -> new BusinessLogicException(ExceptionCode.STORE_NOT_FOUND));
Store store = getStore(storeId);
return storeMapper.storeToStoreDetailRes(store);
}

private Store getStore(Long storeId) {
return storeRepository.findById(storeId)
.orElseThrow(() -> new BusinessLogicException(ExceptionCode.STORE_NOT_FOUND));
}

@Override
public StoreMenuRes getStoreMenu(Long storeId) {
Store store = getStore(storeId);
return storeMapper.storeToStoreMenuRes(store);
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package com.readyvery.readyverydemo.src.store.dto;

import java.util.List;

import lombok.Builder;
import lombok.Getter;

@Builder
@Getter
public class MenuDto {
private Long categoryId;
private String category;
private List<MenuItemDto> menuItems;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package com.readyvery.readyverydemo.src.store.dto;

import lombok.Builder;
import lombok.Getter;

@Builder
@Getter
public class MenuItemDto {
private Long foodyId;
private String name;
private String imgUrl;
private Long price;
private Long sale;
private Boolean hit;
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@

import org.springframework.stereotype.Component;

import com.readyvery.readyverydemo.domain.Foodie;
import com.readyvery.readyverydemo.domain.FoodieCategory;
import com.readyvery.readyverydemo.domain.Store;
import com.readyvery.readyverydemo.domain.StoreImg;

Expand All @@ -16,4 +18,35 @@ public StoreDetailRes storeToStoreDetailRes(Store store) {
.openTime(store.getTime())
.build();
}

public StoreMenuRes storeToStoreMenuRes(Store store) {
return StoreMenuRes.builder()
.menu(store.getFoodieCategories()
.stream()
.map(this::categoryToMenuDto)
.toList())
.build();
}

private MenuDto categoryToMenuDto(FoodieCategory category) {
return MenuDto.builder()
.categoryId(category.getId())
.category(category.getName())
.menuItems(category.getFoodies()
.stream()
.map(this::foodieToMenuItems)
.toList())
.build();
}

private MenuItemDto foodieToMenuItems(Foodie foodie) {
return MenuItemDto.builder()
.foodyId(foodie.getId())
.name(foodie.getName())
.imgUrl(foodie.getImgUrl())
.price(foodie.getPrice())
.sale(foodie.getTakeOut() != null ? foodie.getTakeOut().getPrice() : null)
.hit(foodie.isHit())
.build();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
package com.readyvery.readyverydemo.src.store.dto;

import java.util.List;

import lombok.Builder;
import lombok.Getter;

@Builder
@Getter
public class StoreMenuRes {
private List<MenuDto> menu;
}

0 comments on commit 9d1cef0

Please sign in to comment.