fix store

This commit is contained in:
박서은 2025-06-13 10:27:22 +09:00
parent 4f87b5f726
commit 2893c4daf3
9 changed files with 107 additions and 44 deletions

View File

@ -43,15 +43,15 @@ public class MenuController {
/** /**
* 메뉴 목록 조회 * 메뉴 목록 조회
* *
* @param category 메뉴 카테고리 (선택사항) * @param storeId 메뉴 카테고리
* @return 메뉴 목록 * @return 메뉴 목록
*/ */
@Operation(summary = "메뉴 목록 조회", description = "메뉴 목록을 조회합니다. 카테고리별 필터링 가능합니다.") @Operation(summary = "메뉴 목록 조회", description = "메뉴 목록을 조회합니다. 카테고리별 필터링 가능합니다.")
@GetMapping @GetMapping
public ResponseEntity<ApiResponse<List<MenuResponse>>> getMenus( public ResponseEntity<ApiResponse<List<MenuResponse>>> getMenus(
@Parameter(description = "메뉴 카테고리") @Parameter(description = "가게 ID")
@RequestParam(required = false) String category) { @RequestParam(required = true) Long storeId) {
List<MenuResponse> response = menuService.getMenus(category); List<MenuResponse> response = menuService.getMenus(storeId);
return ResponseEntity.ok(ApiResponse.success(response)); return ResponseEntity.ok(ApiResponse.success(response));
} }

View File

@ -2,6 +2,7 @@ package com.won.smarketing.store.controller;
import com.won.smarketing.common.dto.ApiResponse; import com.won.smarketing.common.dto.ApiResponse;
import com.won.smarketing.store.dto.StoreCreateRequest; import com.won.smarketing.store.dto.StoreCreateRequest;
import com.won.smarketing.store.dto.StoreCreateResponse;
import com.won.smarketing.store.dto.StoreResponse; import com.won.smarketing.store.dto.StoreResponse;
import com.won.smarketing.store.dto.StoreUpdateRequest; import com.won.smarketing.store.dto.StoreUpdateRequest;
import com.won.smarketing.store.service.StoreService; import com.won.smarketing.store.service.StoreService;
@ -34,8 +35,8 @@ public class StoreController {
*/ */
@Operation(summary = "매장 등록", description = "새로운 매장 정보를 등록합니다.") @Operation(summary = "매장 등록", description = "새로운 매장 정보를 등록합니다.")
@PostMapping("/register") @PostMapping("/register")
public ResponseEntity<ApiResponse<StoreResponse>> register(@Valid @RequestBody StoreCreateRequest request) { public ResponseEntity<ApiResponse<StoreCreateResponse>> register(@Valid @RequestBody StoreCreateRequest request) {
StoreResponse response = storeService.register(request); StoreCreateResponse response = storeService.register(request);
return ResponseEntity.ok(ApiResponse.success(response, "매장이 성공적으로 등록되었습니다.")); return ResponseEntity.ok(ApiResponse.success(response, "매장이 성공적으로 등록되었습니다."));
} }

View File

@ -0,0 +1,56 @@
package com.won.smarketing.store.dto;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* 매장 응답 DTO
* 매장 정보를 클라이언트에게 전달합니다.
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
@Schema(description = "매장 응답")
public class StoreCreateResponse {
@Schema(description = "매장 ID", example = "1")
private Long storeId;
// @Schema(description = "매장명", example = "맛있는 카페")
// private String storeName;
//
// @Schema(description = "업종", example = "카페")
// private String businessType;
//
// @Schema(description = "주소", example = "서울시 강남구 테헤란로 123")
// private String address;
//
// @Schema(description = "전화번호", example = "02-1234-5678")
// private String phoneNumber;
//
// @Schema(description = "영업시간", example = "09:00 - 22:00")
// private String businessHours;
//
// @Schema(description = "휴무일", example = "매주 일요일")
// private String closedDays;
//
// @Schema(description = "좌석 수", example = "20")
// private Integer seatCount;
//
// @Schema(description = "SNS 계정 정보", example = "인스타그램: @mystore")
// private String snsAccounts;
//
// @Schema(description = "매장 설명", example = "따뜻한 분위기의 동네 카페입니다.")
// private String description;
//
// @Schema(description = "등록일시", example = "2024-01-15T10:30:00")
// private LocalDateTime createdAt;
//
// @Schema(description = "수정일시", example = "2024-01-15T10:30:00")
// private LocalDateTime updatedAt;
}

View File

@ -24,34 +24,34 @@ public class StoreResponse {
@Schema(description = "매장명", example = "맛있는 카페") @Schema(description = "매장명", example = "맛있는 카페")
private String storeName; private String storeName;
@Schema(description = "업종", example = "카페") @Schema(description = "업종", example = "카페")
private String businessType; private String businessType;
@Schema(description = "주소", example = "서울시 강남구 테헤란로 123") @Schema(description = "주소", example = "서울시 강남구 테헤란로 123")
private String address; private String address;
@Schema(description = "전화번호", example = "02-1234-5678") @Schema(description = "전화번호", example = "02-1234-5678")
private String phoneNumber; private String phoneNumber;
@Schema(description = "영업시간", example = "09:00 - 22:00") @Schema(description = "영업시간", example = "09:00 - 22:00")
private String businessHours; private String businessHours;
@Schema(description = "휴무일", example = "매주 일요일") @Schema(description = "휴무일", example = "매주 일요일")
private String closedDays; private String closedDays;
@Schema(description = "좌석 수", example = "20") @Schema(description = "좌석 수", example = "20")
private Integer seatCount; private Integer seatCount;
@Schema(description = "SNS 계정 정보", example = "인스타그램: @mystore") @Schema(description = "SNS 계정 정보", example = "인스타그램: @mystore")
private String snsAccounts; private String snsAccounts;
@Schema(description = "매장 설명", example = "따뜻한 분위기의 동네 카페입니다.") @Schema(description = "매장 설명", example = "따뜻한 분위기의 동네 카페입니다.")
private String description; private String description;
@Schema(description = "등록일시", example = "2024-01-15T10:30:00") @Schema(description = "등록일시", example = "2024-01-15T10:30:00")
private LocalDateTime createdAt; private LocalDateTime createdAt;
@Schema(description = "수정일시", example = "2024-01-15T10:30:00") @Schema(description = "수정일시", example = "2024-01-15T10:30:00")
private LocalDateTime updatedAt; private LocalDateTime updatedAt;
} }

View File

@ -14,21 +14,12 @@ import java.util.Optional;
*/ */
@Repository @Repository
public interface MenuRepository extends JpaRepository<Menu, Long> { public interface MenuRepository extends JpaRepository<Menu, Long> {
// /**
/** // * 전체 메뉴 조회 (메뉴명 오름차순)
* 카테고리별 메뉴 조회 (메뉴명 오름차순) // *
* // * @return 메뉴 목록
* @param category 메뉴 카테고리 // */
* @return 메뉴 목록 // List<Menu> findAllByOrderByMenuNameAsc(Long );
*/
List<Menu> findByCategoryOrderByMenuNameAsc(String category);
/**
* 전체 메뉴 조회 (메뉴명 오름차순)
*
* @return 메뉴 목록
*/
List<Menu> findAllByOrderByMenuNameAsc();
/** /**
* 매장별 메뉴 조회 * 매장별 메뉴 조회

View File

@ -23,10 +23,10 @@ public interface MenuService {
/** /**
* 메뉴 목록 조회 * 메뉴 목록 조회
* *
* @param category 메뉴 카테고리 (선택사항) * @param storeId 가게 ID
* @return 메뉴 목록 * @return 메뉴 목록
*/ */
List<MenuResponse> getMenus(String category); List<MenuResponse> getMenus(Long storeId);
/** /**
* 메뉴 정보 수정 * 메뉴 정보 수정

View File

@ -51,18 +51,14 @@ public class MenuServiceImpl implements MenuService {
/** /**
* 메뉴 목록 조회 * 메뉴 목록 조회
* *
* @param category 메뉴 카테고리 (선택사항) * @param storeId 가게 ID
* @return 메뉴 목록 * @return 메뉴 목록
*/ */
@Override @Override
public List<MenuResponse> getMenus(String category) { public List<MenuResponse> getMenus(Long storeId) {
List<Menu> menus; List<Menu> menus;
if (category != null && !category.trim().isEmpty()) { menus = menuRepository.findByStoreId(storeId);
menus = menuRepository.findByCategoryOrderByMenuNameAsc(category);
} else {
menus = menuRepository.findAllByOrderByMenuNameAsc();
}
return menus.stream() return menus.stream()
.map(this::toMenuResponse) .map(this::toMenuResponse)

View File

@ -1,6 +1,7 @@
package com.won.smarketing.store.service; package com.won.smarketing.store.service;
import com.won.smarketing.store.dto.StoreCreateRequest; import com.won.smarketing.store.dto.StoreCreateRequest;
import com.won.smarketing.store.dto.StoreCreateResponse;
import com.won.smarketing.store.dto.StoreResponse; import com.won.smarketing.store.dto.StoreResponse;
import com.won.smarketing.store.dto.StoreUpdateRequest; import com.won.smarketing.store.dto.StoreUpdateRequest;
@ -16,7 +17,7 @@ public interface StoreService {
* @param request 매장 등록 요청 정보 * @param request 매장 등록 요청 정보
* @return 등록된 매장 정보 * @return 등록된 매장 정보
*/ */
StoreResponse register(StoreCreateRequest request); StoreCreateResponse register(StoreCreateRequest request);
/** /**
* 매장 정보 조회 (현재 로그인 사용자) * 매장 정보 조회 (현재 로그인 사용자)

View File

@ -3,6 +3,7 @@ package com.won.smarketing.store.service;
import com.won.smarketing.common.exception.BusinessException; import com.won.smarketing.common.exception.BusinessException;
import com.won.smarketing.common.exception.ErrorCode; import com.won.smarketing.common.exception.ErrorCode;
import com.won.smarketing.store.dto.StoreCreateRequest; import com.won.smarketing.store.dto.StoreCreateRequest;
import com.won.smarketing.store.dto.StoreCreateResponse;
import com.won.smarketing.store.dto.StoreResponse; import com.won.smarketing.store.dto.StoreResponse;
import com.won.smarketing.store.dto.StoreUpdateRequest; import com.won.smarketing.store.dto.StoreUpdateRequest;
import com.won.smarketing.store.entity.Store; import com.won.smarketing.store.entity.Store;
@ -35,7 +36,7 @@ public class StoreServiceImpl implements StoreService {
*/ */
@Override @Override
@Transactional @Transactional
public StoreResponse register(StoreCreateRequest request) { public StoreCreateResponse register(StoreCreateRequest request) {
String memberId = getCurrentUserId(); String memberId = getCurrentUserId();
// Long memberId = Long.valueOf(currentUserId); // 실제로는 Member ID 조회 필요 // Long memberId = Long.valueOf(currentUserId); // 실제로는 Member ID 조회 필요
@ -63,7 +64,7 @@ public class StoreServiceImpl implements StoreService {
Store savedStore = storeRepository.save(store); Store savedStore = storeRepository.save(store);
log.info("매장 등록 완료: {} (ID: {})", savedStore.getStoreName(), savedStore.getId()); log.info("매장 등록 완료: {} (ID: {})", savedStore.getStoreName(), savedStore.getId());
return toStoreResponse(savedStore); return toStoreCreateResponse(savedStore);
} }
/** /**
@ -158,6 +159,23 @@ public class StoreServiceImpl implements StoreService {
.build(); .build();
} }
private StoreCreateResponse toStoreCreateResponse(Store store) {
return StoreCreateResponse.builder()
.storeId(store.getId())
// .storeName(store.getStoreName())
// .businessType(store.getBusinessType())
// .address(store.getAddress())
// .phoneNumber(store.getPhoneNumber())
// .businessHours(store.getBusinessHours())
// .closedDays(store.getClosedDays())
// .seatCount(store.getSeatCount())
// .snsAccounts(store.getSnsAccounts())
// .description(store.getDescription())
// .createdAt(store.getCreatedAt())
// .updatedAt(store.getUpdatedAt())
.build();
}
/** /**
* 현재 로그인된 사용자 ID 조회 * 현재 로그인된 사용자 ID 조회
* *