diff --git a/application/app-api/src/main/java/core/startup/mealtoktok/api/dishstore/DishStoreApi.java b/application/app-api/src/main/java/core/startup/mealtoktok/api/dishstore/DishStoreApi.java new file mode 100644 index 0000000..7be4142 --- /dev/null +++ b/application/app-api/src/main/java/core/startup/mealtoktok/api/dishstore/DishStoreApi.java @@ -0,0 +1,73 @@ +package core.startup.mealtoktok.api.dishstore; + +import java.util.List; + +import org.springframework.security.core.annotation.AuthenticationPrincipal; +import org.springframework.security.core.userdetails.User; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import lombok.RequiredArgsConstructor; + +import core.startup.mealtoktok.api.dishstore.request.DishStoreRequest; +import core.startup.mealtoktok.api.dishstore.response.DishStoreResponse; +import core.startup.mealtoktok.common.dto.Response; +import core.startup.mealtoktok.domain.dishstore.DishStore; +import core.startup.mealtoktok.domain.dishstore.DishStoreService; +import core.startup.mealtoktok.domain.dishstore.TargetDishStore; + +@RestController +@RequiredArgsConstructor +@RequestMapping("/api/v1") +public class DishStoreApi implements DishStoreApiDocs { + + private final DishStoreService dishStoreService; + + @PostMapping("/admin/dish-stores") + public Response createDishStore( + @RequestBody DishStoreRequest dishStoreRequest, + @AuthenticationPrincipal User currnetUser) { + dishStoreService.createDishStore(dishStoreRequest.toDishStoreInfo()); + return Response.success("반찬 가게 생성 성공"); + } + + @DeleteMapping("/admin/dish-stores/{dishStoreId}") + public Response deleteDishStore( + @PathVariable("dishStoreId") Long dishStoreId, + @AuthenticationPrincipal User currentUser) { + dishStoreService.deleteDishStore(TargetDishStore.from(dishStoreId)); + return Response.success("반찬 가게 삭제 성공"); + } + + @PutMapping("/admin/dish-stores/{dishStoreId}") + public Response updateDishStore( + @PathVariable("dishStoreId") Long dishStoreId, + @RequestBody DishStoreRequest dishStoreRequest, + @AuthenticationPrincipal User currentUser) { + dishStoreService.updateDishStore( + TargetDishStore.from(dishStoreId), dishStoreRequest.toDishStoreInfo()); + return Response.success("반찬 가게 수정 성공"); + } + + @GetMapping("/dish-stores") + public Response> readDishStores( + @AuthenticationPrincipal User currentUser) { + List dishStoreResponse = + dishStoreService.readDishStores().stream().map(DishStoreResponse::from).toList(); + return Response.success(dishStoreResponse); + } + + @GetMapping("/dish-stores/{dishStoreId}") + public Response readDishStores( + @PathVariable("dishStoreId") Long dishStoreId, + @AuthenticationPrincipal User currentUser) { + DishStore dishStore = dishStoreService.readDishStore(TargetDishStore.from(dishStoreId)); + return Response.success(DishStoreResponse.from(dishStore)); + } +} diff --git a/application/app-api/src/main/java/core/startup/mealtoktok/api/dishstore/DishStoreApiDocs.java b/application/app-api/src/main/java/core/startup/mealtoktok/api/dishstore/DishStoreApiDocs.java new file mode 100644 index 0000000..1fcae40 --- /dev/null +++ b/application/app-api/src/main/java/core/startup/mealtoktok/api/dishstore/DishStoreApiDocs.java @@ -0,0 +1,32 @@ +package core.startup.mealtoktok.api.dishstore; + +import java.util.List; + +import org.springframework.security.core.userdetails.User; + +import core.startup.mealtoktok.api.dishstore.request.DishStoreRequest; +import core.startup.mealtoktok.api.dishstore.response.DishStoreResponse; +import core.startup.mealtoktok.common.dto.Response; + +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; + +@Tag(name = "반찬 가게 API") +public interface DishStoreApiDocs { + + @Operation(summary = "반찬 가게 생성") + Response createDishStore(DishStoreRequest dishStoreRequest, User currentUser); + + @Operation(summary = "반찬 가게 삭제") + Response deleteDishStore(Long dishStoreId, User currentUser); + + @Operation(summary = "반찬 가게 수정") + Response updateDishStore( + Long dishStoreId, DishStoreRequest dishStoreRequest, User currentUser); + + @Operation(summary = "반찬 가게 목록 조회") + Response> readDishStores(User currentUser); + + @Operation(summary = "반찬 가게 상세 조회") + Response readDishStores(Long dishStoreId, User currentUser); +} diff --git a/application/app-api/src/main/java/core/startup/mealtoktok/api/dishstore/request/DishStoreRequest.java b/application/app-api/src/main/java/core/startup/mealtoktok/api/dishstore/request/DishStoreRequest.java new file mode 100644 index 0000000..f0a39fe --- /dev/null +++ b/application/app-api/src/main/java/core/startup/mealtoktok/api/dishstore/request/DishStoreRequest.java @@ -0,0 +1,21 @@ +package core.startup.mealtoktok.api.dishstore.request; + +import java.time.LocalTime; + +import core.startup.mealtoktok.domain.dishstore.DishStoreInfo; +import core.startup.mealtoktok.domain.user.Address; + +public record DishStoreRequest( + String storeName, + String phoneNumber, + Address address, + Double latitude, + Double longitude, + LocalTime openTime, + LocalTime closeTime) { + + public DishStoreInfo toDishStoreInfo() { + return DishStoreInfo.of( + storeName, phoneNumber, address, latitude, longitude, openTime, closeTime); + } +} diff --git a/application/app-api/src/main/java/core/startup/mealtoktok/api/dishstore/response/DishStoreResponse.java b/application/app-api/src/main/java/core/startup/mealtoktok/api/dishstore/response/DishStoreResponse.java new file mode 100644 index 0000000..de01d5a --- /dev/null +++ b/application/app-api/src/main/java/core/startup/mealtoktok/api/dishstore/response/DishStoreResponse.java @@ -0,0 +1,26 @@ +package core.startup.mealtoktok.api.dishstore.response; + +import java.time.LocalTime; + +import core.startup.mealtoktok.domain.dishstore.DishStore; +import core.startup.mealtoktok.domain.user.Address; + +public record DishStoreResponse( + String storeName, + String phoneNumber, + Address address, + Double latitude, + Double longitude, + LocalTime openTime, + LocalTime closeTime) { + public static DishStoreResponse from(DishStore dishStore) { + return new DishStoreResponse( + dishStore.getDishStoreInfo().storeName(), + dishStore.getDishStoreInfo().phoneNumber(), + dishStore.getDishStoreInfo().addressWithCoordinate().address(), + dishStore.getDishStoreInfo().addressWithCoordinate().coordinate().latitude(), + dishStore.getDishStoreInfo().addressWithCoordinate().coordinate().longitude(), + dishStore.getDishStoreInfo().operatingHour().openTime(), + dishStore.getDishStoreInfo().operatingHour().closeTime()); + } +} diff --git a/domain/src/main/java/core/startup/mealtoktok/domain/dishstore/DishCategoryReader.java b/domain/src/main/java/core/startup/mealtoktok/domain/dishstore/DishCategoryReader.java index 09983b9..29e6abf 100644 --- a/domain/src/main/java/core/startup/mealtoktok/domain/dishstore/DishCategoryReader.java +++ b/domain/src/main/java/core/startup/mealtoktok/domain/dishstore/DishCategoryReader.java @@ -17,6 +17,6 @@ public DishCategory read(TargetDishCategory targetDishCategory) { } public List readAll() { - return dishRepository.readAllCategories(); + return dishRepository.findAllCategories(); } } diff --git a/domain/src/main/java/core/startup/mealtoktok/domain/dishstore/DishRepository.java b/domain/src/main/java/core/startup/mealtoktok/domain/dishstore/DishRepository.java index 3f95267..904fff0 100644 --- a/domain/src/main/java/core/startup/mealtoktok/domain/dishstore/DishRepository.java +++ b/domain/src/main/java/core/startup/mealtoktok/domain/dishstore/DishRepository.java @@ -26,5 +26,5 @@ public interface DishRepository { void deleteDishCategory(DishCategory dishCategory); - List readAllCategories(); + List findAllCategories(); } diff --git a/domain/src/main/java/core/startup/mealtoktok/domain/dishstore/DishStore.java b/domain/src/main/java/core/startup/mealtoktok/domain/dishstore/DishStore.java index c481890..1b50047 100644 --- a/domain/src/main/java/core/startup/mealtoktok/domain/dishstore/DishStore.java +++ b/domain/src/main/java/core/startup/mealtoktok/domain/dishstore/DishStore.java @@ -3,15 +3,10 @@ import lombok.Builder; import lombok.Getter; -import core.startup.mealtoktok.domain.user.AddressWithCoordinate; - @Getter @Builder public class DishStore { private Long storeId; - private String storeName; - private String phoneNumber; - private AddressWithCoordinate addressWithCoordinate; - private OperatingHour operatingHour; + private DishStoreInfo dishStoreInfo; } diff --git a/domain/src/main/java/core/startup/mealtoktok/domain/dishstore/DishStoreAppender.java b/domain/src/main/java/core/startup/mealtoktok/domain/dishstore/DishStoreAppender.java new file mode 100644 index 0000000..22ce3bd --- /dev/null +++ b/domain/src/main/java/core/startup/mealtoktok/domain/dishstore/DishStoreAppender.java @@ -0,0 +1,18 @@ +package core.startup.mealtoktok.domain.dishstore; + +import org.springframework.stereotype.Component; + +import lombok.RequiredArgsConstructor; + +@Component +@RequiredArgsConstructor +public class DishStoreAppender { + + private final DishStoreValidator dishStoreValidator; + private final DishStoreRepository dishStoreRepository; + + public void append(DishStoreInfo dishStoreInfo) { + dishStoreValidator.validate(dishStoreInfo.storeName()); + dishStoreRepository.save(dishStoreInfo); + } +} diff --git a/domain/src/main/java/core/startup/mealtoktok/domain/dishstore/DishStoreInfo.java b/domain/src/main/java/core/startup/mealtoktok/domain/dishstore/DishStoreInfo.java new file mode 100644 index 0000000..6058771 --- /dev/null +++ b/domain/src/main/java/core/startup/mealtoktok/domain/dishstore/DishStoreInfo.java @@ -0,0 +1,35 @@ +package core.startup.mealtoktok.domain.dishstore; + +import java.time.LocalTime; + +import core.startup.mealtoktok.domain.user.Address; +import core.startup.mealtoktok.domain.user.AddressWithCoordinate; + +public record DishStoreInfo( + String storeName, + String phoneNumber, + AddressWithCoordinate addressWithCoordinate, + OperatingHour operatingHour) { + public static DishStoreInfo of( + String storeName, + String phoneNumber, + Address address, + Double latitude, + Double longitude, + LocalTime openTime, + LocalTime closeTime) { + return new DishStoreInfo( + storeName, + phoneNumber, + AddressWithCoordinate.of(address, latitude, longitude), + OperatingHour.of(openTime, closeTime)); + } + + public static DishStoreInfo of( + String storeName, + String phoneNumber, + AddressWithCoordinate addressWithCoordinate, + OperatingHour operatingHour) { + return new DishStoreInfo(storeName, phoneNumber, addressWithCoordinate, operatingHour); + } +} diff --git a/domain/src/main/java/core/startup/mealtoktok/domain/dishstore/DishStoreReader.java b/domain/src/main/java/core/startup/mealtoktok/domain/dishstore/DishStoreReader.java index 9fdc7b7..997e4b7 100644 --- a/domain/src/main/java/core/startup/mealtoktok/domain/dishstore/DishStoreReader.java +++ b/domain/src/main/java/core/startup/mealtoktok/domain/dishstore/DishStoreReader.java @@ -1,5 +1,7 @@ package core.startup.mealtoktok.domain.dishstore; +import java.util.List; + import org.springframework.stereotype.Component; import lombok.RequiredArgsConstructor; @@ -13,4 +15,8 @@ public class DishStoreReader { public DishStore read(TargetDishStore targetStore) { return dishStoreRepository.findById(targetStore); } + + public List readAll() { + return dishStoreRepository.findAll(); + } } diff --git a/domain/src/main/java/core/startup/mealtoktok/domain/dishstore/DishStoreRemover.java b/domain/src/main/java/core/startup/mealtoktok/domain/dishstore/DishStoreRemover.java new file mode 100644 index 0000000..5d1c947 --- /dev/null +++ b/domain/src/main/java/core/startup/mealtoktok/domain/dishstore/DishStoreRemover.java @@ -0,0 +1,16 @@ +package core.startup.mealtoktok.domain.dishstore; + +import org.springframework.stereotype.Component; + +import lombok.RequiredArgsConstructor; + +@Component +@RequiredArgsConstructor +public class DishStoreRemover { + + private final DishStoreRepository dishStoreRepository; + + public void remove(TargetDishStore targetDishStore) { + dishStoreRepository.delete(targetDishStore); + } +} diff --git a/domain/src/main/java/core/startup/mealtoktok/domain/dishstore/DishStoreRepository.java b/domain/src/main/java/core/startup/mealtoktok/domain/dishstore/DishStoreRepository.java index bbee63d..816d50d 100644 --- a/domain/src/main/java/core/startup/mealtoktok/domain/dishstore/DishStoreRepository.java +++ b/domain/src/main/java/core/startup/mealtoktok/domain/dishstore/DishStoreRepository.java @@ -1,6 +1,18 @@ package core.startup.mealtoktok.domain.dishstore; +import java.util.List; + public interface DishStoreRepository { DishStore findById(TargetDishStore targetStore); + + void save(DishStoreInfo dishStoreInfo); + + boolean existsByDishStoreName(String dishStoreName); + + void delete(TargetDishStore targetDishStore); + + void update(TargetDishStore targetDishStore, DishStoreInfo dishStoreInfo); + + List findAll(); } diff --git a/domain/src/main/java/core/startup/mealtoktok/domain/dishstore/DishStoreService.java b/domain/src/main/java/core/startup/mealtoktok/domain/dishstore/DishStoreService.java new file mode 100644 index 0000000..1879158 --- /dev/null +++ b/domain/src/main/java/core/startup/mealtoktok/domain/dishstore/DishStoreService.java @@ -0,0 +1,41 @@ +package core.startup.mealtoktok.domain.dishstore; + +import java.util.List; + +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import lombok.RequiredArgsConstructor; + +@Service +@RequiredArgsConstructor +@Transactional +public class DishStoreService { + + private final DishStoreAppender dishStoreAppender; + private final DishStoreRemover dishStoreRemover; + private final DishStoreReader dishStoreReader; + private final DishStoreUpdater dishStoreUpdater; + + public void createDishStore(DishStoreInfo dishStoreInfo) { + dishStoreAppender.append(dishStoreInfo); + } + + public void deleteDishStore(TargetDishStore targetDishStore) { + dishStoreReader.read(targetDishStore); + dishStoreRemover.remove(targetDishStore); + } + + public void updateDishStore(TargetDishStore targetDishStore, DishStoreInfo dishStoreInfo) { + dishStoreReader.read(targetDishStore); + dishStoreUpdater.update(targetDishStore, dishStoreInfo); + } + + public DishStore readDishStore(TargetDishStore targetDishStore) { + return dishStoreReader.read(targetDishStore); + } + + public List readDishStores() { + return dishStoreReader.readAll(); + } +} diff --git a/domain/src/main/java/core/startup/mealtoktok/domain/dishstore/DishStoreUpdater.java b/domain/src/main/java/core/startup/mealtoktok/domain/dishstore/DishStoreUpdater.java new file mode 100644 index 0000000..6984378 --- /dev/null +++ b/domain/src/main/java/core/startup/mealtoktok/domain/dishstore/DishStoreUpdater.java @@ -0,0 +1,18 @@ +package core.startup.mealtoktok.domain.dishstore; + +import org.springframework.stereotype.Component; + +import lombok.RequiredArgsConstructor; + +@Component +@RequiredArgsConstructor +public class DishStoreUpdater { + + private final DishStoreValidator dishStoreValidator; + private final DishStoreRepository dishStoreRepository; + + public void update(TargetDishStore targetDishStore, DishStoreInfo dishStoreInfo) { + dishStoreValidator.validate(dishStoreInfo.storeName()); + dishStoreRepository.update(targetDishStore, dishStoreInfo); + } +} diff --git a/domain/src/main/java/core/startup/mealtoktok/domain/dishstore/DishStoreValidator.java b/domain/src/main/java/core/startup/mealtoktok/domain/dishstore/DishStoreValidator.java new file mode 100644 index 0000000..5068404 --- /dev/null +++ b/domain/src/main/java/core/startup/mealtoktok/domain/dishstore/DishStoreValidator.java @@ -0,0 +1,20 @@ +package core.startup.mealtoktok.domain.dishstore; + +import org.springframework.stereotype.Component; + +import lombok.RequiredArgsConstructor; + +import core.startup.mealtoktok.domain.dishstore.exception.DishStoreNameAlreadyExitsException; + +@Component +@RequiredArgsConstructor +public class DishStoreValidator { + + private final DishStoreRepository dishStoreRepository; + + public void validate(String DishStoreName) { + if (dishStoreRepository.existsByDishStoreName(DishStoreName)) { + throw DishStoreNameAlreadyExitsException.EXCEPTION; + } + } +} diff --git a/domain/src/main/java/core/startup/mealtoktok/domain/dishstore/exception/DishStoreErrorCode.java b/domain/src/main/java/core/startup/mealtoktok/domain/dishstore/exception/DishStoreErrorCode.java index 025c243..71ffb65 100644 --- a/domain/src/main/java/core/startup/mealtoktok/domain/dishstore/exception/DishStoreErrorCode.java +++ b/domain/src/main/java/core/startup/mealtoktok/domain/dishstore/exception/DishStoreErrorCode.java @@ -13,7 +13,8 @@ public enum DishStoreErrorCode implements BaseErrorCode { DISH_NAME_ALREADY_EXISTS(CONFLICT, "DISH_409_1", "이미 존재하는 반찬 이름입니다."), DISH_STORE_NOT_FOUND(NOT_FOUND, "DISH_STORE_404_1", "반찬 가게의 정보를 찾지 못했습니다."), DISH_CATEGORY_NOT_FOUND(NOT_FOUND, "DISH_CATEGORY_404_1", "반찬 카테고리의 정보를 찾지 못했습니다."), - DISH_CATEGORY_NAME_ALREADY_EXISTS(CONFLICT, "DISH_STORE_409_1", "이미 존재하는 반찬 카테고리 이름입니다."); + DISH_CATEGORY_NAME_ALREADY_EXISTS(CONFLICT, "DISH_CATEGORY_409_1", "이미 존재하는 반찬 카테고리 이름입니다."), + DISH_STORE_NAME_ALREADY_EXISTS(CONFLICT, "DISH_STORE_409_1", "이미 존재하는 반찬 가게 이름입니다."); private final Integer status; private final String errorCode; diff --git a/domain/src/main/java/core/startup/mealtoktok/domain/dishstore/exception/DishStoreNameAlreadyExitsException.java b/domain/src/main/java/core/startup/mealtoktok/domain/dishstore/exception/DishStoreNameAlreadyExitsException.java new file mode 100644 index 0000000..320aacf --- /dev/null +++ b/domain/src/main/java/core/startup/mealtoktok/domain/dishstore/exception/DishStoreNameAlreadyExitsException.java @@ -0,0 +1,12 @@ +package core.startup.mealtoktok.domain.dishstore.exception; + +import core.startup.mealtoktok.common.exception.DomainException; + +public class DishStoreNameAlreadyExitsException extends DomainException { + + public static DomainException EXCEPTION = new DishStoreNameAlreadyExitsException(); + + private DishStoreNameAlreadyExitsException() { + super(DishStoreErrorCode.DISH_STORE_NAME_ALREADY_EXISTS); + } +} diff --git a/infra/src/main/java/core/startup/mealtoktok/infra/dishstore/entity/DishStoreEntity.java b/infra/src/main/java/core/startup/mealtoktok/infra/dishstore/entity/DishStoreEntity.java index 424412d..5a100e2 100644 --- a/infra/src/main/java/core/startup/mealtoktok/infra/dishstore/entity/DishStoreEntity.java +++ b/infra/src/main/java/core/startup/mealtoktok/infra/dishstore/entity/DishStoreEntity.java @@ -16,6 +16,7 @@ import lombok.*; import core.startup.mealtoktok.domain.dishstore.DishStore; +import core.startup.mealtoktok.domain.dishstore.DishStoreInfo; import core.startup.mealtoktok.domain.dishstore.OperatingHour; import core.startup.mealtoktok.domain.user.AddressWithCoordinate; import core.startup.mealtoktok.domain.user.Coordinate; @@ -47,25 +48,34 @@ public class DishStoreEntity { public DishStore toDomain() { return DishStore.builder() .storeId(storeId) - .storeName(storeName) - .phoneNumber(phoneNumber) - .addressWithCoordinate( - AddressWithCoordinate.of( - address.toDomain(), - Coordinate.of(coordinate.getX(), coordinate.getY()))) - .operatingHour(OperatingHour.of(openTime, closeTime)) + .dishStoreInfo( + DishStoreInfo.of( + storeName, + phoneNumber, + AddressWithCoordinate.of( + address.toDomain(), + Coordinate.of(coordinate.getX(), coordinate.getY())), + OperatingHour.of(openTime, closeTime))) .build(); } - public static DishStoreEntity from(DishStore dishStore) { + public static DishStoreEntity from(DishStoreInfo dishStoreInfo) { return DishStoreEntity.builder() - .storeId(dishStore.getStoreId()) - .storeName(dishStore.getStoreName()) - .phoneNumber(dishStore.getPhoneNumber()) - .coordinate(convertToPoint(dishStore.getAddressWithCoordinate().coordinate())) - .address(AddressVO.from(dishStore.getAddressWithCoordinate().address())) - .openTime(dishStore.getOperatingHour().openTime()) - .closeTime(dishStore.getOperatingHour().closeTime()) + .storeName(dishStoreInfo.storeName()) + .phoneNumber(dishStoreInfo.phoneNumber()) + .coordinate(convertToPoint(dishStoreInfo.addressWithCoordinate().coordinate())) + .address(AddressVO.from(dishStoreInfo.addressWithCoordinate().address())) + .openTime(dishStoreInfo.operatingHour().openTime()) + .closeTime(dishStoreInfo.operatingHour().closeTime()) .build(); } + + public void update(DishStoreInfo dishStoreInfo) { + this.storeName = dishStoreInfo.storeName(); + this.phoneNumber = dishStoreInfo.phoneNumber(); + this.coordinate = convertToPoint(dishStoreInfo.addressWithCoordinate().coordinate()); + this.address = AddressVO.from(dishStoreInfo.addressWithCoordinate().address()); + this.openTime = dishStoreInfo.operatingHour().openTime(); + this.closeTime = dishStoreInfo.operatingHour().closeTime(); + } } diff --git a/infra/src/main/java/core/startup/mealtoktok/infra/dishstore/repository/CoreJpaDishRepository.java b/infra/src/main/java/core/startup/mealtoktok/infra/dishstore/repository/CoreJpaDishRepository.java index 1728c51..27fc091 100644 --- a/infra/src/main/java/core/startup/mealtoktok/infra/dishstore/repository/CoreJpaDishRepository.java +++ b/infra/src/main/java/core/startup/mealtoktok/infra/dishstore/repository/CoreJpaDishRepository.java @@ -102,7 +102,7 @@ public void deleteDishCategory(DishCategory dishCategory) { } @Override - public List readAllCategories() { + public List findAllCategories() { return jpaDishCategoryRepository.findAll().stream() .map(DishCategoryEntity::toDomain) .toList(); diff --git a/infra/src/main/java/core/startup/mealtoktok/infra/dishstore/repository/CoreJpaDishStoreRepository.java b/infra/src/main/java/core/startup/mealtoktok/infra/dishstore/repository/CoreJpaDishStoreRepository.java index 8ff0b2d..a4635d6 100644 --- a/infra/src/main/java/core/startup/mealtoktok/infra/dishstore/repository/CoreJpaDishStoreRepository.java +++ b/infra/src/main/java/core/startup/mealtoktok/infra/dishstore/repository/CoreJpaDishStoreRepository.java @@ -1,11 +1,14 @@ package core.startup.mealtoktok.infra.dishstore.repository; +import java.util.List; + import org.springframework.stereotype.Repository; import org.springframework.transaction.annotation.Transactional; import lombok.RequiredArgsConstructor; import core.startup.mealtoktok.domain.dishstore.DishStore; +import core.startup.mealtoktok.domain.dishstore.DishStoreInfo; import core.startup.mealtoktok.domain.dishstore.DishStoreRepository; import core.startup.mealtoktok.domain.dishstore.TargetDishStore; import core.startup.mealtoktok.infra.dishstore.entity.DishStoreEntity; @@ -25,4 +28,33 @@ public DishStore findById(TargetDishStore targetStore) { .map(DishStoreEntity::toDomain) .orElseThrow(() -> DishStoreNotFoundException.EXCEPTION); } + + @Override + public void save(DishStoreInfo dishStoreInfo) { + jpaDishStoreRepository.save(DishStoreEntity.from(dishStoreInfo)); + } + + @Override + public boolean existsByDishStoreName(String dishStoreName) { + return jpaDishStoreRepository.existsByStoreName(dishStoreName); + } + + @Override + public void delete(TargetDishStore targetDishStore) { + DishStoreEntity dishStoreEntity = + jpaDishStoreRepository.getReferenceById(targetDishStore.storeId()); + jpaDishStoreRepository.delete(dishStoreEntity); + } + + @Override + public void update(TargetDishStore targetDishStore, DishStoreInfo dishStoreInfo) { + DishStoreEntity dishStoreEntity = + jpaDishStoreRepository.getReferenceById(targetDishStore.storeId()); + dishStoreEntity.update(dishStoreInfo); + } + + @Override + public List findAll() { + return jpaDishStoreRepository.findAll().stream().map(DishStoreEntity::toDomain).toList(); + } } diff --git a/infra/src/main/java/core/startup/mealtoktok/infra/dishstore/repository/JpaDishStoreRepository.java b/infra/src/main/java/core/startup/mealtoktok/infra/dishstore/repository/JpaDishStoreRepository.java index ac46b72..2e3176e 100644 --- a/infra/src/main/java/core/startup/mealtoktok/infra/dishstore/repository/JpaDishStoreRepository.java +++ b/infra/src/main/java/core/startup/mealtoktok/infra/dishstore/repository/JpaDishStoreRepository.java @@ -4,4 +4,7 @@ import core.startup.mealtoktok.infra.dishstore.entity.DishStoreEntity; -public interface JpaDishStoreRepository extends JpaRepository {} +public interface JpaDishStoreRepository extends JpaRepository { + + boolean existsByStoreName(String dishStoreName); +}