Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@ public Shop toEntity(Owner owner) {
.phone(phone)
.name(name)
.internalName(name)
.chosung(name().substring(0, 1))
.chosung(name.substring(0, 1))
.isDeleted(false)
.isEvent(false)
.remarks("")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -42,17 +42,18 @@ public OwnerShopsResponse getOwnerShops(Long ownerId) {
public void createOwnerShops(Long ownerId, OwnerShopsRequest ownerShopsRequest) {
Owner owner = ownerRepository.getById(ownerId);
Shop newShop = ownerShopsRequest.toEntity(owner);
shopRepository.save(newShop);
Shop savedShop = shopRepository.save(newShop);

for (String imageUrl : ownerShopsRequest.imageUrls()) {
ShopImage shopImage = ShopImage.builder()
.shop(newShop)
.shop(savedShop)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

상점db에 원래 있던 shop이니 savedShop이라는 명칭이 조금더 어울리네요~
세세한 변경 좋아요!!

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

리뷰 재요청이 있는지는 처음알았네요.. ㅎ 꿀팁 감사합니다

.imageUrl(imageUrl)
.build();
shopImageRepository.save(shopImage);
}
for (OwnerShopsRequest.InnerOpenRequest open : ownerShopsRequest.open()) {
ShopOpen shopOpen = ShopOpen.builder()
.shop(newShop)
.shop(savedShop)
.openTime(open.openTime())
.closeTime(open.closeTime())
.dayOfWeek(open.dayOfWeek())
Expand All @@ -64,7 +65,7 @@ public void createOwnerShops(Long ownerId, OwnerShopsRequest ownerShopsRequest)
for (ShopCategory shopCategory : shopCategories) {
ShopCategoryMap shopCategoryMap = ShopCategoryMap.builder()
.shopCategory(shopCategory)
.shop(newShop)
.shop(savedShop)
.build();
shopCategoryMapRepository.save(shopCategoryMap);
}
Expand Down
55 changes: 26 additions & 29 deletions src/main/java/in/koreatech/koin/domain/shop/dto/ShopResponse.java
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
import static com.fasterxml.jackson.databind.PropertyNamingStrategies.SnakeCaseStrategy;
import in.koreatech.koin.domain.shop.model.MenuCategory;
import in.koreatech.koin.domain.shop.model.Shop;
import in.koreatech.koin.domain.shop.model.ShopCategory;
import in.koreatech.koin.domain.shop.model.ShopCategoryMap;
import in.koreatech.koin.domain.shop.model.ShopImage;
import in.koreatech.koin.domain.shop.model.ShopOpen;
Expand Down Expand Up @@ -61,46 +62,42 @@ public record ShopResponse(
LocalDateTime updatedAt
) {

public static ShopResponse of(Shop shop, List<ShopOpen> shopOpens, List<ShopImage> shopImages,
List<ShopCategoryMap> shopCategoryMaps, List<MenuCategory> menuCategories) {

List<InnerShopOpen> innerShopOpens = shopOpens.stream().map(shopOpen -> new InnerShopOpen(
shopOpen.getDayOfWeek(),
shopOpen.getClosed(),
shopOpen.getOpenTime(),
shopOpen.getCloseTime()
)).toList();

List<String> imageUrls = shopImages.stream().map(shopImage -> shopImage.getImageUrl()).toList();

List<InnerShopCategory> innerShopCategories = shopCategoryMaps.stream()
.map(shopCategoryMap -> new InnerShopCategory(
shopCategoryMap.getShopCategory().getId(),
shopCategoryMap.getShopCategory().getName()
))
.toList();

List<InnerMenuCategory> innerMenuCategories = menuCategories.stream()
.map(menuCategory -> new InnerMenuCategory(
menuCategory.getId(),
menuCategory.getName()
))
.toList();
public static ShopResponse from(Shop shop) {

return new ShopResponse(
shop.getAddress(),
shop.getDelivery(),
shop.getDeliveryPrice(),
shop.getDescription(),
shop.getId(),
imageUrls,
innerMenuCategories,
shop.getShopImages().stream()
.map(shopImage -> shopImage.getImageUrl())
.toList(),
shop.getMenuCategories().stream().map(menuCategory -> {
return new InnerMenuCategory(
menuCategory.getId(),
menuCategory.getName()
);
}).toList(),
shop.getName(),
innerShopOpens,
shop.getShopOpens().stream().map(shopOpen -> {
return new InnerShopOpen(
shopOpen.getDayOfWeek(),
shopOpen.getClosed(),
shopOpen.getOpenTime(),
shopOpen.getCloseTime()
);
}).toList(),
shop.getPayBank(),
shop.getPayCard(),
shop.getPhone(),
innerShopCategories,
shop.getShopCategories().stream().map(shopCategoryMap -> {
ShopCategory shopCategory = shopCategoryMap.getShopCategory();
return new InnerShopCategory(
shopCategory.getId(),
shopCategory.getName()
);
}).toList(),
shop.getUpdatedAt()
);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,12 @@
import in.koreatech.koin.global.domain.BaseEntity;
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 jakarta.validation.constraints.NotNull;
Expand All @@ -31,8 +34,9 @@ public final class MenuCategory extends BaseEntity {
private Long id;

@NotNull
@Column(name = "shop_id", nullable = false)
private Long shopId;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "shop_id", nullable = false)
private Shop shop;

@Size(max = 255)
@NotNull
Expand All @@ -47,8 +51,8 @@ public final class MenuCategory extends BaseEntity {
private List<MenuCategoryMap> menuCategoryMaps = new ArrayList<>();

@Builder
private MenuCategory(Long shopId, String name) {
this.shopId = shopId;
private MenuCategory(Shop shop, String name) {
this.shop = shop;
this.name = name;
}
}
45 changes: 42 additions & 3 deletions src/main/java/in/koreatech/koin/domain/shop/model/Shop.java
Original file line number Diff line number Diff line change
@@ -1,7 +1,11 @@
package in.koreatech.koin.domain.shop.model;

import static jakarta.persistence.CascadeType.*;
import static lombok.AccessLevel.PROTECTED;

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

import org.hibernate.annotations.Where;

import in.koreatech.koin.domain.owner.model.Owner;
Expand All @@ -15,6 +19,7 @@
import jakarta.persistence.JoinColumn;
import jakarta.persistence.Lob;
import jakarta.persistence.ManyToOne;
import jakarta.persistence.OneToMany;
import jakarta.persistence.Table;
import jakarta.validation.constraints.NotNull;
import jakarta.validation.constraints.Size;
Expand Down Expand Up @@ -96,10 +101,40 @@ public class Shop extends BaseEntity {
@Column(name = "hit", nullable = false)
private Long hit;

@OneToMany(mappedBy = "shop", orphanRemoval = true, cascade = {PERSIST, REMOVE})
private List<ShopCategoryMap> shopCategories = new ArrayList<>();

@OneToMany(mappedBy = "shop", orphanRemoval = true, cascade = {PERSIST, REMOVE})
private List<ShopOpen> shopOpens = new ArrayList<>();

@OneToMany(mappedBy = "shop", orphanRemoval = true, cascade = {PERSIST, REMOVE})
private List<ShopImage> shopImages = new ArrayList<>();

@OneToMany(mappedBy = "shop", orphanRemoval = true, cascade = {PERSIST, REMOVE})
private List<MenuCategory> menuCategories = new ArrayList<>();

Comment on lines +104 to +115
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

연관관계 설정 Good~~!

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

코드를 리팩토링하게된 개연성에 대한 설명이 부족했던것같습니다..ㅎ

@Builder
private Shop(Owner owner, String name, String internalName, String chosung, String phone, String address,
String description, Boolean delivery, Long deliveryPrice, Boolean payCard, Boolean payBank,
Boolean isDeleted, Boolean isEvent, String remarks, Long hit) {
private Shop(
Owner owner,
String name,
String internalName,
String chosung,
String phone,
String address,
String description,
Boolean delivery,
Long deliveryPrice,
Boolean payCard,
Boolean payBank,
Boolean isDeleted,
Boolean isEvent,
String remarks,
Long hit,
List<ShopCategoryMap> shopCategories,
List<ShopOpen> shopOpens,
List<ShopImage> shopImages,
List<MenuCategory> menuCategories
) {
this.owner = owner;
this.name = name;
this.internalName = internalName;
Expand All @@ -115,5 +150,9 @@ private Shop(Owner owner, String name, String internalName, String chosung, Stri
this.isEvent = isEvent;
this.remarks = remarks;
this.hit = hit;
this.shopCategories = shopCategories;
this.shopOpens = shopOpens;
this.shopImages = shopImages;
this.menuCategories = menuCategories;
}
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,11 @@
package in.koreatech.koin.domain.shop.model;

import static jakarta.persistence.CascadeType.PERSIST;
import static jakarta.persistence.CascadeType.REMOVE;

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

import org.hibernate.annotations.Where;

import in.koreatech.koin.global.domain.BaseEntity;
Expand All @@ -8,6 +14,7 @@
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import jakarta.persistence.OneToMany;
import jakarta.persistence.Table;
import jakarta.validation.constraints.NotNull;
import jakarta.validation.constraints.Size;
Expand Down Expand Up @@ -40,6 +47,9 @@ public class ShopCategory extends BaseEntity {
@Column(name = "is_deleted", nullable = false)
private Boolean isDeleted = false;

@OneToMany(mappedBy = "shopCategory", orphanRemoval = true, cascade = {PERSIST, REMOVE})
private List<ShopCategoryMap> shopCategoryMaps = new ArrayList<>();

@Builder
private ShopCategory(Long id, String name, String imageUrl, Boolean isDeleted) {
this.id = id;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,6 @@
@Table(name = "shop_opens")
@Where(clause = "is_deleted=0")
public class ShopOpen extends BaseEntity {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id", nullable = false)
Expand All @@ -49,12 +48,12 @@ public class ShopOpen extends BaseEntity {

@NotNull
@Column(name = "open_time")
@Convert(converter = LocalTimeAttributeConverter.class)
@Convert(converter = LocalTimeAttributeConverter.class)
private LocalTime openTime;

@NotNull
@Column(name = "close_time")
@Convert(converter = LocalTimeAttributeConverter.class)
@Convert(converter = LocalTimeAttributeConverter.class)
private LocalTime closeTime;

@NotNull
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,9 +32,6 @@ public class ShopService {
private final MenuRepository menuRepository;
private final MenuCategoryRepository menuCategoryRepository;
private final ShopRepository shopRepository;
private final ShopOpenRepository shopOpenRepository;
private final ShopCategoryMapRepository shopCategoryMapRepository;
private final ShopImageRepository shopImageRepository;

public MenuDetailResponse findMenu(Long menuId) {
Menu menu = menuRepository.getById(menuId);
Expand Down Expand Up @@ -62,11 +59,7 @@ public MenuCategoriesResponse getMenuCategories(Long shopId) {

public ShopResponse getShop(Long shopId) {
Shop shop = shopRepository.getById(shopId);
List<ShopOpen> shopOpens = shopOpenRepository.findAllByShopId(shopId);
List<ShopImage> shopImages = shopImageRepository.findAllByShopId(shopId);
List<ShopCategoryMap> shopCategoryMaps = shopCategoryMapRepository.findAllByShopId(shopId);
List<MenuCategory> menuCategories = menuCategoryRepository.findAllByShopId(shopId);
return ShopResponse.of(shop, shopOpens, shopImages, shopCategoryMaps, menuCategories);
return ShopResponse.from(shop);
}

public ShopMenuResponse getShopMenu(Long shopId) {
Expand Down
11 changes: 6 additions & 5 deletions src/test/java/in/koreatech/koin/acceptance/OwnerShopApiTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.transaction.annotation.Transactional;

import in.koreatech.koin.AcceptanceTest;
import in.koreatech.koin.domain.owner.model.Owner;
Expand Down Expand Up @@ -189,19 +190,19 @@ void createOwnerShop() {
"010-1234-5678"
);

ShopCategory shopCategoryRequest1 = ShopCategory.builder()
ShopCategory shopCategory1 = ShopCategory.builder()
.isDeleted(false)
.name("테스트1")
.imageUrl("https://test.com/test1.jpg")
.build();

ShopCategory shopCategoryRequest2 = ShopCategory.builder()
ShopCategory shopCategory2 = ShopCategory.builder()
.isDeleted(false)
.name("테스트2")
.imageUrl("https://test.com/test2.jpg")
.build();
shopCategoryRepository.save(shopCategoryRequest1);
shopCategoryRepository.save(shopCategoryRequest2);
shopCategoryRepository.save(shopCategory1);
shopCategoryRepository.save(shopCategory2);

ExtractableResponse<Response> response = RestAssured
.given()
Expand Down Expand Up @@ -231,11 +232,11 @@ void createOwnerShop() {
softly.assertThat(createdShop.getPayBank()).isEqualTo(ownerShopsRequest.payBank());
softly.assertThat(createdShop.getPayCard()).isEqualTo(ownerShopsRequest.payCard());
softly.assertThat(createdShop.getPhone()).isEqualTo(ownerShopsRequest.phone());
softly.assertThat(shopOpens).hasSize(2);
softly.assertThat(categoryIds).containsAnyElementsOf(shopCategoryMaps.stream()
.map(shopCategory -> shopCategory.getShopCategory().getId()).toList());
softly.assertThat(imageUrls).containsAnyElementsOf(shopImages.stream()
.map(ShopImage::getImageUrl).toList());
softly.assertThat(shopOpens).hasSize(2);
}
);
}
Expand Down
Loading