diff --git a/src/services/menu.js b/src/services/menu.js index 1ecb3e7..294451a 100644 --- a/src/services/menu.js +++ b/src/services/menu.js @@ -1,5 +1,5 @@ -//* src/services/menu.js - 백엔드 수정 없이 프론트엔드만 수정 -import { menuApi, apiWithImage, handleApiError, formatSuccessResponse } from './api.js' +//* src/services/menu.js - apiWithImage 제거하고 menuApi로 통일 +import { menuApi, handleApiError, formatSuccessResponse } from './api.js' /** * 메뉴 관련 API 서비스 @@ -48,7 +48,7 @@ class MenuService { } /** - * 메뉴 등록 (createMenu) + * 메뉴 등록 * @param {Object} menuData - 메뉴 정보 * @returns {Promise} 등록 결과 */ @@ -79,95 +79,9 @@ class MenuService { } } catch (error) { console.error('메뉴 등록 실패:', error) - return handleApiError(error) - } - } - - /** - * 메뉴 등록 (registerMenu 별칭) - * @param {Object} menuData - 메뉴 정보 - * @returns {Promise} 등록 결과 - */ - async registerMenu(menuData) { - return await this.createMenu(menuData) - } - - /** - * 메뉴 수정 - * @param {number} menuId - 메뉴 ID - * @param {Object} menuData - 수정할 메뉴 정보 - * @returns {Promise} 수정 결과 - */ -async updateMenu(menuId, menuData) { - try { - console.log('=== 메뉴 수정 API 호출 ===') - console.log('메뉴 ID:', menuId, '타입:', typeof menuId) - console.log('원본 수정 데이터:', menuData) - - if (!menuId || menuId === 'undefined') { - throw new Error('올바른 메뉴 ID가 필요합니다') - } - - const numericMenuId = parseInt(menuId) - if (isNaN(numericMenuId)) { - throw new Error('메뉴 ID는 숫자여야 합니다') - } - - // 데이터 검증 및 정리 - const menuName = menuData.menuName || menuData.name - const category = menuData.category - const price = menuData.price - const description = menuData.description || '' - - // 필수 필드 검증 - if (!menuName || !category || price === undefined || price === null) { - console.error('필수 필드 누락:', { menuName, category, price, description }) - throw new Error('메뉴명, 카테고리, 가격은 필수 입력 사항입니다') - } - - // 가격 검증 (숫자이고 0 이상) - const numericPrice = parseInt(price) - if (isNaN(numericPrice) || numericPrice < 0) { - throw new Error('올바른 가격을 입력해주세요') - } - - // 백엔드 MenuUpdateRequest DTO에 맞는 데이터 구조 - const requestData = { - menuName: menuName.trim(), - category: category.trim(), - price: numericPrice, - description: description.trim() - } - - console.log('검증된 백엔드 전송 데이터:', requestData) - console.log('✅ 검증된 메뉴 ID:', numericMenuId) - - // PUT /api/menu/{menuId} - const response = await menuApi.put(`/${numericMenuId}`, requestData) - - console.log('메뉴 수정 API 응답:', response.data) - - if (response.data && response.data.status === 200) { - return formatSuccessResponse(response.data.data, '메뉴가 성공적으로 수정되었습니다.') - } else { - throw new Error(response.data.message || '메뉴 수정에 실패했습니다.') - } - } catch (error) { - console.error('메뉴 수정 실패:', error) - - // HTTP 응답 에러 상세 디버깅 - if (error.response) { - console.error('=== HTTP 응답 에러 상세 ===') - console.error('상태 코드:', error.response.status) - console.error('상태 텍스트:', error.response.statusText) - console.error('응답 데이터:', error.response.data) - console.error('요청 URL:', error.config?.url) - console.error('요청 메서드:', error.config?.method) - console.error('요청 데이터:', error.config?.data) - // 400 에러 (잘못된 요청) 처리 - if (error.response.status === 400) { - const errorMessage = error.response.data?.message || '입력 데이터가 올바르지 않습니다.' + if (error.response?.status === 400) { + const errorMessage = error.response.data?.message || 'validation 에러가 발생했습니다.' console.error('백엔드 validation 에러:', errorMessage) return { @@ -177,8 +91,7 @@ async updateMenu(menuId, menuData) { } } - // 500 오류 처리 - if (error.response.status === 500) { + if (error.response?.status === 500) { const errorMessage = error.response.data?.message || '서버 내부 오류가 발생했습니다.' console.error('백엔드 에러 메시지:', errorMessage) @@ -188,15 +101,58 @@ async updateMenu(menuId, menuData) { error: error.response.data } } + + return handleApiError(error) } - - return handleApiError(error) } -} - /** - * 메뉴 이미지 업로드 + * 메뉴 수정 + * @param {number} menuId - 메뉴 ID + * @param {Object} menuData - 수정할 메뉴 정보 + * @returns {Promise} 수정 결과 + */ + async updateMenu(menuId, menuData) { + try { + console.log('=== 메뉴 수정 API 호출 ===') + console.log('메뉴 ID:', menuId, '수정 데이터:', menuData) + + if (!menuId || menuId === 'undefined') { + throw new Error('올바른 메뉴 ID가 필요합니다') + } + + const numericMenuId = parseInt(menuId) + if (isNaN(numericMenuId)) { + throw new Error('메뉴 ID는 숫자여야 합니다') + } + + const requestData = { + menuName: menuData.menuName || menuData.name, + category: menuData.category, + price: parseInt(menuData.price) || 0, + description: menuData.description || '' + } + + console.log('백엔드 전송 데이터:', requestData) + + // PUT /api/menu/{menuId} + const response = await menuApi.put(`/${numericMenuId}`, requestData) + + console.log('메뉴 수정 API 응답:', response.data) + + if (response.data && response.data.status === 200) { + return formatSuccessResponse(response.data.data, '메뉴가 성공적으로 수정되었습니다.') + } else { + throw new Error(response.data.message || '메뉴 수정에 실패했습니다.') + } + } catch (error) { + console.error('메뉴 수정 실패:', error) + return handleApiError(error) + } + } + + /** + * 메뉴 이미지 업로드 (menuApi 사용) * @param {number} menuId - 메뉴 ID * @param {File} file - 이미지 파일 * @returns {Promise} 업로드 결과 @@ -225,8 +181,8 @@ async updateMenu(menuId, menuData) { console.log('이미지 업로드 요청 - 메뉴 ID:', numericMenuId) - // POST /api/images/menu/{menuId} - const response = await apiWithImage.post(`/images/menu/${numericMenuId}`, formData, { + // POST /api/menu/images/{menuId} (menuApi 사용) + const response = await menuApi.post(`/images/${numericMenuId}`, formData, { headers: { 'Content-Type': 'multipart/form-data' } @@ -288,222 +244,4 @@ export default menuService // 디버깅을 위한 전역 노출 (개발 환경에서만) if (process.env.NODE_ENV === 'development') { window.menuService = menuService -} - -//* src/views/StoreManagementView.vue의 수정된 스크립트 부분 -//