{ "$schema": "https://json-schema.org/draft/2020-12/schema", "moduleId": "sirsoft-ecommerce", "version": "1.0.0", "description": "레이아웃 편집기 스펙 — 이커머스 모듈 도메인 sampleData/sampleGlobal/states. admin 레이아웃 data_source ID 전수 스캔 기반 도메인 ID 28종(상품·주문·브랜드·쿠폰·배송정책·정산·설정 등) byDataSourceId + 사용자 페이지(템플릿 렌더) byEndpointPattern. 공용 인프라(roles/availableChannels/identityProviders/ecommerceIdentity*/ecommerceNotificationDefinitions)는 admin 템플릿 스펙·코어 프리셋 폴백이 커버.", "actionRecipes": { "comment": "이커머스 모듈 소유 친화 액션 레시피. 코어 시드 위에 module 단계로 병합(__source:{kind:module,id:sirsoft-ecommerce}, 편집기 〔이커머스〕 배지). 라벨은 모듈 격리 네임스페이스($t:sirsoft-ecommerce.editor.action.*) — 편집기 t()가 모듈 lang 통짜 ko.json/en.json 의 editor.action 을 sirsoft-ecommerce.editor.action 으로 해석한다(코어/템플릿 editor 와 격리). 결제(PG) 진입은 커머스 도메인이라 코어가 아닌 모듈이 소유한다(provider-agnostic — 핸들러명을 백엔드 응답값으로 받음).", "requestPgPayment": { "comment": "결제(PG) 진입 — provider-agnostic. 백엔드 응답이 호출할 결제 진입 핸들러 풀네임(pg_payment_handler)을 데이터 칩으로 연결하면 그 핸들러를 dispatch(특정 PG 하드코딩 없음). build.handler 가 {{paymentHandler}} placeholder 라 matchAction 이 placeholder-aware 로 역매칭한다. onSuccess 컨텍스트(chipContext=response)에서 결제 응답 칩 노출.", "label": "$t:sirsoft-ecommerce.editor.action.request_pg_payment.label", "params": [ { "key": "paymentHandler", "label": "$t:sirsoft-ecommerce.editor.action.request_pg_payment.param_handler", "widget": "data-chip", "required": true }, { "key": "pgPaymentData", "label": "$t:sirsoft-ecommerce.editor.action.request_pg_payment.param_data", "widget": "data-chip", "required": true } ], "build": { "handler": "{{paymentHandler}}", "params": { "pgPaymentData": "{{pgPaymentData}}" } } } }, "actionChipCandidates": { "comment": "이커머스 도메인 응답 칩 후보 — 코어 기본 응답 칩(response.data/message) 뒤에 병합. 주문 생성 응답이 내려주는 PG 결제 진입 필드(pg_payment_handler/pg_payment_data)를 결제 진입 레시피의 데이터 칩으로 연결할 수 있게 노출한다. 코어는 PG 도메인을 모르고, 본 모듈이 자기 응답 필드를 선언한다(라벨은 모듈 격리 네임스페이스).", "response": [ { "path": "data.pg_payment_handler", "labelKey": "sirsoft-ecommerce.editor.action_chip.response_pg_handler", "shape": "scalar" }, { "path": "data.pg_payment_data", "labelKey": "sirsoft-ecommerce.editor.action_chip.response_pg_data", "shape": "object" } ] }, "sampleGlobal": { "comment": "이커머스 도메인 _global keyspace. 코어 keyspace(currentUser/settings)는 시드하지 않음(충돌 시 코어 우선). 헤더 통화/배송국가 셀렉터(header_currency 슬롯 주입)는 실사이트에서 init_actions 가 채우는 파생 상태(availableCurrencies/availableShippingCountries)와 modules['sirsoft-ecommerce'] 설정을 표시 조건으로 읽는다. 편집기 캔버스는 init_actions 를 실행하지 않으므로 이 키들을 직접 시드해 편집기에서도 셀렉터가 보이게 한다(양 템플릿 공용 — 헤더는 모듈 무지 유지).", "cart": { "items": [], "count": 0, "total": 0 }, "wishlist": { "items": [], "count": 0 }, "recent_products": [], "modules": { "sirsoft-ecommerce": { "comment": "헤더 통화/배송국가 셀렉터 표시 조건 소스. 실사이트 G7Config(window.__G7_MODULE_CONFIG) 미러 — 편집기 캔버스 전용 시드.", "language_currency": { "default_currency": "KRW", "currencies": [ { "code": "KRW", "symbol": "₩", "flag": "🇰🇷", "exchange_rate": 1, "is_default": true }, { "code": "USD", "symbol": "$", "flag": "🇺🇸", "exchange_rate": 0.00073, "is_default": false }, { "code": "JPY", "symbol": "¥", "flag": "🇯🇵", "exchange_rate": 0.11, "is_default": false } ] }, "shipping": { "international_shipping_enabled": true, "default_country": "KR", "available_countries": [ { "code": "KR", "name": { "ko": "대한민국", "en": "South Korea", "ja": "韓国" }, "is_active": true }, { "code": "US", "name": { "ko": "미국", "en": "United States", "ja": "アメリカ" }, "is_active": true }, { "code": "JP", "name": { "ko": "일본", "en": "Japan", "ja": "日本" }, "is_active": true } ] } } }, "defaultCurrency": "KRW", "preferredCurrency": "KRW", "preferredShippingCountry": "KR", "availableCurrencies": [ { "code": "KRW", "symbol": "₩", "flag": "🇰🇷", "exchange_rate": 1, "is_default": true }, { "code": "USD", "symbol": "$", "flag": "🇺🇸", "exchange_rate": 0.00073, "is_default": false }, { "code": "JPY", "symbol": "¥", "flag": "🇯🇵", "exchange_rate": 0.11, "is_default": false } ], "availableShippingCountries": [ { "code": "KR", "name": "대한민국" }, { "code": "US", "name": "미국" }, { "code": "JP", "name": "일본" } ], "mileageManual": {}, "mileageEdit": {}, "mileageExtend": {} }, "sampleData": { "comment": "실제 모듈 레이아웃 data_source ID(admin: products/categories/orders/order/reviews 등) + 사용자 페이지(템플릿이 렌더, /api/modules/sirsoft-ecommerce/* 호출) byEndpointPattern. 계획서 추정과 실제 ID 차이 반영(데이터소스가 SSoT).", "byDataSourceId": { "transactions": { "comment": "관리자 마일리지 내역 (admin_ecommerce_mileage_transaction_index.json — {{transactions?.data?.data}} 반복).", "data": { "data": [ { "row_number": 1, "id": 100, "user_id": 5, "currency": "KRW", "type": "admin_earn", "type_label": "관리자 지급", "admin_badge_group": "earn", "user_display_category": "적립", "amount": 10000, "amount_formatted": "10,000", "remaining_amount": 10000, "balance_after": 50000, "description": "신규 가입 보너스", "memo": "환영 포인트", "expires_at": "2027-06-03", "expires_at_formatted": "2027-06-03", "created_at": "2026-05-28T14:30:00Z", "created_at_date": "2026-05-28", "is_earning": true, "expired_amount": 0, "expiry_state": "active", "can_edit_expiry": true, "abilities": { "can_manage": true, "can_edit": true } }, { "row_number": 2, "id": 99, "user_id": 5, "currency": "KRW", "type": "purchase_use", "type_label": "구매 사용", "admin_badge_group": "use", "user_display_category": "사용", "amount": -3000, "amount_formatted": "-3,000", "remaining_amount": 0, "balance_after": 47000, "description": "주문 결제 사용", "memo": null, "expires_at": null, "expires_at_formatted": null, "created_at": "2026-05-29T09:10:00Z", "created_at_date": "2026-05-29", "is_earning": false, "expired_amount": 0, "expiry_state": "none", "can_edit_expiry": false, "abilities": { "can_manage": true, "can_edit": false } } ], "pagination": { "current_page": 1, "last_page": 1, "per_page": 20, "total": 2, "from": 1, "to": 2, "has_more_pages": false }, "abilities": { "can_manage": true }, "currencies": ["KRW"] } }, "products": { "data": { "abilities": { "can_create": true, "can_update": true }, "data": [ { "id": 101, "name": { "ko": "베이직 오버핏 코튼 티셔츠" }, "name_localized": "베이직 오버핏 코튼 티셔츠", "product_code": "TS-1001", "sku": "TS-1001", "thumbnail_url": "/images/placeholder.png", "list_price": 29000, "list_price_formatted": "29,000원", "selling_price": 23200, "selling_price_formatted": "23,200원", "discount_rate": 20, "multi_currency_list_price": { "KRW": { "price": 29000, "formatted": "29,000원", "is_default": true, "editable": true }, "USD": { "price": 22.31, "formatted": "$22.31", "is_default": false, "editable": false, "exchange_rate": 1300 } }, "multi_currency_selling_price": { "KRW": { "price": 23200, "formatted": "23,200원", "is_default": true, "editable": true }, "USD": { "price": 17.85, "formatted": "$17.85", "is_default": false, "editable": false, "exchange_rate": 1300 } }, "stock_quantity": 320, "safe_stock_quantity": 10, "is_below_safe_stock": false, "option_stock_sum": 320, "sales_status": "on_sale", "sales_status_label": "판매중", "sales_status_variant": "success", "display_status": "visible", "display_status_label": "노출", "display_status_variant": "success", "categories": [ { "id": 11, "name": "상의", "is_primary": true } ], "primary_category": "상의", "categories_with_path": [ { "id": 11, "path": [ { "id": 1, "name": "패션의류" }, { "id": 11, "name": "상의" } ], "path_string": "패션의류 > 상의", "is_primary": true } ], "brand_name": "코지홈", "shipping_policy_id": 1, "shipping_policy_name": "기본 배송정책", "min_purchase_qty": 1, "max_purchase_qty": 0, "has_options": true, "options_count": 6, "options": [], "labels": [ { "name": "BEST", "color": "#ef4444" } ], "review_count": 128, "rating_avg": 4.7, "created_at": "2026-05-20 14:30:00", "updated_at": "2026-05-28 09:15:00", "is_owner": false, "abilities": { "can_update": true, "can_delete": true } }, { "id": 102, "name": { "ko": "데일리 와이드 슬랙스" }, "name_localized": "데일리 와이드 슬랙스", "product_code": "PT-2042", "sku": "PT-2042", "thumbnail_url": "/images/placeholder.png", "list_price": 39000, "list_price_formatted": "39,000원", "selling_price": 39000, "selling_price_formatted": "39,000원", "discount_rate": 0, "multi_currency_list_price": { "KRW": { "price": 39000, "formatted": "39,000원", "is_default": true, "editable": true }, "USD": { "price": 30, "formatted": "$30.00", "is_default": false, "editable": false, "exchange_rate": 1300 } }, "multi_currency_selling_price": { "KRW": { "price": 39000, "formatted": "39,000원", "is_default": true, "editable": true }, "USD": { "price": 30, "formatted": "$30.00", "is_default": false, "editable": false, "exchange_rate": 1300 } }, "stock_quantity": 85, "safe_stock_quantity": 10, "is_below_safe_stock": false, "option_stock_sum": 85, "sales_status": "on_sale", "sales_status_label": "판매중", "sales_status_variant": "success", "display_status": "visible", "display_status_label": "노출", "display_status_variant": "success", "categories": [ { "id": 11, "name": "상의", "is_primary": true } ], "primary_category": "상의", "categories_with_path": [ { "id": 11, "path": [ { "id": 1, "name": "패션의류" }, { "id": 11, "name": "상의" } ], "path_string": "패션의류 > 상의", "is_primary": true } ], "brand_name": "어반핏", "shipping_policy_id": 1, "shipping_policy_name": "기본 배송정책", "min_purchase_qty": 1, "max_purchase_qty": 0, "has_options": false, "options_count": 0, "options": [], "labels": [], "review_count": 42, "rating_avg": 4.3, "created_at": "2026-05-20 14:30:00", "updated_at": "2026-05-28 09:15:00", "is_owner": false, "abilities": { "can_update": true, "can_delete": true } }, { "id": 103, "name": { "ko": "구스다운 경량 패딩 점퍼" }, "name_localized": "구스다운 경량 패딩 점퍼", "product_code": "OW-3310", "sku": "OW-3310", "thumbnail_url": "/images/placeholder.png", "list_price": 189000, "list_price_formatted": "189,000원", "selling_price": 132300, "selling_price_formatted": "132,300원", "discount_rate": 30, "multi_currency_list_price": { "KRW": { "price": 189000, "formatted": "189,000원", "is_default": true, "editable": true }, "USD": { "price": 145.38, "formatted": "$145.38", "is_default": false, "editable": false, "exchange_rate": 1300 } }, "multi_currency_selling_price": { "KRW": { "price": 132300, "formatted": "132,300원", "is_default": true, "editable": true }, "USD": { "price": 101.77, "formatted": "$101.77", "is_default": false, "editable": false, "exchange_rate": 1300 } }, "stock_quantity": 0, "safe_stock_quantity": 10, "is_below_safe_stock": true, "option_stock_sum": 0, "sales_status": "sold_out", "sales_status_label": "품절", "sales_status_variant": "danger", "display_status": "hidden", "display_status_label": "미노출", "display_status_variant": "gray", "categories": [ { "id": 11, "name": "상의", "is_primary": true } ], "primary_category": "상의", "categories_with_path": [ { "id": 11, "path": [ { "id": 1, "name": "패션의류" }, { "id": 11, "name": "상의" } ], "path_string": "패션의류 > 상의", "is_primary": true } ], "brand_name": "노스벨리", "shipping_policy_id": 1, "shipping_policy_name": "기본 배송정책", "min_purchase_qty": 1, "max_purchase_qty": 0, "has_options": true, "options_count": 9, "options": [], "labels": [ { "name": "BEST", "color": "#ef4444" } ], "review_count": 271, "rating_avg": 4.9, "created_at": "2026-05-20 14:30:00", "updated_at": "2026-05-28 09:15:00", "is_owner": false, "abilities": { "can_update": true, "can_delete": true } } ], "pagination": { "current_page": 1, "last_page": 4, "per_page": 20, "total": 73 } } }, "product": { "data": { "id": 101, "name": { "ko": "베이직 오버핏 코튼 티셔츠", "en": "Basic Overfit Cotton T-Shirt" }, "product_code": "TS-1001", "sales_product_code": "SP-TS-1001", "abilities": { "can_update": true, "can_delete": true }, "images": [ { "id": 5001, "hash": "img5001", "original_filename": "tshirt_main.jpg", "download_url": "/images/placeholder.png", "alt_text": "정면", "is_thumbnail": true, "sort_order": 0, "order": 0, "width": 1000, "height": 1000, "file_size": 184320, "size": 184320, "size_formatted": "180 KB", "mime_type": "image/jpeg", "is_image": true }, { "id": 5002, "hash": "img5002", "original_filename": "tshirt_back.jpg", "download_url": "/images/placeholder.png", "alt_text": "후면", "is_thumbnail": false, "sort_order": 1, "order": 1, "width": 1000, "height": 1000, "file_size": 176128, "size": 176128, "size_formatted": "172 KB", "mime_type": "image/jpeg", "is_image": true }, { "id": 5003, "hash": "img5003", "original_filename": "tshirt_detail.jpg", "download_url": "/images/placeholder.png", "alt_text": "디테일", "is_thumbnail": false, "sort_order": 2, "order": 2, "width": 1000, "height": 1000, "file_size": 158720, "size": 158720, "size_formatted": "155 KB", "mime_type": "image/jpeg", "is_image": true } ], "created_at": "2026-05-20 14:30:00", "updated_at": "2026-05-28 09:15:00" } }, "categories": { "data": { "abilities": { "can_create": true, "can_update": true }, "data": [ { "id": 1, "name": { "ko": "패션의류" }, "localized_name": "패션의류", "description": null, "parent_id": null, "path": "1", "depth": 0, "sort_order": 1, "is_active": true, "slug": "fashion", "url": "fashion", "icon": "folder", "meta_title": null, "meta_description": null, "created_at": "2026-04-01 10:00:00", "updated_at": "2026-05-01 10:00:00", "children": [ { "id": 11, "name": { "ko": "상의" }, "localized_name": "상의", "description": null, "parent_id": 1, "path": "1/11", "depth": 1, "sort_order": 11, "is_active": true, "slug": "tops", "url": "tops", "icon": "folder", "meta_title": null, "meta_description": null, "created_at": "2026-04-01 10:00:00", "updated_at": "2026-05-01 10:00:00", "children": [ { "id": 111, "name": { "ko": "티셔츠" }, "localized_name": "티셔츠", "description": null, "parent_id": 11, "path": "11/111", "depth": 2, "sort_order": 111, "is_active": true, "slug": "tshirts", "url": "tshirts", "icon": "folder", "meta_title": null, "meta_description": null, "created_at": "2026-04-01 10:00:00", "updated_at": "2026-05-01 10:00:00", "children": [] }, { "id": 112, "name": { "ko": "셔츠/블라우스" }, "localized_name": "셔츠/블라우스", "description": null, "parent_id": 11, "path": "11/112", "depth": 2, "sort_order": 112, "is_active": true, "slug": "shirts", "url": "shirts", "icon": "folder", "meta_title": null, "meta_description": null, "created_at": "2026-04-01 10:00:00", "updated_at": "2026-05-01 10:00:00", "children": [] } ] }, { "id": 12, "name": { "ko": "하의" }, "localized_name": "하의", "description": null, "parent_id": 1, "path": "1/12", "depth": 1, "sort_order": 12, "is_active": true, "slug": "bottoms", "url": "bottoms", "icon": "folder", "meta_title": null, "meta_description": null, "created_at": "2026-04-01 10:00:00", "updated_at": "2026-05-01 10:00:00", "children": [ { "id": 121, "name": { "ko": "슬랙스" }, "localized_name": "슬랙스", "description": null, "parent_id": 12, "path": "12/121", "depth": 2, "sort_order": 121, "is_active": true, "slug": "slacks", "url": "slacks", "icon": "folder", "meta_title": null, "meta_description": null, "created_at": "2026-04-01 10:00:00", "updated_at": "2026-05-01 10:00:00", "children": [] } ] } ] }, { "id": 2, "name": { "ko": "가방/잡화" }, "localized_name": "가방/잡화", "description": null, "parent_id": null, "path": "2", "depth": 0, "sort_order": 2, "is_active": true, "slug": "bags", "url": "bags", "icon": "folder", "meta_title": null, "meta_description": null, "created_at": "2026-04-01 10:00:00", "updated_at": "2026-05-01 10:00:00", "children": [ { "id": 21, "name": { "ko": "백팩" }, "localized_name": "백팩", "description": null, "parent_id": 2, "path": "2/21", "depth": 1, "sort_order": 21, "is_active": true, "slug": "backpack", "url": "backpack", "icon": "folder", "meta_title": null, "meta_description": null, "created_at": "2026-04-01 10:00:00", "updated_at": "2026-05-01 10:00:00", "children": [] } ] }, { "id": 3, "name": { "ko": "아우터" }, "localized_name": "아우터", "description": null, "parent_id": null, "path": "3", "depth": 0, "sort_order": 3, "is_active": true, "slug": "outer", "url": "outer", "icon": "folder", "meta_title": null, "meta_description": null, "created_at": "2026-04-01 10:00:00", "updated_at": "2026-05-01 10:00:00", "children": [] } ] } }, "orders": { "data": { "data": [ { "id": 5101, "no": 1, "order_number": "20260601-0042", "order_status": "preparing", "order_status_label": "배송준비중", "order_status_variant": "info", "total_amount": 69500, "total_amount_formatted": "69,500원", "total_shipping_amount": 3000, "total_shipping_amount_formatted": "3,000원", "total_paid_amount": 69500, "total_paid_amount_formatted": "69,500원", "total_unpaid_amount": 0, "total_unpaid_amount_formatted": "0원", "ordered_at_formatted": "2026-06-01 19:30", "order_device_label": "PC", "is_first_order": false, "options_count": 2, "user": { "uuid": "u-1001", "name": "홍길동", "email": "gildong@example.com" }, "first_option": { "product_name": "프리미엄 무선 이어버드 프로", "product_option_name": "미드나잇 블랙 / 기본", "product_code": "EARBUDS-PRO", "quantity": 2, "thumbnail_url": null }, "address": { "orderer_name": "홍길동", "recipient_name": "홍길동", "recipient_country_code": "KR", "recipient_country_name": "대한민국" }, "payment": { "payment_method": "card", "payment_method_label": "신용카드" }, "shipping": { "shipping_type": "parcel", "shipping_type_label": "택배", "shipping_method_label": "일반배송", "carrier_name": "CJ대한통운", "tracking_number": null } }, { "id": 5102, "no": 2, "order_number": "20260530-0118", "order_status": "shipping", "order_status_label": "배송중", "order_status_variant": "primary", "total_amount": 42000, "total_amount_formatted": "42,000원", "total_shipping_amount": 0, "total_shipping_amount_formatted": "0원", "total_paid_amount": 42000, "total_paid_amount_formatted": "42,000원", "total_unpaid_amount": 0, "total_unpaid_amount_formatted": "0원", "ordered_at_formatted": "2026-05-30 13:05", "order_device_label": "PC", "is_first_order": false, "options_count": 1, "user": { "uuid": "u-1002", "name": "김영희", "email": "younghee@example.com" }, "first_option": { "product_name": "휴대용 블루투스 스피커", "product_option_name": "기본", "product_code": "SPEAKER-MINI", "quantity": 1, "thumbnail_url": null }, "address": { "orderer_name": "김영희", "recipient_name": "김영희", "recipient_country_code": "KR", "recipient_country_name": "대한민국" }, "payment": { "payment_method": "vbank", "payment_method_label": "가상계좌" }, "shipping": { "shipping_type": "parcel", "shipping_type_label": "택배", "shipping_method_label": "일반배송", "carrier_name": "CJ대한통운", "tracking_number": "6123456789020" } }, { "id": 5103, "no": 3, "order_number": "20260528-0096", "order_status": "payment_pending", "order_status_label": "입금대기", "order_status_variant": "warning", "total_amount": 128000, "total_amount_formatted": "128,000원", "total_shipping_amount": 3000, "total_shipping_amount_formatted": "3,000원", "total_paid_amount": 0, "total_paid_amount_formatted": "0원", "total_unpaid_amount": 128000, "total_unpaid_amount_formatted": "128,000원", "ordered_at_formatted": "2026-05-28 21:40", "order_device_label": "PC", "is_first_order": true, "options_count": 1, "user": { "uuid": "u-1003", "name": "John Smith", "email": "john@example.com" }, "first_option": { "product_name": "스마트 워치 밴드", "product_option_name": "브라운 / M", "product_code": "WATCH-BAND", "quantity": 1, "thumbnail_url": null }, "address": { "orderer_name": "John Smith", "recipient_name": "John Smith", "recipient_country_code": "US", "recipient_country_name": "United States" }, "payment": { "payment_method": "dbank", "payment_method_label": "무통장입금" }, "shipping": { "shipping_type": "parcel", "shipping_type_label": "택배", "shipping_method_label": "일반배송", "carrier_name": "CJ대한통운", "tracking_number": null } }, { "id": 5104, "no": 4, "order_number": "20260525-0071", "order_status": "cancelled", "order_status_label": "주문취소", "order_status_variant": "danger", "total_amount": 24000, "total_amount_formatted": "24,000원", "total_shipping_amount": 3000, "total_shipping_amount_formatted": "3,000원", "total_paid_amount": 0, "total_paid_amount_formatted": "0원", "total_unpaid_amount": 0, "total_unpaid_amount_formatted": "0원", "ordered_at_formatted": "2026-05-25 10:12", "order_device_label": "PC", "is_first_order": false, "options_count": 1, "user": { "uuid": "u-1004", "name": "이철수", "email": "chulsoo@example.com" }, "first_option": { "product_name": "USB-C 멀티 어댑터", "product_option_name": "실버", "product_code": "ADAPTER-USBC", "quantity": 1, "thumbnail_url": null }, "address": { "orderer_name": "이철수", "recipient_name": "이철수", "recipient_country_code": "KR", "recipient_country_name": "대한민국" }, "payment": { "payment_method": "card", "payment_method_label": "신용카드" }, "shipping": { "shipping_type": "parcel", "shipping_type_label": "택배", "shipping_method_label": "일반배송", "carrier_name": "CJ대한통운", "tracking_number": null } } ], "statistics": { "pending_payment": 1, "payment_complete": 0, "preparing": 1, "shipping": 1, "delivered": 0, "confirmed": 0, "cancelled": 1 }, "pagination": { "current_page": 1, "last_page": 1, "per_page": 20, "total": 4, "from": 1, "to": 4, "has_more_pages": false }, "abilities": { "can_update": true } } }, "order": { "data": { "id": 5101, "order_number": "20260601-0042", "order_status": "preparing", "order_status_label": "배송준비중", "order_status_variant": "info", "order_device": "pc", "order_device_label": "PC", "is_first_order": false, "abilities": { "can_read": true, "can_update": true, "can_cancel": true }, "subtotal_amount": 76000, "subtotal_amount_formatted": "76,000원", "total_discount_amount": 9500, "total_discount_amount_formatted": "9,500원", "total_shipping_amount": 3000, "total_shipping_amount_formatted": "3,000원", "total_amount": 69500, "total_amount_formatted": "69,500원", "total_paid_amount": 69500, "total_paid_amount_formatted": "69,500원", "total_product_coupon_discount_amount": 5000, "total_product_coupon_discount_amount_formatted": "5,000원", "total_order_coupon_discount_amount": 2500, "total_order_coupon_discount_amount_formatted": "2,500원", "total_coupon_discount_amount": 7500, "total_coupon_discount_amount_formatted": "7,500원", "total_code_discount_amount": 2000, "total_code_discount_amount_formatted": "2,000원", "total_points_used_amount": 1000, "total_points_used_amount_formatted": "1,000원", "total_deposit_used_amount": 0, "total_deposit_used_amount_formatted": "0원", "total_earned_points_amount": 710, "total_earned_points_amount_formatted": "710원", "total_tax_amount": 6318, "total_tax_amount_formatted": "6,318원", "total_vat_amount": 6318, "total_vat_amount_formatted": "6,318원", "total_list_price": 82000, "total_list_price_formatted": "82,000원", "total_quantity": 3, "item_count": 2, "mc_subtotal_amount": { "KRW": { "price": 76000, "formatted": "76,000원", "is_default": true }, "USD": { "price": 55.7, "formatted": "$55.70", "is_default": false } }, "mc_total_discount_amount": { "KRW": { "price": 9500, "formatted": "9,500원", "is_default": true }, "USD": { "price": 6.9, "formatted": "$6.90", "is_default": false } }, "mc_total_shipping_amount": { "KRW": { "price": 3000, "formatted": "3,000원", "is_default": true }, "USD": { "price": 2.2, "formatted": "$2.20", "is_default": false } }, "mc_total_amount": { "KRW": { "price": 69500, "formatted": "69,500원", "is_default": true }, "USD": { "price": 50.7, "formatted": "$50.70", "is_default": false } }, "ordered_at_formatted": "2026-06-01 19:30", "paid_at_formatted": "2026-06-01 19:31", "delivered_at": null, "user_id": "u-1001", "user_login_id": "gildong", "orderer_name": "홍길동", "orderer_phone": "010-1234-5678", "orderer_tel": "02-555-1234", "orderer_email": "gildong@example.com", "recipient_name": "홍길동", "recipient_phone": "010-1234-5678", "recipient_zipcode": "06234", "recipient_address": "서울특별시 강남구 테헤란로 123", "recipient_detail_address": "4층 401호", "delivery_memo": "부재 시 경비실에 맡겨주세요", "shipping_address": { "recipient_name": "홍길동", "recipient_phone": "010-1234-5678", "zipcode": "06234", "address": "서울특별시 강남구 테헤란로 123", "address_detail": "4층 401호", "full_address": "서울특별시 강남구 테헤란로 123 4층 401호", "delivery_memo": "부재 시 경비실에 맡겨주세요" }, "options": [ { "id": 9101, "option_status": "preparing", "option_status_label": "배송준비중", "option_status_variant": "info", "product_id": 1, "product_option_id": 101, "sku": "EARBUDS-PRO-BLK", "product_name": "프리미엄 무선 이어버드 프로", "product_option_name": "미드나잇 블랙 / 기본", "option_name": "미드나잇 블랙 / 기본", "quantity": 2, "shipped_quantity": 0, "unit_price": 29000, "unit_price_formatted": "29,000원", "subtotal_price": 58000, "subtotal_price_formatted": "58,000원", "subtotal_discount_amount": 7500, "subtotal_discount_amount_formatted": "7,500원", "list_price": 32000, "list_price_formatted": "32,000원", "final_amount": 50500, "final_amount_formatted": "50,500원", "product_coupon_discount_amount": 5000, "product_coupon_discount_amount_formatted": "5,000원", "order_coupon_discount_amount": 2500, "order_coupon_discount_amount_formatted": "2,500원", "coupon_discount_amount": 7500, "coupon_discount_amount_formatted": "7,500원", "code_discount_amount": 0, "code_discount_amount_formatted": "0원", "referral_discount_amount": 0, "referral_discount_amount_formatted": "0원", "subtotal_points_used_amount": 500, "subtotal_points_used_amount_formatted": "500원", "subtotal_deposit_used_amount": 0, "subtotal_deposit_used_amount_formatted": "0원", "subtotal_earned_points_amount": 530, "subtotal_earned_points_amount_formatted": "530원", "subtotal_tax_amount": 4818, "subtotal_tax_amount_formatted": "4,818원", "subtotal_vat_amount": 4818, "subtotal_vat_amount_formatted": "4,818원", "shipping_policy_name": "기본 배송 정책", "shipping_type_label": "택배", "shipping_amount": 3000, "shipping_amount_formatted": "3,000원", "carrier_name": "CJ대한통운", "tracking_number": "6123456789012", "thumbnail_url": null, "product_snapshot": { "product_code": "EARBUDS-PRO" }, "mc_unit_price": { "KRW": { "price": 29000, "formatted": "29,000원", "is_default": true }, "USD": { "price": 21.3, "formatted": "$21.30", "is_default": false } }, "mc_subtotal_price": { "KRW": { "price": 58000, "formatted": "58,000원", "is_default": true }, "USD": { "price": 42.6, "formatted": "$42.60", "is_default": false } }, "confirmed_at": null, "promotions_applied_snapshot": { "coupons": [ { "name": "이어버드 단독 10% 할인", "total_discount_formatted": "5,000원" } ], "discount_codes": [ { "code": "WELCOME2000", "name": "신규가입 2,000원 할인코드", "total_discount_formatted": "2,000원" } ], "events": [] } }, { "id": 9102, "option_status": "preparing", "option_status_label": "배송준비중", "option_status_variant": "info", "product_id": 2, "product_option_id": 102, "sku": "CABLE-15M-WHT", "product_name": "고속 충전 케이블 1.5m", "product_option_name": "1.5m", "option_name": "1.5m", "quantity": 1, "shipped_quantity": 0, "unit_price": 18000, "unit_price_formatted": "18,000원", "subtotal_price": 18000, "subtotal_price_formatted": "18,000원", "subtotal_discount_amount": 0, "subtotal_discount_amount_formatted": "0원", "list_price": 18000, "list_price_formatted": "18,000원", "final_amount": 18000, "final_amount_formatted": "18,000원", "product_coupon_discount_amount": 0, "product_coupon_discount_amount_formatted": "0원", "order_coupon_discount_amount": 0, "order_coupon_discount_amount_formatted": "0원", "coupon_discount_amount": 0, "coupon_discount_amount_formatted": "0원", "code_discount_amount": 0, "code_discount_amount_formatted": "0원", "referral_discount_amount": 0, "referral_discount_amount_formatted": "0원", "subtotal_points_used_amount": 0, "subtotal_points_used_amount_formatted": "0원", "subtotal_deposit_used_amount": 0, "subtotal_deposit_used_amount_formatted": "0원", "subtotal_earned_points_amount": 180, "subtotal_earned_points_amount_formatted": "180원", "subtotal_tax_amount": 1500, "subtotal_tax_amount_formatted": "1,500원", "subtotal_vat_amount": 1500, "subtotal_vat_amount_formatted": "1,500원", "shipping_policy_name": "무료 배송 정책", "shipping_type_label": "택배", "shipping_amount": 0, "shipping_amount_formatted": "0원", "carrier_name": "CJ대한통운", "tracking_number": "6123456789013", "thumbnail_url": null, "product_snapshot": { "product_code": "CABLE-15M" }, "mc_unit_price": { "KRW": { "price": 18000, "formatted": "18,000원", "is_default": true }, "USD": { "price": 13.2, "formatted": "$13.20", "is_default": false } }, "mc_subtotal_price": { "KRW": { "price": 18000, "formatted": "18,000원", "is_default": true }, "USD": { "price": 13.2, "formatted": "$13.20", "is_default": false } }, "confirmed_at": null, "promotions_applied_snapshot": { "coupons": [], "discount_codes": [], "events": [] } } ], "payment": { "payment_method_label": "신용카드" }, "payments": [ { "id": 8101, "payment_status": "paid", "payment_status_label": "결제완료", "payment_status_variant": "success", "payment_method": "card", "payment_method_label": "신용카드", "payment_type_label": "일반결제", "payment_number": "PAY-20260601-0042", "paid_amount_formatted": "69,500원", "account_info": null, "requested_at_formatted": "2026-06-01 19:30", "paid_at_formatted": "2026-06-01 19:31", "due_date_formatted": null, "cancelled_amount": 0, "cancelled_amount_formatted": "0원", "refunded_amount": 0, "refunded_amount_formatted": "0원", "refund_status_label": null, "refund_status_variant": null, "refund_points_amount": 0, "refund_points_amount_formatted": "0원", "event_discount_amount": 0, "event_discount_amount_formatted": "0원", "referral_discount_amount": 0, "referral_discount_amount_formatted": "0원" } ], "shippings": [], "promotions_applied_snapshot": { "product_promotions": { "coupons": [ { "coupon_id": 5001, "name": "이어버드 단독 10% 할인", "target_type": "product_amount", "total_discount": 5000, "total_discount_formatted": "5,000원" } ], "discount_codes": [ { "code_id": 7001, "code": "WELCOME2000", "name": "신규가입 2,000원 할인코드", "total_discount": 2000, "total_discount_formatted": "2,000원" } ], "events": [] }, "order_promotions": { "coupons": [ { "coupon_id": 6001, "name": "5만원 이상 5,000원 할인", "target_type": "order_amount", "total_discount": 5000, "total_discount_formatted": "5,000원" } ], "discount_codes": [], "events": [] } }, "shipping_policy_applied_snapshot": { "policy_name": "기본 배송 정책", "shipping_amount": 3000 } } }, "reviews": { "data": { "abilities": { "can_update": true, "can_delete": true }, "data": [ { "id": 9101, "product_id": 101, "user": { "uuid": "u-aaa", "name": "김민지", "email": "minji@example.com" }, "product": { "id": 101, "name": "베이직 오버핏 코튼 티셔츠", "thumbnail_url": "/images/placeholder.png" }, "option_snapshot_label": "블랙 / M", "rating": 5, "content": "핏이 정말 예쁘고 원단도 도톰해서 만족스러워요.", "content_mode": "text", "status": "visible", "status_label": "노출", "status_badge_color": "green", "image_count": 2, "has_reply": true, "has_reply_label": "답변완료", "has_reply_badge_color": "green", "reply_content": "소중한 후기 감사합니다!", "replied_at": "2026-05-27 09:10:00", "created_at": "2026-05-26 11:20:00", "updated_at": "2026-05-26 11:20:00", "is_owner": false, "abilities": { "can_update": true, "can_delete": true } }, { "id": 9102, "product_id": 101, "user": { "uuid": "u-bbb", "name": "이서준", "email": "seojun@example.com" }, "product": { "id": 101, "name": "베이직 오버핏 코튼 티셔츠", "thumbnail_url": "/images/placeholder.png" }, "option_snapshot_label": "화이트 / L", "rating": 4, "content": "색감 예쁘고 좋아요.", "content_mode": "text", "status": "visible", "status_label": "노출", "status_badge_color": "green", "image_count": 0, "has_reply": false, "has_reply_label": "미답변", "has_reply_badge_color": "gray", "reply_content": null, "replied_at": null, "created_at": "2026-05-24 16:42:00", "updated_at": "2026-05-24 16:42:00", "is_owner": false, "abilities": { "can_update": true, "can_delete": true } }, { "id": 9103, "product_id": 102, "user": { "uuid": "u-ccc", "name": "박도윤", "email": "doyun@example.com" }, "product": { "id": 102, "name": "데일리 와이드 슬랙스", "thumbnail_url": "/images/placeholder.png" }, "option_snapshot_label": "", "rating": 2, "content": "기대보다 별로였어요.", "content_mode": "text", "status": "hidden", "status_label": "숨김", "status_badge_color": "gray", "image_count": 0, "has_reply": false, "has_reply_label": "미답변", "has_reply_badge_color": "gray", "reply_content": null, "replied_at": null, "created_at": "2026-05-22 10:05:00", "updated_at": "2026-05-22 10:05:00", "is_owner": false, "abilities": { "can_update": true, "can_delete": true } } ], "meta": { "current_page": 1, "last_page": 2, "per_page": 15, "total": 21 } } }, "brands": { "data": { "abilities": { "can_create": true, "can_update": true }, "data": [ { "id": 1, "name": { "ko": "코지홈" }, "localized_name": "코지홈", "slug": "cozyhome", "url": "cozyhome", "website": "https://cozyhome.example.com", "sort_order": 1, "is_active": true, "icon": "tag", "description": { "ko": "데일리 베이직 의류 브랜드" }, "products_count": 42, "created_at": "2026-03-01 10:00:00", "updated_at": "2026-05-01 10:00:00", "is_owner": false, "abilities": { "can_update": true, "can_delete": true } }, { "id": 2, "name": { "ko": "어반핏" }, "localized_name": "어반핏", "slug": "urbanfit", "url": "urbanfit", "website": null, "sort_order": 2, "is_active": true, "icon": "tag", "description": { "ko": "모던 시티 캐주얼" }, "products_count": 18, "created_at": "2026-03-05 10:00:00", "updated_at": "2026-05-02 10:00:00", "is_owner": false, "abilities": { "can_update": true, "can_delete": true } }, { "id": 3, "name": { "ko": "노스벨리" }, "localized_name": "노스벨리", "slug": "northvalley", "url": "northvalley", "website": "https://northvalley.example.com", "sort_order": 3, "is_active": false, "icon": "tag", "description": null, "products_count": 7, "created_at": "2026-03-10 10:00:00", "updated_at": "2026-05-03 10:00:00", "is_owner": false, "abilities": { "can_update": true, "can_delete": true } } ] } }, "carriers": { "data": [ { "id": 1, "name": "샘플 택배", "code": "sample", "enabled": true }, { "id": 2, "name": "샘플 퀵", "code": "quick", "enabled": false } ] }, "active_carriers": { "data": [ { "id": 1, "name": "샘플 택배", "code": "sample" } ] }, "coupons": { "data": { "abilities": { "can_create": true, "can_update": true }, "data": [ { "id": 3001, "name": { "ko": "신규회원 10% 할인" }, "localized_name": "신규회원 10% 할인", "code": "WELCOME10", "target_type": "order_amount", "target_type_label": "주문금액", "discount_type": "rate", "discount_value": 10, "benefit_formatted": "10% 할인", "min_order_amount": 20000, "max_discount_amount": 5000, "is_active": true, "issued_count": 1240, "used_count": 318, "valid_from": "2026-05-01 00:00:00", "valid_to": "2026-06-30 23:59:59", "created_at": "2026-04-25 10:00:00", "is_owner": false, "abilities": { "can_update": true, "can_delete": true } }, { "id": 3002, "name": { "ko": "5,000원 즉시할인" }, "localized_name": "5,000원 즉시할인", "code": "SAVE5000", "target_type": "order_amount", "target_type_label": "주문금액", "discount_type": "fixed", "discount_value": 5000, "benefit_formatted": "5,000원 할인", "min_order_amount": 30000, "max_discount_amount": null, "is_active": true, "issued_count": 800, "used_count": 145, "valid_from": "2026-05-10 00:00:00", "valid_to": "2026-06-15 23:59:59", "created_at": "2026-05-08 10:00:00", "is_owner": false, "abilities": { "can_update": true, "can_delete": true } }, { "id": 3003, "name": { "ko": "무료배송 쿠폰" }, "localized_name": "무료배송 쿠폰", "code": "FREESHIP", "target_type": "shipping_fee", "target_type_label": "배송비", "discount_type": "fixed", "discount_value": 3000, "benefit_formatted": "배송비 3,000원 할인", "min_order_amount": 0, "max_discount_amount": 3000, "is_active": false, "issued_count": 0, "used_count": 0, "valid_from": "2026-06-01 00:00:00", "valid_to": "2026-07-31 23:59:59", "created_at": "2026-05-20 10:00:00", "is_owner": false, "abilities": { "can_update": true, "can_delete": true } } ], "pagination": { "current_page": 1, "last_page": 3, "per_page": 15, "total": 38 } } }, "coupon": { "data": { "id": 1, "name": { "ko": "신규회원 10% 할인", "en": "New Member 10% Off" }, "localized_name": "신규회원 10% 할인", "description": { "ko": "신규 가입 회원 대상 주문금액 10% 할인 쿠폰", "en": "10% off for new members" }, "localized_description": "신규 가입 회원 대상 주문금액 10% 할인 쿠폰", "target_type": "order_amount", "target_type_label": "주문금액", "target_type_badge_color": "blue", "discount_type": "rate", "discount_type_label": "정률", "discount_value": 10, "discount_max_amount": 20000, "min_order_amount": 30000, "benefit_formatted": "10% 할인 (최대 20,000원)", "issue_method": "download", "issue_method_label": "다운로드", "issue_method_badge_color": "green", "issue_condition": "manual", "issue_condition_label": "수동발급", "issue_condition_badge_color": "gray", "issue_status": "active", "issue_status_label": "발급중", "issue_status_badge_color": "green", "total_quantity": 1000, "issued_count": 342, "per_user_limit": 1, "issue_count_formatted": "342 / 1,000", "valid_type": "days", "valid_days": 30, "valid_from": null, "valid_to": null, "valid_period_formatted": "발급일로부터 30일", "issue_from": "2026-05-01T00:00", "issue_to": "2026-06-30T23:59", "issue_period_formatted": "2026-05-01 ~ 2026-06-30", "is_combinable": false, "target_scope": "all", "target_scope_label": "제한 없음", "is_issuable": true, "created_at": "2026-04-25 10:00", "updated_at": "2026-05-08 14:20", "created_by_name": "관리자", "included_products": [], "excluded_products": [], "included_categories": [], "excluded_categories": [], "issues_count": 342, "abilities": { "can_create": true, "can_update": true, "can_delete": true } } }, "couponIssues": { "data": { "data": [ { "id": 9001, "coupon_id": 1, "user_id": "u-1001", "user_name": "홍길동", "coupon_code": "WELCOME-A1B2", "status": "used", "status_label": "사용완료", "status_badge_color": "gray", "issued_at": "2026-05-02 10:15", "expired_at": "2026-06-01 23:59", "used_at": "2026-05-10 14:20", "order_id": 5101, "discount_amount": 7000, "is_expired": false, "is_usable": false }, { "id": 9002, "coupon_id": 1, "user_id": "u-1002", "user_name": "김영희", "coupon_code": "WELCOME-C3D4", "status": "issued", "status_label": "발급완료", "status_badge_color": "green", "issued_at": "2026-05-15 09:40", "expired_at": "2026-06-14 23:59", "used_at": null, "order_id": null, "discount_amount": 0, "is_expired": false, "is_usable": true }, { "id": 9003, "coupon_id": 1, "user_id": "u-1003", "user_name": "이철수", "coupon_code": "WELCOME-E5F6", "status": "expired", "status_label": "기간만료", "status_badge_color": "red", "issued_at": "2026-04-01 11:00", "expired_at": "2026-05-01 23:59", "used_at": null, "order_id": null, "discount_amount": 0, "is_expired": true, "is_usable": false } ], "pagination": { "current_page": 1, "last_page": 1, "per_page": 10, "total": 3 } } }, "policy": { "data": { "id": 1, "name": { "ko": "기본 배송정책", "en": "Standard Shipping" }, "name_localized": "기본 배송정책", "is_active": true, "is_default": true, "sort_order": 0, "created_at": "2026-05-01 09:00", "updated_at": "2026-05-20 11:30", "fee_summary": "3,000원 (50,000원 이상 무료배송)", "countries_display": [ { "country_code": "KR", "country_name": "대한민국", "flag": "🇰🇷" }, { "country_code": "US", "country_name": "미국", "flag": "🇺🇸" } ], "country_settings": [ { "id": 11, "country_code": "KR", "shipping_method": "parcel", "shipping_method_label": "택배", "custom_shipping_name": null, "currency_code": "KRW", "charge_policy": "conditional_free", "charge_policy_label": "조건부 무료", "base_fee": 3000, "free_threshold": 50000, "ranges": null, "api_endpoint": null, "api_request_fields": null, "api_response_fee_field": null, "extra_fee_enabled": true, "extra_fee_settings": [ { "region": "제주특별자치도", "zipcode": "63000-63644", "fee": 3000 }, { "region": "도서산간", "zipcode": "", "fee": 4000 } ], "extra_fee_multiply": false, "is_active": true }, { "id": 12, "country_code": "US", "shipping_method": "express", "shipping_method_label": "특송", "custom_shipping_name": null, "currency_code": "USD", "charge_policy": "range_amount", "charge_policy_label": "구간별(금액)", "base_fee": 0, "free_threshold": null, "ranges": [ { "min": 0, "max": 100000, "fee": 25000 }, { "min": 100000, "max": null, "fee": 15000 } ], "api_endpoint": null, "api_request_fields": null, "api_response_fee_field": null, "extra_fee_enabled": false, "extra_fee_settings": null, "extra_fee_multiply": false, "is_active": true } ], "abilities": { "can_create": true, "can_update": true, "can_delete": true } } }, "shipping_policies": { "data": { "abilities": { "can_create": true, "can_update": true, "can_delete": true }, "data": [ { "id": 1, "name": { "ko": "기본 배송정책" }, "name_localized": "기본 배송정책", "is_active": true, "is_default": true, "sort_order": 1, "fee_summary": "3,000원 (50,000원 이상 무료배송)", "countries_display": "🇰🇷 대한민국", "country_settings": [ { "id": 1, "country_code": "KR", "country_name": "대한민국", "shipping_method": "parcel", "charge_policy": "conditional_free", "base_fee": 3000, "base_fee_formatted": "3,000원", "currency_code": "KRW", "free_threshold": 50000, "free_threshold_formatted": "50,000원", "carrier_label": "CJ대한통운" } ], "created_at": "2026-03-01 10:00:00", "updated_at": "2026-05-01 10:00:00", "is_owner": false, "abilities": { "can_update": true, "can_delete": true } }, { "id": 2, "name": { "ko": "해외 배송정책" }, "name_localized": "해외 배송정책", "is_active": true, "is_default": false, "sort_order": 2, "fee_summary": "국가별 차등 (25,000원~)", "countries_display": "🇰🇷 🇺🇸 외 3개국", "country_settings": [ { "id": 1, "country_code": "KR", "country_name": "대한민국", "shipping_method": "parcel", "charge_policy": "conditional_free", "base_fee": 3000, "base_fee_formatted": "3,000원", "currency_code": "KRW", "free_threshold": 50000, "free_threshold_formatted": "50,000원", "carrier_label": "CJ대한통운" }, { "id": 2, "country_code": "US", "country_name": "미국", "shipping_method": "express", "charge_policy": "paid", "base_fee": 25000, "base_fee_formatted": "25,000원", "currency_code": "KRW", "free_threshold": null, "free_threshold_formatted": null, "carrier_label": "EMS" } ], "created_at": "2026-03-02 10:00:00", "updated_at": "2026-05-02 10:00:00", "is_owner": false, "abilities": { "can_update": true, "can_delete": true } }, { "id": 3, "name": { "ko": "무료배송 정책" }, "name_localized": "무료배송 정책", "is_active": false, "is_default": false, "sort_order": 3, "fee_summary": "전 상품 무료배송", "countries_display": "🇰🇷 대한민국", "country_settings": [ { "id": 1, "country_code": "KR", "country_name": "대한민국", "shipping_method": "parcel", "charge_policy": "free", "base_fee": 0, "base_fee_formatted": "0원", "currency_code": "KRW", "free_threshold": 0, "free_threshold_formatted": "0원", "carrier_label": "CJ대한통운" } ], "created_at": "2026-03-03 10:00:00", "updated_at": "2026-05-03 10:00:00", "is_owner": false, "abilities": { "can_update": true, "can_delete": true } } ], "pagination": { "current_page": 1, "last_page": 1, "per_page": 20, "total": 3 } } }, "extra_fee_templates": { "data": { "data": [ { "id": 1, "description": "제주 도서산간 추가배송비", "region": "제주특별자치도", "zipcode": "63000-63644", "fee": 3000, "fee_formatted": "3,000원", "is_active": true }, { "id": 2, "description": "울릉도/독도 추가배송비", "region": "경상북도 울릉군", "zipcode": "40200-40240", "fee": 5000, "fee_formatted": "5,000원", "is_active": true }, { "id": 3, "description": "기타 도서산간 추가배송비", "region": "전국 도서산간", "zipcode": "", "fee": 4000, "fee_formatted": "4,000원", "is_active": false } ] } }, "presets": { "data": [ { "id": 1, "name": "기본 프리셋", "config": {} } ] }, "product_labels": { "data": { "abilities": { "can_create": true, "can_update": true }, "data": [ { "id": 1, "name": { "ko": "BEST" }, "color": "#ef4444", "is_active": true, "sort_order": 1, "assignments_count": 12, "created_at": "2026-03-01 10:00:00", "updated_at": "2026-05-01 10:00:00", "is_owner": false, "abilities": { "can_update": true, "can_delete": true } }, { "id": 2, "name": { "ko": "NEW" }, "color": "#3b82f6", "is_active": true, "sort_order": 2, "assignments_count": 8, "created_at": "2026-03-02 10:00:00", "updated_at": "2026-05-02 10:00:00", "is_owner": false, "abilities": { "can_update": true, "can_delete": true } }, { "id": 3, "name": { "ko": "한정특가" }, "color": "#f59e0b", "is_active": false, "sort_order": 3, "assignments_count": 0, "created_at": "2026-03-03 10:00:00", "updated_at": "2026-05-03 10:00:00", "is_owner": false, "abilities": { "can_update": true, "can_delete": true } } ] } }, "notice_templates": { "data": { "abilities": { "can_create": true, "can_update": true }, "data": [ { "id": 1, "name": { "ko": "의류 상품정보제공고시" }, "localized_name": "의류 상품정보제공고시", "category": "clothing", "fields": [ { "key": "material", "label": { "ko": "제품 소재" } }, { "key": "size", "label": { "ko": "치수" } }, { "key": "manufacturer", "label": { "ko": "제조자" } } ], "fields_count": 3, "is_active": true, "sort_order": 1, "icon": "file-alt", "created_at": "2026-03-01 10:00:00", "updated_at": "2026-05-01 10:00:00", "is_owner": false, "abilities": { "can_update": true, "can_delete": true } }, { "id": 2, "name": { "ko": "가공식품 상품정보제공고시" }, "localized_name": "가공식품 상품정보제공고시", "category": "food", "fields": [ { "key": "name", "label": { "ko": "제품명" } }, { "key": "expiry", "label": { "ko": "소비기한" } } ], "fields_count": 2, "is_active": true, "sort_order": 2, "icon": "file-alt", "created_at": "2026-03-02 10:00:00", "updated_at": "2026-05-02 10:00:00", "is_owner": false, "abilities": { "can_update": true, "can_delete": true } }, { "id": 3, "name": { "ko": "전자제품 상품정보제공고시" }, "localized_name": "전자제품 상품정보제공고시", "category": "electronics", "fields": [ { "key": "model", "label": { "ko": "모델명" } } ], "fields_count": 1, "is_active": false, "sort_order": 3, "icon": "file-alt", "created_at": "2026-03-03 10:00:00", "updated_at": "2026-05-03 10:00:00", "is_owner": false, "abilities": { "can_update": true, "can_delete": true } } ] } }, "templates": { "data": { "data": [ { "id": 1, "name": "기본 안내문", "body_html": "
샘플 상품 안내 템플릿
" } ], "meta": { "total": 1, "per_page": 20, "current_page": 1 }, "abilities": { "can_create": true } } }, "common_infos": { "data": { "abilities": { "can_create": true, "can_update": true }, "data": [ { "id": 1, "name": { "ko": "기본 배송/교환/환불 안내" }, "localized_name": "기본 배송/교환/환불 안내", "content": { "ko": "주문 후 영업일 기준 1~2일 내 출고됩니다. 단순 변심 교환·반품은 수령 후 7일 이내 가능합니다.
" }, "localized_content": "주문 후 영업일 기준 1~2일 내 출고됩니다. 단순 변심 교환·반품은 수령 후 7일 이내 가능합니다.
", "content_mode": "html", "is_default": true, "is_active": true, "sort_order": 1, "icon": "info-circle", "products_count": 30, "language_count": 1, "created_at": "2026-03-01 10:00:00", "updated_at": "2026-05-01 10:00:00", "is_owner": false, "abilities": { "can_update": true, "can_delete": true } }, { "id": 2, "name": { "ko": "식품 보관 안내" }, "localized_name": "식품 보관 안내", "content": { "ko": "직사광선을 피해 서늘한 곳에 보관하세요." }, "localized_content": "직사광선을 피해 서늘한 곳에 보관하세요.", "content_mode": "text", "is_default": false, "is_active": true, "sort_order": 2, "icon": "info-circle", "products_count": 5, "language_count": 1, "created_at": "2026-03-02 10:00:00", "updated_at": "2026-05-02 10:00:00", "is_owner": false, "abilities": { "can_update": true, "can_delete": true } }, { "id": 3, "name": { "ko": "대형가전 설치 안내" }, "localized_name": "대형가전 설치 안내", "content": { "ko": "설치 기사 방문 일정은 별도 안내됩니다.
" }, "localized_content": "설치 기사 방문 일정은 별도 안내됩니다.
", "content_mode": "html", "is_default": false, "is_active": true, "sort_order": 3, "icon": "info-circle", "products_count": 2, "language_count": 1, "created_at": "2026-03-03 10:00:00", "updated_at": "2026-05-03 10:00:00", "is_owner": false, "abilities": { "can_update": true, "can_delete": true } } ] } }, "commonInfos": { "data": { "abilities": { "can_create": true, "can_update": true }, "data": [ { "id": 1, "name": { "ko": "기본 배송/교환/환불 안내" }, "localized_name": "기본 배송/교환/환불 안내", "content": { "ko": "주문 후 영업일 기준 1~2일 내 출고됩니다. 단순 변심 교환·반품은 수령 후 7일 이내 가능합니다.
" }, "localized_content": "주문 후 영업일 기준 1~2일 내 출고됩니다. 단순 변심 교환·반품은 수령 후 7일 이내 가능합니다.
", "content_mode": "html", "is_default": true, "is_active": true, "sort_order": 1, "icon": "info-circle", "products_count": 30, "language_count": 1, "created_at": "2026-03-01 10:00:00", "updated_at": "2026-05-01 10:00:00", "is_owner": false, "abilities": { "can_update": true, "can_delete": true } }, { "id": 2, "name": { "ko": "식품 보관 안내" }, "localized_name": "식품 보관 안내", "content": { "ko": "직사광선을 피해 서늘한 곳에 보관하세요." }, "localized_content": "직사광선을 피해 서늘한 곳에 보관하세요.", "content_mode": "text", "is_default": false, "is_active": true, "sort_order": 2, "icon": "info-circle", "products_count": 5, "language_count": 1, "created_at": "2026-03-02 10:00:00", "updated_at": "2026-05-02 10:00:00", "is_owner": false, "abilities": { "can_update": true, "can_delete": true } }, { "id": 3, "name": { "ko": "대형가전 설치 안내" }, "localized_name": "대형가전 설치 안내", "content": { "ko": "설치 기사 방문 일정은 별도 안내됩니다.
" }, "localized_content": "설치 기사 방문 일정은 별도 안내됩니다.
", "content_mode": "html", "is_default": false, "is_active": true, "sort_order": 3, "icon": "info-circle", "products_count": 2, "language_count": 1, "created_at": "2026-03-03 10:00:00", "updated_at": "2026-05-03 10:00:00", "is_owner": false, "abilities": { "can_update": true, "can_delete": true } } ] } }, "order_logs": { "data": { "data": [ { "id": 3001, "created_at": "2026-06-03 09:12", "localized_description": "주문 상태를 결제완료에서 배송준비중으로 변경했습니다", "user": { "uuid": "admin-1", "name": "관리자" }, "changes": [ { "field": "order_status", "label": "주문상태", "old": "payment_complete", "old_label": "결제완료", "new": "preparing", "new_label": "배송준비중" } ], "bulk_changes": [] }, { "id": 3002, "created_at": "2026-06-01 19:31", "localized_description": "결제가 완료되었습니다", "user": null, "changes": [ { "field": "payment_status", "label": "결제상태", "old": "pending", "old_label": "결제대기", "new": "paid", "new_label": "결제완료" } ], "bulk_changes": [] }, { "id": 3003, "created_at": "2026-06-01 19:30", "localized_description": "관리자 메모를 수정했습니다", "user": { "uuid": "admin-1", "name": "관리자" }, "changes": [ { "field": "admin_memo", "label": "관리자 메모", "old": "", "old_label": "(없음)", "new": "VIP 고객 — 빠른 배송 요청", "new_label": "VIP 고객 — 빠른 배송 요청" }, { "field": "delivery_memo", "label": "배송 메모", "old": "", "old_label": "(없음)", "new": "부재 시 경비실", "new_label": "부재 시 경비실" } ], "bulk_changes": [] } ], "meta": { "current_page": 1, "last_page": 1, "per_page": 20, "total": 3 } } }, "activity_logs": { "data": { "data": [ { "id": 1, "log_type": "admin", "log_type_label": "관리자", "loggable_type": "Product", "loggable_type_display": "상품", "loggable_id": 101, "action": "product.updated", "action_label": "상품 수정", "localized_description": "'베이직 오버핏 코튼 티셔츠' 상품을 수정했습니다.", "description_key": "product.updated", "properties": null, "changes": [ { "field": "selling_price", "label": "판매가", "old": 29000, "new": 23200, "old_label": "29,000원", "new_label": "23,200원" }, { "field": "sales_status", "label": "판매상태", "old": "sold_out", "new": "on_sale", "old_label": "품절", "new_label": "판매중" } ], "bulk_changes": null, "has_changes": true, "actor_name": "관리자", "user": { "uuid": "admin-uuid-1", "name": "관리자", "email": "admin@example.com" }, "ip_address": "127.0.0.1", "created_at": "2026-05-28 09:15:00", "is_owner": false }, { "id": 2, "log_type": "admin", "log_type_label": "관리자", "loggable_type": "Product", "loggable_type_display": "상품", "loggable_id": 101, "action": "product.created", "action_label": "상품 등록", "localized_description": "'베이직 오버핏 코튼 티셔츠' 상품을 등록했습니다.", "description_key": "product.created", "properties": null, "changes": null, "bulk_changes": null, "has_changes": false, "actor_name": "운영자", "user": { "uuid": "admin-uuid-2", "name": "운영자", "email": "manager@example.com" }, "ip_address": "127.0.0.1", "created_at": "2026-05-20 14:30:00", "is_owner": false }, { "id": 3, "log_type": "admin", "log_type_label": "관리자", "loggable_type": "Product", "loggable_type_display": "상품", "loggable_id": 101, "action": "product.stock_adjusted", "action_label": "재고 조정", "localized_description": "재고를 조정했습니다.", "description_key": "product.stock_adjusted", "properties": null, "changes": [ { "field": "stock_quantity", "label": "재고수량", "old": 200, "new": 320, "old_label": "200", "new_label": "320" } ], "bulk_changes": null, "has_changes": true, "actor_name": "시스템", "user": { "name": "시스템" }, "ip_address": null, "created_at": "2026-05-25 03:00:00", "is_owner": false } ], "meta": { "current_page": 1, "last_page": 1, "per_page": 10, "total": 3 } } }, "settings": { "data": { "general": { "shop_name": "샘플 쇼핑몰", "currency": "KRW" }, "shipping": { "default_fee": 3000, "free_threshold": 50000 }, "inquiry": { "board_slug": "product-inquiry" }, "abilities": { "can_update": true } } }, "ecommerce_settings": { "data": { "basic_info": { "shop_name": "", "route_path": "shop", "no_route": false, "company_name": "", "business_number": "", "ceo_name": "", "business_type": "", "business_category": "", "zipcode": "", "base_address": "", "detail_address": "", "phone": "", "fax": "", "email": "", "privacy_officer": "", "privacy_officer_email": "", "mail_order_number": "", "telecom_number": "" }, "language_currency": { "default_language": "ko", "default_currency": "KRW", "currencies": [ { "code": "KRW", "name": { "ko": "KRW (원)", "en": "KRW (Won)", "ja": "KRW (ウォン)" }, "exchange_rate": null, "rounding_unit": "1", "rounding_method": "floor", "decimal_places": 0, "is_default": true }, { "code": "USD", "name": { "ko": "USD (달러)", "en": "USD (Dollar)", "ja": "USD (ドル)" }, "exchange_rate": 0.85, "rounding_unit": "0.01", "rounding_method": "round", "decimal_places": 2, "is_default": false }, { "code": "JPY", "name": { "ko": "JPY (엔)", "en": "JPY (Yen)", "ja": "JPY (円)" }, "exchange_rate": 115, "rounding_unit": "1", "rounding_method": "floor", "decimal_places": 0, "is_default": false }, { "code": "CNY", "name": { "ko": "CNY (위안)", "en": "CNY (Yuan)", "ja": "CNY (人民元)" }, "exchange_rate": 5.8, "rounding_unit": "0.01", "rounding_method": "round", "decimal_places": 2, "is_default": false }, { "code": "EUR", "name": { "ko": "EUR (유로)", "en": "EUR (Euro)", "ja": "EUR (ユーロ)" }, "exchange_rate": 0.78, "rounding_unit": "0.01", "rounding_method": "round", "decimal_places": 2, "is_default": false } ] }, "order_settings": { "default_pg_provider": null, "payment_methods": [ { "id": "card", "pg_provider": null, "sort_order": 1, "is_active": false, "min_order_amount": 0, "stock_deduction_timing": "payment_complete", "_cached_name": { "ko": "신용카드", "en": "Credit Card", "ja": "クレジットカード" }, "_cached_description": { "ko": "신용카드로 안전하게 결제", "en": "Pay securely with credit card", "ja": "クレジットカードで安全に決済" }, "_cached_icon": "credit-card", "_cached_source": "builtin" }, { "id": "vbank", "pg_provider": null, "sort_order": 2, "is_active": false, "min_order_amount": 0, "stock_deduction_timing": "payment_complete", "_cached_name": { "ko": "가상계좌", "en": "Virtual Account", "ja": "バーチャル口座" }, "_cached_description": { "ko": "가상계좌로 입금", "en": "Pay via virtual account", "ja": "バーチャル口座に入金" }, "_cached_icon": "money-check", "_cached_source": "builtin" }, { "id": "dbank", "pg_provider": null, "sort_order": 3, "is_active": true, "min_order_amount": 0, "stock_deduction_timing": "order_placed", "_cached_name": { "ko": "무통장입금", "en": "Bank Transfer", "ja": "銀行振込" }, "_cached_description": { "ko": "지정 계좌로 직접 입금", "en": "Direct bank transfer", "ja": "指定口座に直接入金" }, "_cached_icon": "building-columns", "_cached_source": "builtin" }, { "id": "bank", "pg_provider": null, "sort_order": 4, "is_active": false, "min_order_amount": 0, "stock_deduction_timing": "payment_complete", "_cached_name": { "ko": "계좌이체", "en": "Account Transfer", "ja": "口座振替" }, "_cached_description": { "ko": "실시간 계좌이체", "en": "Real-time bank transfer", "ja": "リアルタイム口座振替" }, "_cached_icon": "building-columns", "_cached_source": "builtin" }, { "id": "phone", "pg_provider": null, "sort_order": 5, "is_active": false, "min_order_amount": 0, "stock_deduction_timing": "payment_complete", "_cached_name": { "ko": "휴대폰결제", "en": "Mobile Payment", "ja": "携帯電話決済" }, "_cached_description": { "ko": "휴대폰 소액결제", "en": "Mobile phone payment", "ja": "携帯電話小額決済" }, "_cached_icon": "mobile-screen-button", "_cached_source": "builtin" }, { "id": "kginicis_samsung_pay", "pg_provider": null, "sort_order": 6, "is_active": false, "min_order_amount": 0, "stock_deduction_timing": "payment_complete", "_cached_name": { "ko": "삼성페이 (KG이니시스)", "en": "Samsung Pay (KG Inicis)" }, "_cached_description": { "ko": "삼성페이로 결제 — KG 이니시스를 통해 처리", "en": "Pay with Samsung Pay via KG Inicis" }, "_cached_icon": "mobile-screen-button", "_cached_source": "plugin:sirsoft-pay_kginicis" }, { "id": "kginicis_naverpay", "pg_provider": null, "sort_order": 7, "is_active": false, "min_order_amount": 0, "stock_deduction_timing": "payment_complete", "_cached_name": { "ko": "네이버페이 (KG이니시스)", "en": "Naver Pay (KG Inicis)" }, "_cached_description": { "ko": "네이버페이로 결제 — KG 이니시스를 통해 처리", "en": "Pay with Naver Pay via KG Inicis" }, "_cached_icon": "wallet", "_cached_source": "plugin:sirsoft-pay_kginicis" }, { "id": "kginicis_lpay", "pg_provider": null, "sort_order": 8, "is_active": false, "min_order_amount": 0, "stock_deduction_timing": "payment_complete", "_cached_name": { "ko": "L.pay (KG이니시스)", "en": "L.pay (KG Inicis)" }, "_cached_description": { "ko": "L.pay 로 결제 — KG 이니시스를 통해 처리", "en": "Pay with L.pay via KG Inicis" }, "_cached_icon": "mobile-screen-button", "_cached_source": "plugin:sirsoft-pay_kginicis" }, { "id": "kginicis_kakaopay", "pg_provider": null, "sort_order": 9, "is_active": false, "min_order_amount": 0, "stock_deduction_timing": "payment_complete", "_cached_name": { "ko": "카카오페이 (KG이니시스)", "en": "Kakao Pay (KG Inicis)" }, "_cached_description": { "ko": "카카오페이로 결제 — KG 이니시스를 통해 처리", "en": "Pay with Kakao Pay via KG Inicis" }, "_cached_icon": "mobile-screen-button", "_cached_source": "plugin:sirsoft-pay_kginicis" }, { "id": "kginicis_japan_paypay", "pg_provider": null, "sort_order": 10, "is_active": false, "min_order_amount": 0, "stock_deduction_timing": "payment_complete", "_cached_name": { "ko": "PayPay (일본 KG이니시스)", "en": "PayPay (KG Inicis Japan)" }, "_cached_description": { "ko": "일본 엔(JPY) 주문을 KG 이니시스 CBT PayPay로 결제", "en": "Pay JPY orders with KG Inicis CBT PayPay" }, "_cached_icon": "wallet", "_cached_source": "plugin:sirsoft-pay_kginicis" }, { "id": "point", "pg_provider": null, "sort_order": 10, "is_active": false, "min_order_amount": 0, "stock_deduction_timing": "order_placed", "_cached_name": { "ko": "포인트결제", "en": "Points", "ja": "ポイント決済" }, "_cached_description": { "ko": "적립 포인트로 결제", "en": "Pay with points", "ja": "積立ポイントで決済" }, "_cached_icon": "coins", "_cached_source": "builtin" }, { "id": "kginicis_japan_cvs", "pg_provider": null, "sort_order": 11, "is_active": false, "min_order_amount": 0, "stock_deduction_timing": "payment_complete", "_cached_name": { "ko": "일본 편의점결제 (KG이니시스)", "en": "Japan Convenience Store (KG Inicis)" }, "_cached_description": { "ko": "일본 엔(JPY) 주문을 KG 이니시스 CBT 편의점 결제로 접수", "en": "Accept JPY orders with KG Inicis CBT convenience store payment" }, "_cached_icon": "store", "_cached_source": "plugin:sirsoft-pay_kginicis" }, { "id": "deposit", "pg_provider": null, "sort_order": 11, "is_active": false, "min_order_amount": 0, "stock_deduction_timing": "order_placed", "_cached_name": { "ko": "예치금결제", "en": "Store Credit", "ja": "預金決済" }, "_cached_description": { "ko": "예치금으로 결제", "en": "Pay with store credit", "ja": "預金で決済" }, "_cached_icon": "wallet", "_cached_source": "builtin" }, { "id": "free", "pg_provider": null, "sort_order": 12, "is_active": false, "min_order_amount": 0, "stock_deduction_timing": "order_placed", "_cached_name": { "ko": "무료", "en": "Free", "ja": "無料" }, "_cached_description": { "ko": "결제 없이 주문 완료", "en": "Order without payment", "ja": "決済なしで注文完了" }, "_cached_icon": "gift", "_cached_source": "builtin" } ], "banks": [ { "code": "004", "name": { "ko": "국민은행", "en": "Kookmin Bank" } }, { "code": "088", "name": { "ko": "신한은행", "en": "Shinhan Bank" } }, { "code": "020", "name": { "ko": "우리은행", "en": "Woori Bank" } }, { "code": "081", "name": { "ko": "하나은행", "en": "Hana Bank" } }, { "code": "003", "name": { "ko": "IBK기업은행", "en": "IBK Industrial Bank" } }, { "code": "011", "name": { "ko": "NH농협은행", "en": "NH Nonghyup Bank" } }, { "code": "071", "name": { "ko": "우체국", "en": "Korea Post" } }, { "code": "031", "name": { "ko": "DGB대구은행", "en": "DGB Daegu Bank" } }, { "code": "032", "name": { "ko": "BNK부산은행", "en": "BNK Busan Bank" } }, { "code": "034", "name": { "ko": "광주은행", "en": "Kwangju Bank" } }, { "code": "035", "name": { "ko": "제주은행", "en": "Jeju Bank" } }, { "code": "037", "name": { "ko": "전북은행", "en": "Jeonbuk Bank" } }, { "code": "039", "name": { "ko": "BNK경남은행", "en": "BNK Kyongnam Bank" } }, { "code": "045", "name": { "ko": "새마을금고", "en": "MG Community Credit Cooperatives" } }, { "code": "048", "name": { "ko": "신협", "en": "KFCC" } }, { "code": "090", "name": { "ko": "카카오뱅크", "en": "Kakao Bank" } }, { "code": "092", "name": { "ko": "토스뱅크", "en": "Toss Bank" } } ], "bank_accounts": [ { "bank_code": "004", "account_number": "", "account_holder": "", "is_active": false, "is_default": false } ], "auto_cancel_expired": true, "auto_cancel_days": 3, "vbank_due_days": 3, "dbank_due_days": 7, "cart_expiry_days": 30, "stock_restore_on_cancel": true, "cancellable_statuses": [ "payment_complete" ], "confirmable_statuses": [ "shipping", "delivered" ] }, "shipping": { "default_country": "KR", "available_countries": [ { "code": "KR", "name": { "ko": "대한민국", "en": "South Korea", "ja": "大韓民国" }, "is_active": true }, { "code": "US", "name": { "ko": "미국", "en": "United States", "ja": "アメリカ" }, "is_active": false }, { "code": "JP", "name": { "ko": "일본", "en": "Japan", "ja": "日本" }, "is_active": false }, { "code": "CN", "name": { "ko": "중국", "en": "China", "ja": "中国" }, "is_active": false }, { "code": "SG", "name": { "ko": "싱가포르", "en": "Singapore", "ja": "シンガポール" }, "is_active": false }, { "code": "HK", "name": { "ko": "홍콩", "en": "Hong Kong", "ja": "香港" }, "is_active": false }, { "code": "TW", "name": { "ko": "대만", "en": "Taiwan", "ja": "台湾" }, "is_active": false }, { "code": "VN", "name": { "ko": "베트남", "en": "Vietnam", "ja": "ベトナム" }, "is_active": false }, { "code": "TH", "name": { "ko": "태국", "en": "Thailand", "ja": "タイ" }, "is_active": false }, { "code": "MY", "name": { "ko": "말레이시아", "en": "Malaysia", "ja": "マレーシア" }, "is_active": false } ], "international_shipping_enabled": false, "free_shipping_threshold": 50000, "free_shipping_enabled": true, "address_validation_enabled": false, "address_api_provider": "kakao", "carriers": [ { "id": 1, "code": "cj", "name": { "ko": "CJ대한통운", "en": "CJ Logistics", "ja": "CJ大韓通運" }, "type": "domestic", "tracking_url": "https://trace.cjlogistics.com/next/tracking.html?wblNo={tracking_number}", "is_active": true, "sort_order": 1 }, { "id": 2, "code": "hanjin", "name": { "ko": "한진택배", "en": "Hanjin Express", "ja": "韓進택배" }, "type": "domestic", "tracking_url": "https://www.hanjin.com/kor/CMS/DeliveryMgr/WaybillResult.do?wblnb={tracking_number}", "is_active": true, "sort_order": 2 }, { "id": 3, "code": "lotte", "name": { "ko": "롯데택배", "en": "Lotte Global Logistics", "ja": "ロッテ택배" }, "type": "domestic", "tracking_url": "https://www.lotteglogis.com/home/reservation/tracking/link498?InvNo={tracking_number}", "is_active": true, "sort_order": 3 }, { "id": 4, "code": "logen", "name": { "ko": "로젠택배", "en": "Logen Logistics", "ja": "ロジェン택배" }, "type": "domestic", "tracking_url": "https://www.ilogen.com/web/personal/trace/{tracking_number}", "is_active": true, "sort_order": 4 }, { "id": 5, "code": "ups", "name": { "ko": "UPS", "en": "UPS", "ja": "UPS" }, "type": "international", "tracking_url": "https://www.ups.com/track?tracknum={tracking_number}", "is_active": true, "sort_order": 5 }, { "id": 6, "code": "ems", "name": { "ko": "EMS", "en": "EMS", "ja": "EMS" }, "type": "international", "tracking_url": "https://service.epost.go.kr/trace.RetrieveEmsRi498.postal?POST_CODE={tracking_number}", "is_active": true, "sort_order": 6 }, { "id": 7, "code": "dhl", "name": { "ko": "DHL", "en": "DHL", "ja": "DHL" }, "type": "international", "tracking_url": "https://www.dhl.com/kr-ko/home/tracking/tracking-express.html?submit=1&tracking-id={tracking_number}", "is_active": true, "sort_order": 7 }, { "id": 8, "code": "fedex", "name": { "ko": "FedEx", "en": "FedEx", "ja": "FedEx" }, "type": "international", "tracking_url": "https://www.fedex.com/fedextrack/?tracknumbers={tracking_number}", "is_active": true, "sort_order": 8 }, { "id": 9, "code": "sf", "name": { "ko": "SF Express", "en": "SF Express", "ja": "SF Express" }, "type": "international", "tracking_url": null, "is_active": true, "sort_order": 9 }, { "id": 10, "code": "yamato", "name": { "ko": "야마토운수", "en": "Yamato Transport", "ja": "ヤマト運輸" }, "type": "international", "tracking_url": null, "is_active": true, "sort_order": 10 }, { "id": 11, "code": "sagawa", "name": { "ko": "사가와익스프레스", "en": "Sagawa Express", "ja": "佐川急便" }, "type": "international", "tracking_url": null, "is_active": true, "sort_order": 11 }, { "id": 12, "code": "other", "name": { "ko": "기타", "en": "Other", "ja": "その他" }, "type": "domestic", "tracking_url": null, "is_active": true, "sort_order": 99 } ], "types": [ { "id": 1, "code": "parcel", "name": { "ko": "택배", "en": "Parcel", "ja": "宅配便" }, "category": "domestic", "is_active": true, "sort_order": 1 }, { "id": 2, "code": "direct", "name": { "ko": "직접배송", "en": "Direct Delivery", "ja": "直送" }, "category": "domestic", "is_active": true, "sort_order": 2 }, { "id": 3, "code": "quick", "name": { "ko": "퀵서비스", "en": "Quick Service", "ja": "クイックサービス" }, "category": "domestic", "is_active": true, "sort_order": 3 }, { "id": 4, "code": "freight", "name": { "ko": "화물배송", "en": "Freight", "ja": "貨物配送" }, "category": "domestic", "is_active": true, "sort_order": 4 }, { "id": 5, "code": "pickup", "name": { "ko": "매장수령", "en": "Store Pickup", "ja": "店舗受取" }, "category": "domestic", "is_active": true, "sort_order": 5 }, { "id": 6, "code": "express", "name": { "ko": "국내특급", "en": "Express", "ja": "国内特急" }, "category": "domestic", "is_active": false, "sort_order": 6 }, { "id": 7, "code": "international_ems", "name": { "ko": "국제EMS", "en": "International EMS", "ja": "国際EMS" }, "category": "international", "is_active": false, "sort_order": 7 }, { "id": 8, "code": "international_standard", "name": { "ko": "국제일반", "en": "International Standard", "ja": "国際通常" }, "category": "international", "is_active": false, "sort_order": 8 }, { "id": 9, "code": "cvs", "name": { "ko": "편의점택배", "en": "Convenience Store", "ja": "コンビニ宅配便" }, "category": "other", "is_active": false, "sort_order": 9 }, { "id": 10, "code": "digital", "name": { "ko": "디지털상품", "en": "Digital", "ja": "デジタル商品" }, "category": "other", "is_active": false, "sort_order": 10 }, { "id": 11, "code": "custom", "name": { "ko": "직접입력", "en": "Custom", "ja": "直接入力" }, "category": "domestic", "is_active": true, "sort_order": 99 } ] }, "seo": { "meta_category_title": "{commerce_name} - {category_name}", "meta_category_description": "", "meta_search_title": "{commerce_name} - {keyword_name}", "meta_search_description": "", "meta_product_title": "{commerce_name} - {product_name}", "meta_product_description": "", "meta_shop_index_title": "{commerce_name}", "meta_shop_index_description": "", "seo_category": true, "seo_search_result": true, "seo_product_detail": true, "seo_shop_index": true }, "review_settings": { "write_deadline_days": 90, "max_images": 5, "max_image_size_mb": 10 }, "inquiry": { "board_slug": null }, "notifications": { "channels": [ { "id": "mail", "is_active": true, "sort_order": 1 }, { "id": "database", "is_active": true, "sort_order": 2 } ] }, "claim": { "refund_reasons": [ { "id": 1, "type": "refund", "code": "order_mistake", "name": { "ko": "주문 실수", "en": "Order Mistake", "ja": "注文ミス" }, "localized_name": "주문 실수", "fault_type": "customer", "is_user_selectable": true, "is_active": true, "sort_order": 0 }, { "id": 2, "type": "refund", "code": "changed_mind", "name": { "ko": "단순 변심", "en": "Changed Mind", "ja": "単純な心変わり" }, "localized_name": "단순 변심", "fault_type": "customer", "is_user_selectable": true, "is_active": true, "sort_order": 1 }, { "id": 3, "type": "refund", "code": "reorder_other", "name": { "ko": "다른 상품으로 재주문", "en": "Reorder with Different Product", "ja": "別の商品で再注文" }, "localized_name": "다른 상품으로 재주문", "fault_type": "customer", "is_user_selectable": true, "is_active": true, "sort_order": 2 }, { "id": 4, "type": "refund", "code": "delayed_delivery", "name": { "ko": "배송 지연", "en": "Delayed Delivery", "ja": "配送遅延" }, "localized_name": "배송 지연", "fault_type": "seller", "is_user_selectable": true, "is_active": true, "sort_order": 3 }, { "id": 5, "type": "refund", "code": "product_info_different", "name": { "ko": "상품 정보 상이", "en": "Product Info Different", "ja": "商品情報の相違" }, "localized_name": "상품 정보 상이", "fault_type": "seller", "is_user_selectable": true, "is_active": true, "sort_order": 4 }, { "id": 6, "type": "refund", "code": "admin_cancel", "name": { "ko": "관리자 취소", "en": "Admin Cancel", "ja": "管理者キャンセル" }, "localized_name": "관리자 취소", "fault_type": "seller", "is_user_selectable": false, "is_active": true, "sort_order": 5 }, { "id": 7, "type": "refund", "code": "etc", "name": { "ko": "기타", "en": "Etc", "ja": "その他" }, "localized_name": "기타", "fault_type": "customer", "is_user_selectable": true, "is_active": true, "sort_order": 6 } ] }, "available_pg_providers": [ { "id": "kginicis", "name": "KG 이니시스", "icon": "credit-card", "supported_methods": [ "card", "bank_transfer", "virtual_account", "mobile" ] } ], "abilities": { "can_update": true } } }, "seoStats": { "data": { "count": 0, "size_bytes": 0, "size_formatted": "0 B" } }, "copy_source": { "data": { "id": 102, "name": { "ko": "데일리 와이드 슬랙스", "en": "Daily Wide Slacks" }, "product_code": "PT-2042", "selling_price": 39000, "thumbnail_url": "/images/placeholder.png", "images": [ { "id": 5101, "hash": "img5101", "original_filename": "slacks_main.jpg", "download_url": "/images/placeholder.png", "alt_text": "정면", "is_thumbnail": true, "sort_order": 0, "order": 0, "width": 1000, "height": 1000, "file_size": 172000, "size": 172000, "size_formatted": "168 KB", "mime_type": "image/jpeg", "is_image": true }, { "id": 5102, "hash": "img5102", "original_filename": "slacks_detail.jpg", "download_url": "/images/placeholder.png", "alt_text": "디테일", "is_thumbnail": false, "sort_order": 1, "order": 1, "width": 1000, "height": 1000, "file_size": 165000, "size": 165000, "size_formatted": "161 KB", "mime_type": "image/jpeg", "is_image": true } ] } }, "refundReasons": { "data": [ { "id": 1, "reason": "단순 변심", "code": "change_mind" }, { "id": 2, "reason": "상품 불량", "code": "defective" } ] }, "availableChannels": { "data": { "channels": [ { "id": "mail", "name": "이메일", "icon": "fas fa-envelope", "source": "core", "source_label": "코어" }, { "id": "sms", "name": "SMS", "icon": "fas fa-comment-sms", "source": "core", "source_label": "코어" }, { "id": "push", "name": "푸시", "icon": "fas fa-bell", "source": "core", "source_label": "코어" } ] } }, "identityProviders": { "data": [ { "id": "kginicis", "label": "KG이니시스" }, { "id": "nice", "label": "나이스" } ] }, "ecommerceIdentityPurposes": { "data": [ { "id": "signup", "label": "회원가입", "source_identifier": "sirsoft-ecommerce", "description": "회원가입 시 본인인증", "allowed_channels": [ "mobile" ] }, { "id": "sensitive_action", "label": "민감 작업", "source_identifier": "core", "description": "민감 작업 시 본인인증", "allowed_channels": [ "mobile", "ipin" ] } ] }, "ecommerceIdentityPolicies": { "data": { "data": [ { "id": 1, "key": "shop.signup", "scope": "route", "target": "/shop/signup", "purpose": "signup", "provider_id": "kginicis", "grace_minutes": 0, "enabled": true, "source_type": "admin", "abilities": { "can_update": true, "can_delete": true } } ], "meta": { "total": 1, "current_page": 1, "last_page": 1, "per_page": 20 }, "abilities": { "can_create": true } } }, "ecommerceNotificationDefinitions": { "data": { "data": [ { "id": 1, "type": "order.paid", "is_active": true, "is_default": true, "variables": [ { "key": "order_no" } ], "templates": [ { "id": 11, "channel": "mail", "is_active": true, "is_default": true, "subject": { "ko": "결제 완료 안내", "en": "Payment completed" }, "body": { "ko": "결제가 완료되었습니다.
", "en": "Payment completed.
" }, "recipients": [ { "type": "trigger_user" } ] } ] } ], "pagination": { "total": 1, "current_page": 1, "last_page": 1 }, "abilities": { "can_update": true } } }, "roles": { "data": { "data": [ { "id": 1, "identifier": "super_admin", "name": "최고 관리자", "display_name": "최고 관리자", "description": "전체 권한", "is_system": true }, { "id": 2, "identifier": "manager", "name": "운영자", "display_name": "운영자", "description": "운영 권한", "is_system": false }, { "id": 3, "identifier": "member", "name": "일반 회원", "display_name": "일반 회원", "description": "기본 회원", "is_system": true } ] } }, "category": { "data": { "breadcrumb": [ "샘플" ], "children": [ "샘플" ], "description": "샘플 설명입니다.
", "description_localized": "샘플 description_localized", "images": [ "샘플" ], "name": "샘플 name", "name_localized": "샘플 name_localized" } }, "qna": { "data": { "items": [ "샘플" ], "meta": { "abilities": { "can_delete": true, "can_update": true }, "board_settings": "샘플", "current_page": 3, "last_page": 3, "total": 10000 } } }, "productDownloadableCoupons": { "data": { "data": "샘플" } }, "cartItems": { "data": { "calculation": { "items": [ "샘플" ], "summary": { "base_shipping_total": 10000, "code_discount": 10000, "discount_formatted": "10,000원", "extra_shipping_total": 10000, "final_amount_formatted": "10,000원", "mileage_formatted": "10,000원", "multi_currency": "샘플", "order_coupon_discount": 10000, "payment_amount_formatted": "10,000원", "points_earning": 10000, "product_coupon_discount": 10000, "shipping_discount": 10000, "shipping_fee_formatted": "10,000원", "subtotal_formatted": "10,000원", "tax_free_amount": 10000, "taxable_amount": 10000, "total_discount": 10000, "total_shipping": 10000 } }, "item_count": 3, "items": [ "샘플" ] } }, "checkoutData": { "data": { "available_coupons": [ "샘플" ], "calculation": { "items": [ "샘플" ], "promotions": { "order_promotions": { "coupons": [ "샘플" ] }, "product_promotions": { "coupons": [ "샘플" ] } }, "summary": { "base_shipping_total": 10000, "code_discount": 10000, "code_discount_formatted": "10,000원", "extra_shipping_total": 10000, "final_amount": 10000, "final_amount_formatted": "10,000원", "mileage_formatted": "10,000원", "multi_currency": "샘플", "order_coupon_discount": 10000, "order_coupon_discount_formatted": "10,000원", "payment_amount_formatted": "10,000원", "points_earning": 10000, "points_used": 10000, "points_used_formatted": "10,000원", "product_coupon_discount": 10000, "shipping_discount": 10000, "shipping_discount_formatted": "10,000원", "subtotal_formatted": "10,000원", "tax_free_amount": 10000, "taxable_amount": 10000, "total_discount": 10000, "total_discount_formatted": "10,000원", "total_shipping": 10000, "total_shipping_formatted": "10,000원" } }, "items": [ "샘플" ], "mileage": { "balance": 10000, "balance_formatted": "10,000원", "max_usable": "샘플", "max_usable_formatted": "10,000원" }, "temp_order_id": 1 } }, "userAddresses": { "data": { "addresses": { "data": "샘플" } } }, "paymentSettings": { "data": { "order_settings": { "bank_accounts": [ "샘플" ], "dbank_due_days": 3, "payment_methods": "샘플", "vbank_due_days": 3 } } }, "orderData": { "data": { "mc_subtotal_amount": 10000, "mc_total_amount": 10000, "mc_total_discount_amount": 10000, "mc_total_shipping_amount": 10000, "options": [ "샘플" ], "order_number": 3, "payment": { "dbank_account": "샘플", "dbank_holder": "샘플 dbank_holder", "dbank_name": "샘플 dbank_name", "deposit_due_at_formatted": "10,000원", "depositor_name": "샘플 depositor_name", "payment_method": "card", "vbank_due_at": "2026-05-24 09:32:38", "vbank_holder": "샘플 vbank_holder", "vbank_name": "샘플 vbank_name", "vbank_number": 3 }, "shipping_address": { "address": "샘플 address", "address_detail": "샘플 address_detail", "city": "샘플", "recipient_country_code": "KR", "recipient_name": "샘플 recipient_name", "recipient_phone": "010-1234-5678", "state": "sample", "zipcode": "sample" }, "subtotal_amount_formatted": "10,000원", "total_amount_formatted": "10,000원", "total_discount_amount": 10000, "total_discount_amount_formatted": "10,000원", "total_shipping_amount": 10000, "total_shipping_amount_formatted": "10,000원" } }, "wishlist": { "data": { "data": [ "샘플" ], "pagination": { "current_page": 3, "last_page": 3, "total": 10000 } } }, "addresses": { "data": { "addresses": { "data": "샘플" } } }, "myInquiries": { "data": { "items": [ "샘플" ], "meta": { "board_settings": "샘플", "current_page": 3, "last_page": 3, "total": 10000 } } }, "board_list_for_inquiry": { "data": { "data": [ { "id": 1, "name": "공지사항", "slug": "notice", "is_active": true, "type": "basic", "description": "공지사항 게시판입니다.", "per_page": 20, "per_page_mobile": 15, "order_by": "created_at", "order_direction": "DESC", "categories": [], "show_view_count": true, "secret_mode": "disabled", "use_comment": true, "use_reply": true, "max_reply_depth": 5, "use_report": false, "comment_order": "ASC", "max_comment_depth": 10, "min_title_length": 2, "max_title_length": 200, "min_content_length": 2, "max_content_length": 10000, "min_comment_length": 2, "max_comment_length": 1000, "blocked_keywords": [], "use_file_upload": false, "max_file_size": 10, "max_file_count": 5, "allowed_extensions": [ "jpg", "jpeg", "png", "gif", "webp", "pdf", "doc", "docx", "xls", "xlsx", "ppt", "pptx", "hwp", "txt", "zip" ], "new_display_hours": 24, "board_managers": [ { "uuid": "00000000-0000-4000-8000-000000000001", "name": "관리자", "email": "admin@example.com" } ], "board_steps": [], "board_manager_ids": [ "00000000-0000-4000-8000-000000000001" ], "board_step_ids": [], "notify_author": true, "notify_admin_on_post": true, "created_at": "2026-05-26 02:41:23", "updated_at": "2026-05-26 02:41:23", "permissions": null, "category_post_counts": null, "posts_count": 0, "user_abilities": null, "abilities": { "can_create": true, "can_update": true, "can_delete": true } } ], "pagination": { "current_page": 1, "last_page": 1, "per_page": 20, "total": 1, "from": 1, "to": 1, "has_more_pages": false }, "abilities": { "can_create": true, "can_update": true, "can_delete": true } } }, "notifications": { "channels": [ { "key": "email", "label": "이메일", "enabled": true }, { "key": "push", "label": "푸시", "enabled": true } ], "data": { "data": [ { "id": 1, "type": "comment", "title": "샘플 알림", "message": "샘플 알림 내용입니다.", "is_read": false, "created_at": "2026-05-24 09:32:38", "link": "/" } ], "pagination": { "current_page": 1, "last_page": 1, "total": 1, "has_more_pages": false }, "unread_count": 2 } }, "mileage_balance": { "data": { "mileage": { "available": 50000, "pending": 10000, "total_earned": 150000, "expiring_soon": 5000, "enabled": true } } }, "mileage_history": { "data": { "data": [ { "id": 1001, "user_id": 100, "currency": "KRW", "type": "earn", "type_label": "적립", "admin_badge_group": null, "user_display_category": "주문 완료", "amount": 5000.0, "amount_formatted": "5,000", "remaining_amount": 5000.0, "remaining_amount_formatted": "5,000", "balance_after": 55000.0, "order_id": null, "order_option_id": null, "order_cancel_id": null, "source_transaction_id": null, "granted_by": null, "granted_by_name": null, "granted_by_uuid": null, "user_name": "홍길동", "user_uuid": "u-1001", "order_number": "20260601-0042", "description": "Order reward", "memo": null, "expires_at": "2027-06-01T00:00:00+09:00", "expires_at_formatted": "Jun 1, 2027 12:00 AM", "expires_at_date": "2027-06-01", "expired_at": null, "expired_at_formatted": null, "created_at": "2026-06-01T14:30:00+09:00", "created_at_formatted": "Jun 1, 2026 2:30 PM", "created_at_date": "2026-06-01", "is_earning": true, "can_edit_expiry": true, "expired_amount": 0.0, "expired_amount_formatted": "0", "expiry_state": "active", "abilities": { "can_manage": false } }, { "id": 1002, "user_id": 100, "currency": "KRW", "type": "use", "type_label": "사용", "admin_badge_group": null, "user_display_category": "주문", "amount": -3000.0, "amount_formatted": "-3,000", "remaining_amount": 0.0, "remaining_amount_formatted": "0", "balance_after": 52000.0, "order_id": null, "order_option_id": null, "order_cancel_id": null, "source_transaction_id": null, "granted_by": null, "granted_by_name": null, "granted_by_uuid": null, "user_name": "홍길동", "user_uuid": "u-1001", "order_number": "20260530-0118", "description": null, "memo": null, "expires_at": null, "expires_at_formatted": null, "expires_at_date": null, "expired_at": null, "expired_at_formatted": null, "created_at": "2026-05-30T13:05:00+09:00", "created_at_formatted": "May 30, 2026 1:05 PM", "created_at_date": "2026-05-30", "is_earning": false, "can_edit_expiry": false, "expired_amount": 0.0, "expired_amount_formatted": "0", "expiry_state": "active", "abilities": { "can_manage": false } } ], "abilities": { "can_manage": false }, "currencies": [ "KRW" ], "pagination": { "current_page": 1, "last_page": 1, "per_page": 20, "total": 2, "from": 1, "to": 2, "has_more_pages": false } } }, "reviewSettings": { "data": { "review_settings": { "max_images": 5, "max_image_size_mb": 10, "write_deadline_days": 30 } } }, "transactions": { "data": { "data": [ { "id": 2001, "user_id": 100, "currency": "KRW", "type": "earn", "type_label": "적립", "admin_badge_group": null, "user_display_category": "수동 지급", "amount": 10000.0, "amount_formatted": "10,000", "remaining_amount": 10000.0, "remaining_amount_formatted": "10,000", "balance_after": 65000.0, "order_id": null, "order_option_id": null, "order_cancel_id": null, "source_transaction_id": null, "granted_by": 1, "granted_by_name": "관리자", "granted_by_uuid": "admin-uuid-1", "user_name": "홍길동", "user_uuid": "u-1001", "order_number": null, "description": "Admin earn", "memo": "이벤트 보상", "expires_at": "2027-06-21T00:00:00+09:00", "expires_at_formatted": "Jun 21, 2027 12:00 AM", "expires_at_date": "2027-06-21", "expired_at": null, "expired_at_formatted": null, "created_at": "2026-06-20T10:00:00+09:00", "created_at_formatted": "Jun 20, 2026 10:00 AM", "created_at_date": "2026-06-20", "is_earning": true, "can_edit_expiry": true, "expired_amount": 0.0, "expired_amount_formatted": "0", "expiry_state": "active", "abilities": { "can_manage": true } }, { "id": 2002, "user_id": 101, "currency": "KRW", "type": "deduct", "type_label": "차감", "admin_badge_group": null, "user_display_category": "수동 차감", "amount": -5000.0, "amount_formatted": "-5,000", "remaining_amount": 0.0, "remaining_amount_formatted": "0", "balance_after": 45000.0, "order_id": null, "order_option_id": null, "order_cancel_id": null, "source_transaction_id": null, "granted_by": 1, "granted_by_name": "관리자", "granted_by_uuid": "admin-uuid-1", "user_name": "김영희", "user_uuid": "u-1002", "order_number": null, "description": null, "memo": "잘못된 적립 차감", "expires_at": null, "expires_at_formatted": null, "expires_at_date": null, "expired_at": null, "expired_at_formatted": null, "created_at": "2026-06-19T15:30:00+09:00", "created_at_formatted": "Jun 19, 2026 3:30 PM", "created_at_date": "2026-06-19", "is_earning": false, "can_edit_expiry": false, "expired_amount": 0.0, "expired_amount_formatted": "0", "expiry_state": "active", "abilities": { "can_manage": true } } ], "abilities": { "can_manage": true }, "currencies": [ "KRW" ], "pagination": { "current_page": 1, "last_page": 1, "per_page": 20, "total": 2, "from": 1, "to": 2, "has_more_pages": false } } } }, "byEndpointPattern": { "/api/modules/sirsoft-ecommerce/products*": { "data": { "data": [ { "id": 1, "name": "샘플 상품 1", "price": 29000, "sale_price": 24000, "thumbnail": null, "stock_status": "in_stock", "rating": 4.5 }, { "id": 2, "name": "샘플 상품 2", "price": 15000, "sale_price": null, "thumbnail": null, "stock_status": "in_stock", "rating": 4 }, { "id": 3, "name": "샘플 상품 3 (품절)", "price": 42000, "sale_price": null, "thumbnail": null, "stock_status": "out_of_stock", "rating": 3.5 } ], "meta": { "total": 3, "per_page": 20, "current_page": 1 } } }, "/api/modules/sirsoft-ecommerce/cart*": { "data": { "items": [ { "product_id": 1, "name": "샘플 상품 1", "thumbnail": null, "price": 24000, "quantity": 2, "options": "블랙" }, { "product_id": 2, "name": "샘플 상품 2", "thumbnail": null, "price": 15000, "quantity": 1, "options": null } ], "total": 63000, "discount": 0, "shipping_fee": 3000 } }, "/api/modules/sirsoft-ecommerce/checkout*": { "data": { "items": [ { "product_id": 1, "name": "샘플 상품 1", "price": 24000, "quantity": 2 } ], "addresses": [ { "id": 1, "recipient": "샘플 수령인", "address": "서울시 샘플구 샘플로 1", "is_default": true } ], "payment_methods": [ { "code": "card", "name": "신용카드" }, { "code": "vbank", "name": "무통장입금" } ], "coupons": [], "points": 1250 } }, "/api/modules/sirsoft-ecommerce/wishlist*": { "data": { "data": [ { "id": 1, "name": "샘플 찜 상품 1", "price": 29000, "thumbnail": null, "stock_status": "in_stock" }, { "id": 2, "name": "샘플 찜 상품 2", "price": 15000, "thumbnail": null, "stock_status": "in_stock" } ], "meta": { "total": 2, "per_page": 20, "current_page": 1 } } }, "/api/modules/sirsoft-ecommerce/user/orders*": { "data": { "data": [ { "id": 1, "order_no": "20260529-0001", "created_at": "2026-05-29", "status": "paid", "total": 48000, "first_item_name": "샘플 상품 1", "item_count": 2 } ], "meta": { "total": 1, "per_page": 20, "current_page": 1 } } }, "/api/modules/sirsoft-ecommerce/user/addresses*": { "data": [ { "id": 1, "recipient": "샘플 수령인", "phone": "010-0000-0000", "zip": "00000", "address": "서울시 샘플구 샘플로 1", "detail": "101동 101호", "is_default": true, "label": "집" } ] }, "/api/modules/sirsoft-ecommerce/user/inquiries*": { "data": { "data": [ { "id": 1, "product": { "id": 1, "name": "샘플 상품 1" }, "title": "배송 문의", "body": "언제 배송되나요?", "answer": "내일 발송 예정입니다.", "created_at": "2026-05-25", "status": "answered" } ], "meta": { "total": 1, "per_page": 20, "current_page": 1 } } } } }, "states": { "comment": "이커머스 도메인 변종. 사용자 shop/* 라우트(템플릿 sirsoft-basic 소속이나 코어 concat 으로 일원화)와 관리자 라우트(*/admin/ecommerce/*) 변종을 모두 포함한다. shop/* scope.match 는 편집기가 동적 path 를 'shop' 으로 평가한 selectedRoute.path 와 일치한다(Chrome MCP 실측).", "groups": [ { "comment": "shop/show — product.data.sales_status 값(on_sale/sold_out/suspended/coming_soon)으로 판매 상태 배지·버튼을 if 분기한다(본문 line 388/406). 재고는 stock 으로 분기.", "scope": { "kind": "route", "match": "/shop/products/:id" }, "items": [ { "id": "in_stock", "label": "$t:editor.state.in_stock", "default": true }, { "id": "out_of_stock", "label": "$t:editor.state.out_of_stock", "sampleDataOverrides": { "byEndpointPattern": { "/api/modules/sirsoft-ecommerce/products/*": { "data": { "id": 101, "name": { "ko": "베이직 오버핏 코튼 티셔츠", "en": "Basic Overfit Cotton T-Shirt" }, "name_localized": "베이직 오버핏 코튼 티셔츠", "product_code": "TS-1001", "sku": "TS-1001-BLK", "categories": [ { "id": 1, "name": { "ko": "패션의류", "en": "Fashion" }, "name_localized": "패션의류", "breadcrumb": "패션의류", "path": "1", "is_primary": false }, { "id": 11, "name": { "ko": "상의", "en": "Tops" }, "name_localized": "상의", "breadcrumb": "패션의류 > 상의", "path": "1/11", "is_primary": true } ], "category_name": "상의", "list_price": 29000, "list_price_formatted": "29,000원", "selling_price": 23200, "selling_price_formatted": "23,200원", "discount_rate": 20, "multi_currency_list_price": { "KRW": { "price": 29000, "formatted": "29,000원", "is_default": true, "editable": true }, "USD": { "price": 22.31, "formatted": "$22.31", "is_default": false, "editable": false, "exchange_rate": 1300 } }, "multi_currency_selling_price": { "KRW": { "price": 23200, "formatted": "23,200원", "is_default": true, "editable": true }, "USD": { "price": 17.85, "formatted": "$17.85", "is_default": false, "editable": false, "exchange_rate": 1300 } }, "stock_quantity": 0, "min_purchase_qty": 1, "max_purchase_qty": 10, "sales_status": "on_sale", "sales_status_label": "판매중", "brand_name": "코지홈", "labels": [ { "name": "BEST", "color": "#ef4444" }, { "name": "한정특가", "color": "#f59e0b" } ], "additional_options": [ { "id": 9001, "name": "이니셜 자수 추가", "is_required": false }, { "id": 9002, "name": "선물 포장", "is_required": false } ], "shipping_policy_id": 1, "free_shipping": false, "shipping_fee_formatted": "3,000원 (50,000원 이상 무료)", "shipping_policy": { "name": "기본 배송정책", "charge_policy": "conditional_free", "charge_policy_label": "조건부 무료", "base_fee": 3000, "base_fee_formatted": "3,000원", "free_threshold": 50000, "free_threshold_formatted": "50,000원", "fee_summary": "3,000원 (50,000원 이상 무료배송)" }, "short_description": "사계절 입기 좋은 오버핏 기본 티셔츠", "short_description_localized": "사계절 입기 좋은 오버핏 기본 티셔츠", "description": { "ko": "부드러운 30수 코튼 소재로 제작된 데일리 오버핏 티셔츠입니다.
" }, "description_localized": "부드러운 30수 코튼 100% 소재로 제작되어 사계절 내내 편안하게 착용할 수 있습니다. 오버핏 실루엣으로 체형 커버에 탁월하며, 어떤 하의와도 자연스럽게 매치됩니다.

주문 후 영업일 기준 1~2일 내 출고됩니다. 단순 변심 교환·반품은 수령 후 7일 이내 가능하며, 왕복 배송비가 부과됩니다.
", "content_mode": "html" }, "is_wishlisted": false } } } } }, { "id": "sold_out", "label": "$t:editor.state.sold_out", "sampleDataOverrides": { "byEndpointPattern": { "/api/modules/sirsoft-ecommerce/products/*": { "data": { "id": 101, "name": { "ko": "베이직 오버핏 코튼 티셔츠", "en": "Basic Overfit Cotton T-Shirt" }, "name_localized": "베이직 오버핏 코튼 티셔츠", "product_code": "TS-1001", "sku": "TS-1001-BLK", "categories": [ { "id": 1, "name": { "ko": "패션의류", "en": "Fashion" }, "name_localized": "패션의류", "breadcrumb": "패션의류", "path": "1", "is_primary": false }, { "id": 11, "name": { "ko": "상의", "en": "Tops" }, "name_localized": "상의", "breadcrumb": "패션의류 > 상의", "path": "1/11", "is_primary": true } ], "category_name": "상의", "list_price": 29000, "list_price_formatted": "29,000원", "selling_price": 23200, "selling_price_formatted": "23,200원", "discount_rate": 20, "multi_currency_list_price": { "KRW": { "price": 29000, "formatted": "29,000원", "is_default": true, "editable": true }, "USD": { "price": 22.31, "formatted": "$22.31", "is_default": false, "editable": false, "exchange_rate": 1300 } }, "multi_currency_selling_price": { "KRW": { "price": 23200, "formatted": "23,200원", "is_default": true, "editable": true }, "USD": { "price": 17.85, "formatted": "$17.85", "is_default": false, "editable": false, "exchange_rate": 1300 } }, "stock_quantity": 0, "min_purchase_qty": 1, "max_purchase_qty": 10, "sales_status": "sold_out", "sales_status_label": "품절", "brand_name": "코지홈", "labels": [ { "name": "BEST", "color": "#ef4444" }, { "name": "한정특가", "color": "#f59e0b" } ], "additional_options": [ { "id": 9001, "name": "이니셜 자수 추가", "is_required": false }, { "id": 9002, "name": "선물 포장", "is_required": false } ], "shipping_policy_id": 1, "free_shipping": false, "shipping_fee_formatted": "3,000원 (50,000원 이상 무료)", "shipping_policy": { "name": "기본 배송정책", "charge_policy": "conditional_free", "charge_policy_label": "조건부 무료", "base_fee": 3000, "base_fee_formatted": "3,000원", "free_threshold": 50000, "free_threshold_formatted": "50,000원", "fee_summary": "3,000원 (50,000원 이상 무료배송)" }, "short_description": "사계절 입기 좋은 오버핏 기본 티셔츠", "short_description_localized": "사계절 입기 좋은 오버핏 기본 티셔츠", "description": { "ko": "부드러운 30수 코튼 소재로 제작된 데일리 오버핏 티셔츠입니다.
" }, "description_localized": "부드러운 30수 코튼 100% 소재로 제작되어 사계절 내내 편안하게 착용할 수 있습니다. 오버핏 실루엣으로 체형 커버에 탁월하며, 어떤 하의와도 자연스럽게 매치됩니다.

주문 후 영업일 기준 1~2일 내 출고됩니다. 단순 변심 교환·반품은 수령 후 7일 이내 가능하며, 왕복 배송비가 부과됩니다.
", "content_mode": "html" }, "is_wishlisted": false } } } } }, { "id": "suspended", "label": "$t:editor.state.suspended", "sampleDataOverrides": { "byEndpointPattern": { "/api/modules/sirsoft-ecommerce/products/*": { "data": { "id": 101, "name": { "ko": "베이직 오버핏 코튼 티셔츠", "en": "Basic Overfit Cotton T-Shirt" }, "name_localized": "베이직 오버핏 코튼 티셔츠", "product_code": "TS-1001", "sku": "TS-1001-BLK", "categories": [ { "id": 1, "name": { "ko": "패션의류", "en": "Fashion" }, "name_localized": "패션의류", "breadcrumb": "패션의류", "path": "1", "is_primary": false }, { "id": 11, "name": { "ko": "상의", "en": "Tops" }, "name_localized": "상의", "breadcrumb": "패션의류 > 상의", "path": "1/11", "is_primary": true } ], "category_name": "상의", "list_price": 29000, "list_price_formatted": "29,000원", "selling_price": 23200, "selling_price_formatted": "23,200원", "discount_rate": 20, "multi_currency_list_price": { "KRW": { "price": 29000, "formatted": "29,000원", "is_default": true, "editable": true }, "USD": { "price": 22.31, "formatted": "$22.31", "is_default": false, "editable": false, "exchange_rate": 1300 } }, "multi_currency_selling_price": { "KRW": { "price": 23200, "formatted": "23,200원", "is_default": true, "editable": true }, "USD": { "price": 17.85, "formatted": "$17.85", "is_default": false, "editable": false, "exchange_rate": 1300 } }, "stock_quantity": 320, "min_purchase_qty": 1, "max_purchase_qty": 10, "sales_status": "suspended", "sales_status_label": "판매중지", "brand_name": "코지홈", "labels": [ { "name": "BEST", "color": "#ef4444" }, { "name": "한정특가", "color": "#f59e0b" } ], "additional_options": [ { "id": 9001, "name": "이니셜 자수 추가", "is_required": false }, { "id": 9002, "name": "선물 포장", "is_required": false } ], "shipping_policy_id": 1, "free_shipping": false, "shipping_fee_formatted": "3,000원 (50,000원 이상 무료)", "shipping_policy": { "name": "기본 배송정책", "charge_policy": "conditional_free", "charge_policy_label": "조건부 무료", "base_fee": 3000, "base_fee_formatted": "3,000원", "free_threshold": 50000, "free_threshold_formatted": "50,000원", "fee_summary": "3,000원 (50,000원 이상 무료배송)" }, "short_description": "사계절 입기 좋은 오버핏 기본 티셔츠", "short_description_localized": "사계절 입기 좋은 오버핏 기본 티셔츠", "description": { "ko": "부드러운 30수 코튼 소재로 제작된 데일리 오버핏 티셔츠입니다.
" }, "description_localized": "부드러운 30수 코튼 100% 소재로 제작되어 사계절 내내 편안하게 착용할 수 있습니다. 오버핏 실루엣으로 체형 커버에 탁월하며, 어떤 하의와도 자연스럽게 매치됩니다.

주문 후 영업일 기준 1~2일 내 출고됩니다. 단순 변심 교환·반품은 수령 후 7일 이내 가능하며, 왕복 배송비가 부과됩니다.
", "content_mode": "html" }, "is_wishlisted": false } } } } }, { "id": "coming_soon", "label": "$t:editor.state.coming_soon", "sampleDataOverrides": { "byEndpointPattern": { "/api/modules/sirsoft-ecommerce/products/*": { "data": { "id": 101, "name": { "ko": "베이직 오버핏 코튼 티셔츠", "en": "Basic Overfit Cotton T-Shirt" }, "name_localized": "베이직 오버핏 코튼 티셔츠", "product_code": "TS-1001", "sku": "TS-1001-BLK", "categories": [ { "id": 1, "name": { "ko": "패션의류", "en": "Fashion" }, "name_localized": "패션의류", "breadcrumb": "패션의류", "path": "1", "is_primary": false }, { "id": 11, "name": { "ko": "상의", "en": "Tops" }, "name_localized": "상의", "breadcrumb": "패션의류 > 상의", "path": "1/11", "is_primary": true } ], "category_name": "상의", "list_price": 29000, "list_price_formatted": "29,000원", "selling_price": 23200, "selling_price_formatted": "23,200원", "discount_rate": 20, "multi_currency_list_price": { "KRW": { "price": 29000, "formatted": "29,000원", "is_default": true, "editable": true }, "USD": { "price": 22.31, "formatted": "$22.31", "is_default": false, "editable": false, "exchange_rate": 1300 } }, "multi_currency_selling_price": { "KRW": { "price": 23200, "formatted": "23,200원", "is_default": true, "editable": true }, "USD": { "price": 17.85, "formatted": "$17.85", "is_default": false, "editable": false, "exchange_rate": 1300 } }, "stock_quantity": 320, "min_purchase_qty": 1, "max_purchase_qty": 10, "sales_status": "coming_soon", "sales_status_label": "판매예정", "brand_name": "코지홈", "labels": [ { "name": "BEST", "color": "#ef4444" }, { "name": "한정특가", "color": "#f59e0b" } ], "additional_options": [ { "id": 9001, "name": "이니셜 자수 추가", "is_required": false }, { "id": 9002, "name": "선물 포장", "is_required": false } ], "shipping_policy_id": 1, "free_shipping": false, "shipping_fee_formatted": "3,000원 (50,000원 이상 무료)", "shipping_policy": { "name": "기본 배송정책", "charge_policy": "conditional_free", "charge_policy_label": "조건부 무료", "base_fee": 3000, "base_fee_formatted": "3,000원", "free_threshold": 50000, "free_threshold_formatted": "50,000원", "fee_summary": "3,000원 (50,000원 이상 무료배송)" }, "short_description": "사계절 입기 좋은 오버핏 기본 티셔츠", "short_description_localized": "사계절 입기 좋은 오버핏 기본 티셔츠", "description": { "ko": "부드러운 30수 코튼 소재로 제작된 데일리 오버핏 티셔츠입니다.
" }, "description_localized": "부드러운 30수 코튼 100% 소재로 제작되어 사계절 내내 편안하게 착용할 수 있습니다. 오버핏 실루엣으로 체형 커버에 탁월하며, 어떤 하의와도 자연스럽게 매치됩니다.

주문 후 영업일 기준 1~2일 내 출고됩니다. 단순 변심 교환·반품은 수령 후 7일 이내 가능하며, 왕복 배송비가 부과됩니다.
", "content_mode": "html" }, "is_wishlisted": false } } } } }, { "id": "reviews_tab", "label": "$t:editor.state.product_reviews_tab", "comment": "상품상세 리뷰 탭은 _local.activeTab === 'reviews' 게이트 뒤라 기본('info') 상태 캔버스에 미렌더. activeTab 시드 + reviews 를 유저 탭 shape(reviews.data.reviews.data + rating_stats + option_filters + total_count)로 override. base reviews 샘플은 admin 리뷰관리 shape(reviews.data.data[])라 SSoT 분리(copy_source 패턴).", "initialState": { "local": { "activeTab": "reviews" } }, "sampleDataOverrides": { "byDataSourceId": { "reviews": { "data": { "total_count": 37, "rating_stats": { "1": { "count": 1, "percent": 3 }, "2": { "count": 2, "percent": 5 }, "3": { "count": 4, "percent": 11 }, "4": { "count": 8, "percent": 22 }, "5": { "count": 22, "percent": 59 }, "avg": 4.3 }, "option_filters": [ { "key": "색상", "values": [ { "value": "블랙", "count": 18 }, { "value": "화이트", "count": 12 }, { "value": "네이비", "count": 7 } ] }, { "key": "사이즈", "values": [ { "value": "S", "count": 6 }, { "value": "M", "count": 19 }, { "value": "L", "count": 12 } ] } ], "reviews": { "data": [ { "id": 9101, "user": { "name": "김민지", "avatar": null }, "rating": 5, "content": "핏이 정말 예쁘고 원단도 도톰해서 가을에 입기 딱 좋아요. 세탁 후에도 변형이 없어서 만족합니다.", "option_snapshot": { "option_values": [ { "key": { "ko": "색상" }, "value": { "ko": "블랙" } }, { "key": { "ko": "사이즈" }, "value": { "ko": "M" } } ] }, "image_count": 2, "images": [ { "download_url": "/images/placeholder.png" }, { "download_url": "/images/placeholder.png" } ], "has_reply": true, "reply_content": "소중한 후기 감사합니다! 앞으로도 좋은 상품으로 보답하겠습니다.", "replied_at": "2026-05-27 09:10", "created_at": "2026-05-26 11:20" }, { "id": 9102, "user": { "name": "이서준", "avatar": null }, "rating": 4, "content": "색감 예쁘고 무난하게 입기 좋습니다. 다만 생각보다 살짝 얇은 느낌이에요.", "option_snapshot": { "option_values": [ { "key": { "ko": "색상" }, "value": { "ko": "화이트" } }, { "key": { "ko": "사이즈" }, "value": { "ko": "L" } } ] }, "image_count": 0, "images": [], "has_reply": false, "reply_content": null, "replied_at": null, "created_at": "2026-05-24 16:42" }, { "id": 9103, "user": { "name": "박도윤", "avatar": null }, "rating": 5, "content": "재구매했어요. 데일리로 입기 좋고 색상별로 사고 싶네요. 배송도 빨랐습니다.", "option_snapshot": { "option_values": [ { "key": { "ko": "색상" }, "value": { "ko": "네이비" } }, { "key": { "ko": "사이즈" }, "value": { "ko": "S" } } ] }, "image_count": 5, "images": [ { "download_url": "/images/placeholder.png" }, { "download_url": "/images/placeholder.png" }, { "download_url": "/images/placeholder.png" }, { "download_url": "/images/placeholder.png" }, { "download_url": "/images/placeholder.png" } ], "has_reply": true, "reply_content": "재구매 감사합니다! 네이비 색상도 곧 재입고 예정입니다.", "replied_at": "2026-05-21 10:00", "created_at": "2026-05-20 19:05" }, { "id": 9104, "user": { "name": "최예린", "avatar": null }, "rating": 3, "content": "무난해요. 기본템으로는 괜찮은데 특별하진 않네요.", "option_snapshot": { "option_values": [ { "key": { "ko": "색상" }, "value": { "ko": "블랙" } }, { "key": { "ko": "사이즈" }, "value": { "ko": "M" } } ] }, "image_count": 0, "images": [], "has_reply": false, "reply_content": null, "replied_at": null, "created_at": "2026-05-18 08:33" } ], "meta": { "current_page": 1, "last_page": 4, "per_page": 10, "total": 37 } } } } } } }, { "id": "qna_tab", "label": "$t:editor.state.product_qna_tab", "comment": "상품상세 문의 탭은 _local.activeTab === 'qna' && _global.modules['sirsoft-ecommerce'].inquiry.board_slug 게이트 + 탭 hiddenTabIds 가 board_slug 없으면 qna 탭 숨김. activeTab + global modules.inquiry.board_slug 시드 + qna 를 유저 shape(items[] + meta)로 override(기존 stub items:['샘플'] 해소).", "initialState": { "local": { "activeTab": "qna" }, "global": { "modules": { "sirsoft-ecommerce": { "inquiry": { "board_slug": "product-qna" } } } } } } ] }, { "comment": "shop/index — 목록 유무 + 접근 제한. _local.productAccessDenied=true 시 접근 제한 화면을 if 분기한다(본문 line 192).", "scope": { "kind": "route", "match": "/shop/products" }, "items": [ { "id": "with_data", "label": "$t:editor.state.with_data", "default": true }, { "id": "empty_data", "label": "$t:editor.state.empty_data", "sampleDataOverrides": { "byEndpointPattern": { "/api/modules/sirsoft-ecommerce/products*": { "data": { "data": [], "meta": { "total": 0, "per_page": 20, "current_page": 1 } } } } } }, { "id": "access_denied", "label": "$t:editor.state.shop_access_denied", "initialState": { "local": { "productAccessDenied": true } } } ] }, { "comment": "shop/cart — 담긴 상품 유무 + 주문 처리 중(_local.isOrdering 시 오버레이 잠금, 본문 line 115).", "scope": { "kind": "route", "match": "/shop/cart" }, "items": [ { "id": "with_items", "label": "$t:editor.state.cart_with_items", "default": true }, { "id": "empty_cart", "label": "$t:editor.state.cart_empty", "sampleDataOverrides": { "byDataSourceId": { "cartItems": { "data": { "items": [], "item_ids": [], "item_count": 0, "calculation": { "items": [], "promotions": { "product_promotions": { "coupons": [], "discount_codes": [], "events": [] }, "order_promotions": { "coupons": [], "discount_codes": [], "events": [] } }, "validation_errors": [], "summary": { "subtotal": 0, "subtotal_formatted": "0원", "total_discount": 0, "discount_formatted": "0원", "total_shipping": 0, "shipping_fee_formatted": "0원", "final_amount": 0, "final_amount_formatted": "0원", "payment_amount_formatted": "0원", "points_earning": 0, "multi_currency": {} } } } } } } }, { "id": "ordering", "label": "$t:editor.state.cart_ordering", "initialState": { "local": { "isOrdering": true } } }, { "id": "summary_tax_expanded", "label": "$t:editor.state.cart_summary_details", "comment": "장바구니 요약의 세금 상세는 (1) 금액 영역이 _local.selectedItems.length>0 게이트(_cart_summary.json line 75), (2) 세금 상세가 _local.showTaxDetails 토글 게이트(line 128)로 이중 중첩. 둘 다 시드(selectedItems=[1,2,3] + showTaxDetails:true)해 과세/면세 금액(multi_currency) breakdown 을 노출. 편집기는 정적 시뮬레이션이라 체크박스 클릭·토글 클릭 불가.", "initialState": { "local": { "showTaxDetails": true, "selectedItems": [ 1, 2, 3 ] } } } ] }, { "comment": "shop/checkout — 정상/결제오류(_local.orderError·query.error, 본문 line 45/194)/구매불가(_local.unavailableModal, line 102)/입력검증실패 분기. 검증 실패는 주문자/배송지 입력칸별 인라인 에러를 _local.errors 의 점 포함 flat 키(예 'orderer.name')로 읽는다(_checkout_orderer.json line 99/101, _checkout_shipping.json) — formErrors 키를 대괄호 표기로 지정한다.", "scope": { "kind": "route", "match": "/shop/checkout" }, "items": [ { "id": "normal", "label": "$t:editor.state.checkout_normal", "default": true, "comment": "빈 local 패치 — sampleGlobal._local baseline(받는분/주소/배송메모 시드)을 캔버스에 force-inject 하는 트리거. 패치가 없으면 편집기가 _localInit 을 주입하지 않아 레이아웃 자체 initLocal 이 baseline 을 덮어쓴다. 시드 데이터는 sampleGlobal._local 1곳에만 존재(상태별 중복 없음).", "initialState": { "local": {} } }, { "id": "payment_error", "label": "$t:editor.state.checkout_payment_error", "initialState": { "local": { "orderError": true, "orderErrorMessage": "결제 처리 중 오류가 발생했습니다" }, "query": { "error": "confirm_failed" } } }, { "id": "validation_failed", "label": "$t:editor.state.checkout_validation_failed", "formErrors": { "_local.errors['orderer.name']": [ "주문자 이름을 입력해 주세요" ], "_local.errors['orderer.phone']": [ "연락처를 입력해 주세요" ], "_local.errors['orderer.email']": [ "올바른 이메일 형식이 아닙니다" ], "_local.errors['shipping.recipient_name']": [ "받는 분 이름을 입력해 주세요" ], "_local.errors['shipping.recipient_phone']": [ "받는 분 연락처를 입력해 주세요" ], "_local.errors['shipping.zipcode']": [ "우편번호를 입력해 주세요" ], "_local.errors['shipping.address']": [ "주소를 입력해 주세요" ] } }, { "id": "summary_details_expanded", "label": "$t:editor.state.checkout_summary_details", "comment": "결제금액 요약의 세금/할인 상세는 _local.showTaxDetails / showDiscountDetails 토글 게이트 뒤(_checkout_summary.json line 93/161)라 기본 상태 미렌더. 두 토글 ON 으로 과세/면세 금액·상품/주문/배송 쿠폰 할인 breakdown(multi_currency 전 경로) 노출. base checkoutData 가 풍부하므로 override 불요.", "initialState": { "local": { "showTaxDetails": true, "showDiscountDetails": true } } } ] }, { "comment": "shop/order_complete — orderData.data.payment.payment_method 값(card/vbank/dbank)으로 결제수단별 안내를 if 분기한다(본문 line 52/95/138/229). card 는 base sampleData(=card)가 흐르므로 오버라이드 없음, vbank/dbank 는 byDataSourceId.orderData 통째 교체.", "scope": { "kind": "route", "match": "/shop/orders/:id/complete" }, "items": [ { "id": "card", "label": "$t:editor.state.payment_card", "default": true }, { "id": "vbank", "label": "$t:editor.state.payment_vbank", "sampleDataOverrides": { "byDataSourceId": { "orderData": { "data": { "id": 5001, "order_number": "20260603-0001", "order_status": "payment_pending", "order_status_label": "입금대기", "order_status_variant": "warning", "options": [ { "id": 9001, "option_status": "preparing", "option_status_label": "배송준비중", "option_status_variant": "info", "product_id": 1, "product_option_id": 101, "sku": "EARBUDS-PRO-BLK", "product_name": "프리미엄 무선 이어버드 프로", "product_option_name": "미드나잇 블랙 / 기본", "option_name": "미드나잇 블랙 / 기본", "quantity": 2, "shipped_quantity": 0, "unit_price": 29000, "unit_price_formatted": "29,000원", "subtotal_price": 58000, "subtotal_price_formatted": "58,000원", "subtotal_discount_amount": 5000, "subtotal_discount_amount_formatted": "5,000원", "list_price": 32000, "list_price_formatted": "32,000원", "final_amount": 53000, "final_amount_formatted": "53,000원", "thumbnail_url": null, "mc_unit_price": { "KRW": { "price": 29000, "formatted": "29,000원", "is_default": true }, "USD": { "price": 21.3, "formatted": "$21.30", "is_default": false } }, "mc_subtotal_price": { "KRW": { "price": 58000, "formatted": "58,000원", "is_default": true }, "USD": { "price": 42.6, "formatted": "$42.60", "is_default": false } }, "confirmed_at": null, "can_confirm": false, "can_write_review": false, "has_review": false }, { "id": 9002, "option_status": "preparing", "option_status_label": "배송준비중", "option_status_variant": "info", "product_id": 2, "product_option_id": 102, "sku": "CABLE-15M-WHT", "product_name": "고속 충전 케이블 1.5m", "product_option_name": "1.5m", "option_name": "1.5m", "quantity": 1, "shipped_quantity": 0, "unit_price": 18000, "unit_price_formatted": "18,000원", "subtotal_price": 18000, "subtotal_price_formatted": "18,000원", "subtotal_discount_amount": 0, "subtotal_discount_amount_formatted": "0원", "list_price": 18000, "list_price_formatted": "18,000원", "final_amount": 18000, "final_amount_formatted": "18,000원", "thumbnail_url": null, "mc_unit_price": { "KRW": { "price": 18000, "formatted": "18,000원", "is_default": true }, "USD": { "price": 13.2, "formatted": "$13.20", "is_default": false } }, "mc_subtotal_price": { "KRW": { "price": 18000, "formatted": "18,000원", "is_default": true }, "USD": { "price": 13.2, "formatted": "$13.20", "is_default": false } }, "confirmed_at": null, "can_confirm": false, "can_write_review": false, "has_review": false } ], "payment": { "id": 8001, "payment_status": "pending", "payment_status_label": "입금대기", "payment_status_variant": "warning", "payment_method": "vbank", "payment_method_label": "가상계좌", "payment_type_label": "일반결제", "pg_provider": "kginicis", "payment_number": "PAY-20260603-0002", "paid_amount_formatted": "102,000원", "card_name": null, "card_number_masked": null, "card_installment_months": 0, "is_interest_free": false, "paid_at_formatted": null, "dbank_name": null, "dbank_account": null, "dbank_holder": null, "depositor_name": null, "deposit_due_at_formatted": null, "vbank_name": "국민은행", "vbank_number": "901234-56-789012", "vbank_holder": "(주)지세븐커머스", "vbank_due_at": "2026-06-05T23:59:59+09:00" }, "shipping_address": { "id": 7001, "address_type": "shipping", "recipient_name": "홍길동", "recipient_phone": "010-1234-5678", "recipient_country_code": "KR", "zipcode": "06234", "address": "서울특별시 강남구 테헤란로 123", "address_detail": "4층 401호", "city": "", "state": "", "full_address": "서울특별시 강남구 테헤란로 123 4층 401호", "delivery_memo": "부재 시 경비실에 맡겨주세요" }, "subtotal_amount": 76000, "subtotal_amount_formatted": "76,000원", "total_discount_amount": 5000, "total_discount_amount_formatted": "5,000원", "total_shipping_amount": 0, "total_shipping_amount_formatted": "0원", "total_amount": 102000, "total_amount_formatted": "102,000원", "mc_subtotal_amount": { "KRW": { "price": 76000, "formatted": "76,000원", "is_default": true }, "USD": { "price": 55.7, "formatted": "$55.70", "is_default": false } }, "mc_total_discount_amount": { "KRW": { "price": 5000, "formatted": "5,000원", "is_default": true }, "USD": { "price": 3.65, "formatted": "$3.65", "is_default": false } }, "mc_total_shipping_amount": { "KRW": { "price": 0, "formatted": "0원", "is_default": true }, "USD": { "price": 0, "formatted": "$0.00", "is_default": false } }, "mc_total_amount": { "KRW": { "price": 102000, "formatted": "102,000원", "is_default": true }, "USD": { "price": 74.5, "formatted": "$74.50", "is_default": false } } } } } } }, { "id": "dbank", "label": "$t:editor.state.payment_dbank", "sampleDataOverrides": { "byDataSourceId": { "orderData": { "data": { "id": 5001, "order_number": "20260603-0001", "order_status": "payment_pending", "order_status_label": "입금대기", "order_status_variant": "warning", "options": [ { "id": 9001, "option_status": "preparing", "option_status_label": "배송준비중", "option_status_variant": "info", "product_id": 1, "product_option_id": 101, "sku": "EARBUDS-PRO-BLK", "product_name": "프리미엄 무선 이어버드 프로", "product_option_name": "미드나잇 블랙 / 기본", "option_name": "미드나잇 블랙 / 기본", "quantity": 2, "shipped_quantity": 0, "unit_price": 29000, "unit_price_formatted": "29,000원", "subtotal_price": 58000, "subtotal_price_formatted": "58,000원", "subtotal_discount_amount": 5000, "subtotal_discount_amount_formatted": "5,000원", "list_price": 32000, "list_price_formatted": "32,000원", "final_amount": 53000, "final_amount_formatted": "53,000원", "thumbnail_url": null, "mc_unit_price": { "KRW": { "price": 29000, "formatted": "29,000원", "is_default": true }, "USD": { "price": 21.3, "formatted": "$21.30", "is_default": false } }, "mc_subtotal_price": { "KRW": { "price": 58000, "formatted": "58,000원", "is_default": true }, "USD": { "price": 42.6, "formatted": "$42.60", "is_default": false } }, "confirmed_at": null, "can_confirm": false, "can_write_review": false, "has_review": false }, { "id": 9002, "option_status": "preparing", "option_status_label": "배송준비중", "option_status_variant": "info", "product_id": 2, "product_option_id": 102, "sku": "CABLE-15M-WHT", "product_name": "고속 충전 케이블 1.5m", "product_option_name": "1.5m", "option_name": "1.5m", "quantity": 1, "shipped_quantity": 0, "unit_price": 18000, "unit_price_formatted": "18,000원", "subtotal_price": 18000, "subtotal_price_formatted": "18,000원", "subtotal_discount_amount": 0, "subtotal_discount_amount_formatted": "0원", "list_price": 18000, "list_price_formatted": "18,000원", "final_amount": 18000, "final_amount_formatted": "18,000원", "thumbnail_url": null, "mc_unit_price": { "KRW": { "price": 18000, "formatted": "18,000원", "is_default": true }, "USD": { "price": 13.2, "formatted": "$13.20", "is_default": false } }, "mc_subtotal_price": { "KRW": { "price": 18000, "formatted": "18,000원", "is_default": true }, "USD": { "price": 13.2, "formatted": "$13.20", "is_default": false } }, "confirmed_at": null, "can_confirm": false, "can_write_review": false, "has_review": false } ], "payment": { "id": 8001, "payment_status": "pending", "payment_status_label": "입금대기", "payment_status_variant": "warning", "payment_method": "dbank", "payment_method_label": "무통장입금", "payment_type_label": "일반결제", "pg_provider": "kginicis", "payment_number": "PAY-20260603-0003", "paid_amount_formatted": "102,000원", "card_name": null, "card_number_masked": null, "card_installment_months": 0, "is_interest_free": false, "paid_at_formatted": null, "dbank_name": "신한은행", "dbank_account": "110-123-456789", "dbank_holder": "(주)지세븐커머스", "depositor_name": "홍길동", "deposit_due_at_formatted": "2026-06-05 23:59", "vbank_name": null, "vbank_number": null, "vbank_holder": null, "vbank_due_at": null }, "shipping_address": { "id": 7001, "address_type": "shipping", "recipient_name": "홍길동", "recipient_phone": "010-1234-5678", "recipient_country_code": "KR", "zipcode": "06234", "address": "서울특별시 강남구 테헤란로 123", "address_detail": "4층 401호", "city": "", "state": "", "full_address": "서울특별시 강남구 테헤란로 123 4층 401호", "delivery_memo": "부재 시 경비실에 맡겨주세요" }, "subtotal_amount": 76000, "subtotal_amount_formatted": "76,000원", "total_discount_amount": 5000, "total_discount_amount_formatted": "5,000원", "total_shipping_amount": 0, "total_shipping_amount_formatted": "0원", "total_amount": 102000, "total_amount_formatted": "102,000원", "mc_subtotal_amount": { "KRW": { "price": 76000, "formatted": "76,000원", "is_default": true }, "USD": { "price": 55.7, "formatted": "$55.70", "is_default": false } }, "mc_total_discount_amount": { "KRW": { "price": 5000, "formatted": "5,000원", "is_default": true }, "USD": { "price": 3.65, "formatted": "$3.65", "is_default": false } }, "mc_total_shipping_amount": { "KRW": { "price": 0, "formatted": "0원", "is_default": true }, "USD": { "price": 0, "formatted": "$0.00", "is_default": false } }, "mc_total_amount": { "KRW": { "price": 102000, "formatted": "102,000원", "is_default": true }, "USD": { "price": 74.5, "formatted": "$74.50", "is_default": false } } } } } } } ] }, { "comment": "shop/reorder — _local.status 값(pending/success/error)으로 재주문 진행 화면을 if 분기한다(본문 line 72/99/225).", "scope": { "kind": "route", "match": "/shop/reorder/:id" }, "items": [ { "id": "pending", "label": "$t:editor.state.reorder_pending", "default": true, "initialState": { "local": { "status": "pending" } } }, { "id": "success_partial", "label": "$t:editor.state.reorder_success_partial", "initialState": { "local": { "status": "success", "skipped": [ { "name": "품절 상품" } ] } } }, { "id": "error", "label": "$t:editor.state.reorder_error", "initialState": { "local": { "status": "error" } } } ] }, { "comment": "admin 상품 폼 — route.itemCode 유무로 수정/신규, query.copy_id 로 복사 생성을 분기한다(본문 line 9/32/75). 검증 오류는 _local.errors.{field} 경로.", "scope": { "kind": "route", "match": "*/admin/ecommerce/products/:itemCode/edit" }, "items": [ { "id": "edit_mode", "label": "$t:editor.state.edit_existing", "default": true }, { "id": "create_mode", "label": "$t:editor.state.create_mode", "initialState": { "route": { "itemCode": null } } }, { "id": "validation_failed", "label": "$t:editor.state.validation_failed", "formErrors": { "_local.errors.name": [ "필수 입력 항목입니다" ] } } ] }, { "comment": "admin 쿠폰 폼 — route.id 유무로 수정/신규 분기(본문 line 9/74). 검증 오류는 _local.errors.", "scope": { "kind": "route", "match": "*/admin/ecommerce/promotion-coupons/:id/edit" }, "items": [ { "id": "edit_mode", "label": "$t:editor.state.edit_existing", "default": true, "initialState": { "local": { "form": { "target_type": "order_amount", "name": { "ko": "신규회원 10% 할인", "en": "New Member 10% Off" }, "description": { "ko": "신규 가입 회원 대상 주문금액 10% 할인 쿠폰", "en": "10% off for new members" }, "issue_method": "download", "issue_condition": "manual", "discount_type": "rate", "discount_value": 10, "discount_max_amount": 20000, "min_order_amount": 30000, "valid_type": "days", "valid_days": 30, "valid_from": null, "valid_to": null, "total_quantity": 1000, "issue_from": "2026-05-01T00:00", "issue_to": "2026-06-30T23:59", "per_user_limit": 1, "is_combinable": false, "target_scope": "all" } } } }, { "id": "create_mode", "label": "$t:editor.state.create_mode", "initialState": { "route": { "id": null } } }, { "id": "validation_failed", "label": "$t:editor.state.validation_failed", "formErrors": { "_local.errors.name": [ "필수 입력 항목입니다" ] } } ] }, { "comment": "admin 배송 정책 폼 — route.id 유무로 수정/신규, query.copy_id 로 복사 분기(본문 line 9/60/98). 검증 오류는 _local.errors.", "scope": { "kind": "route", "match": "*/admin/ecommerce/shipping-policies/:id/edit" }, "items": [ { "id": "edit_mode", "label": "부과정책: 조건부 무료", "default": true, "initialState": { "local": { "form": { "name": { "ko": "기본 배송정책", "en": "Standard Shipping" }, "is_active": true, "is_default": true, "country_settings": [ { "country_code": "KR", "shipping_method": "parcel", "custom_shipping_name": null, "carrier": null, "currency_code": "KRW", "charge_policy": "conditional_free", "base_fee": 3000, "free_threshold": 50000, "ranges": null, "api_endpoint": null, "api_request_fields": null, "api_response_fee_field": null, "extra_fee_enabled": true, "extra_fee_settings": [ { "region": "제주특별자치도", "zipcode": "63000-63644", "fee": 3000 }, { "region": "도서산간", "zipcode": "", "fee": 4000 } ], "extra_fee_multiply": false, "is_active": true }, { "country_code": "US", "shipping_method": "parcel", "custom_shipping_name": null, "carrier": null, "currency_code": "USD", "charge_policy": "range_amount", "base_fee": 0, "free_threshold": null, "ranges": { "type": "amount", "tiers": [ { "min": 0, "max": 50000, "fee": 3000 }, { "min": 50000, "max": 100000, "fee": 1500 }, { "min": 100000, "max": null, "fee": 0 } ] }, "api_endpoint": null, "api_request_fields": null, "api_response_fee_field": null, "extra_fee_enabled": false, "extra_fee_settings": [], "extra_fee_multiply": false, "is_active": true } ] }, "activeCountryTab": 0, "rangeErrors": {}, "showBaseFee": true, "showFreeThreshold": true, "showRanges": false, "showApiSettings": false, "showUnitValue": false } } }, { "id": "charge_fixed", "label": "부과정책: 고정", "default": false, "initialState": { "local": { "form": { "name": { "ko": "기본 배송정책", "en": "Standard Shipping" }, "is_active": true, "is_default": false, "country_settings": [ { "country_code": "KR", "shipping_method": "parcel", "custom_shipping_name": null, "carrier": null, "currency_code": "KRW", "charge_policy": "fixed", "base_fee": 3000, "free_threshold": null, "ranges": null, "api_endpoint": null, "api_request_fields": null, "api_response_fee_field": null, "extra_fee_enabled": false, "extra_fee_settings": [], "extra_fee_multiply": false, "is_active": true } ] }, "activeCountryTab": 0, "rangeErrors": {}, "showBaseFee": true, "showFreeThreshold": false, "showRanges": false, "showApiSettings": false, "showUnitValue": false } } }, { "id": "charge_range", "label": "부과정책: 구간별(금액)", "default": false, "initialState": { "local": { "form": { "name": { "ko": "기본 배송정책", "en": "Standard Shipping" }, "is_active": true, "is_default": false, "country_settings": [ { "country_code": "KR", "shipping_method": "parcel", "custom_shipping_name": null, "carrier": null, "currency_code": "KRW", "charge_policy": "range_amount", "base_fee": 0, "free_threshold": null, "ranges": { "type": "amount", "tiers": [ { "min": 0, "max": 50000, "fee": 3000 }, { "min": 50000, "max": 100000, "fee": 1500 }, { "min": 100000, "max": null, "fee": 0 } ] }, "api_endpoint": null, "api_request_fields": null, "api_response_fee_field": null, "extra_fee_enabled": false, "extra_fee_settings": [], "extra_fee_multiply": false, "is_active": true } ] }, "activeCountryTab": 0, "rangeErrors": {}, "showBaseFee": false, "showFreeThreshold": false, "showRanges": true, "showApiSettings": false, "showUnitValue": false } } }, { "id": "charge_per_weight", "label": "부과정책: 무게당", "default": false, "initialState": { "local": { "form": { "name": { "ko": "기본 배송정책", "en": "Standard Shipping" }, "is_active": true, "is_default": false, "country_settings": [ { "country_code": "KR", "shipping_method": "parcel", "custom_shipping_name": null, "carrier": null, "currency_code": "KRW", "charge_policy": "per_weight", "base_fee": 2500, "free_threshold": null, "ranges": { "type": "weight", "unit_value": 5 }, "api_endpoint": null, "api_request_fields": null, "api_response_fee_field": null, "extra_fee_enabled": false, "extra_fee_settings": [], "extra_fee_multiply": false, "is_active": true } ] }, "activeCountryTab": 0, "rangeErrors": {}, "showBaseFee": true, "showFreeThreshold": false, "showRanges": false, "showApiSettings": false, "showUnitValue": true } } }, { "id": "charge_free", "label": "부과정책: 무료", "default": false, "initialState": { "local": { "form": { "name": { "ko": "기본 배송정책", "en": "Standard Shipping" }, "is_active": true, "is_default": false, "country_settings": [ { "country_code": "KR", "shipping_method": "parcel", "custom_shipping_name": null, "carrier": null, "currency_code": "KRW", "charge_policy": "free", "base_fee": 0, "free_threshold": null, "ranges": null, "api_endpoint": null, "api_request_fields": null, "api_response_fee_field": null, "extra_fee_enabled": false, "extra_fee_settings": [], "extra_fee_multiply": false, "is_active": true } ] }, "activeCountryTab": 0, "rangeErrors": {}, "showBaseFee": false, "showFreeThreshold": false, "showRanges": false, "showApiSettings": false, "showUnitValue": false } } }, { "id": "charge_api", "label": "부과정책: 계산 API", "default": false, "initialState": { "local": { "form": { "name": { "ko": "기본 배송정책", "en": "Standard Shipping" }, "is_active": true, "is_default": false, "country_settings": [ { "country_code": "KR", "shipping_method": "parcel", "custom_shipping_name": null, "carrier": null, "currency_code": "KRW", "charge_policy": "api", "base_fee": 0, "free_threshold": null, "ranges": null, "api_endpoint": "https://shipping.example.com/api/quote", "api_request_fields": [ "zipcode", "weight" ], "api_response_fee_field": "fee", "extra_fee_enabled": false, "extra_fee_settings": [], "extra_fee_multiply": false, "is_active": true } ] }, "activeCountryTab": 0, "rangeErrors": {}, "showBaseFee": false, "showFreeThreshold": false, "showRanges": false, "showApiSettings": true, "showUnitValue": false } } }, { "id": "create_mode", "label": "$t:editor.state.create_mode", "initialState": { "route": { "id": null } } }, { "id": "validation_failed", "label": "$t:editor.state.validation_failed", "formErrors": { "_local.errors.name": [ "필수 입력 항목입니다" ] } } ] }, { "comment": "admin 이커머스 설정 — {{_global.activeEcommerceSettingsTab || query.tab || 'basic_info'}} 으로 9개 탭 화면을 if 분기한다(본문 line 303/344~). query.tab + 우선 키 함께 주입.", "scope": { "kind": "route", "match": "*/admin/ecommerce/settings" }, "items": [ { "id": "tab_basic_info", "label": "$t:editor.state.tab.basic_info", "initialState": { "query": { "tab": "basic_info" }, "global": { "activeEcommerceSettingsTab": "basic_info" } }, "default": true }, { "id": "tab_language_currency", "label": "$t:editor.state.tab.language_currency", "initialState": { "query": { "tab": "language_currency" }, "global": { "activeEcommerceSettingsTab": "language_currency" } } }, { "id": "tab_seo", "label": "$t:editor.state.tab.seo", "initialState": { "query": { "tab": "seo" }, "global": { "activeEcommerceSettingsTab": "seo" } } }, { "id": "tab_order_settings", "label": "$t:editor.state.tab.order_settings", "initialState": { "query": { "tab": "order_settings" }, "global": { "activeEcommerceSettingsTab": "order_settings" } } }, { "id": "tab_claim", "label": "$t:editor.state.tab.claim", "initialState": { "query": { "tab": "claim" }, "global": { "activeEcommerceSettingsTab": "claim" } } }, { "id": "tab_shipping", "label": "$t:editor.state.tab.shipping", "initialState": { "query": { "tab": "shipping" }, "global": { "activeEcommerceSettingsTab": "shipping" } } }, { "id": "tab_review_settings", "label": "$t:editor.state.tab.review_settings", "initialState": { "query": { "tab": "review_settings" }, "global": { "activeEcommerceSettingsTab": "review_settings" } } }, { "id": "tab_notification_definitions", "label": "$t:editor.state.tab.notification_definitions", "initialState": { "query": { "tab": "notification_definitions" }, "global": { "activeEcommerceSettingsTab": "notification_definitions" } } }, { "id": "tab_identity_policies", "label": "$t:editor.state.tab.identity_policies", "initialState": { "query": { "tab": "identity_policies" }, "global": { "activeEcommerceSettingsTab": "identity_policies" } } } ] }, { "comment": "admin 마일리지/예치금 설정 — _local.activeTab(mileage/deposit)으로 탭을 분기한다(본문 line 130/165).", "scope": { "kind": "route", "match": "*/admin/ecommerce/mileage-deposit-settings" }, "items": [ { "id": "tab_mileage", "label": "$t:editor.state.tab.mileage", "default": true, "initialState": { "local": { "activeTab": "mileage" } } }, { "id": "tab_deposit", "label": "$t:editor.state.tab.deposit", "initialState": { "local": { "activeTab": "deposit" } } } ] }, { "comment": "shop/guest_order_form — 비회원 주문 조회 폼. 본문이 _global.currentUser.uuid 유무로 양분된다(slots.content[0] 회원→마이페이지 리다이렉트 안내 / content[1] 비회원→조회 폼). 편집기 sampleGlobal 은 로그인 상태(currentUser 시드)라 비회원 조회 폼이 기본 미표시이므로, currentUser 를 null 로 패치한 비회원 상태를 기본으로 노출해 폼을 편집 가능하게 한다.", "scope": { "kind": "route", "match": "/shop/guest/orders" }, "items": [ { "id": "guest", "label": "$t:editor.state.guest_order_form_guest", "default": true, "comment": "비회원 상태 — currentUser 를 null 로 덮어 content[1] 조회 폼을 캔버스에 노출한다.", "initialState": { "global": { "currentUser": null } } }, { "id": "member", "label": "$t:editor.state.guest_order_form_member", "comment": "회원 로그인 상태 — currentUser.uuid 를 명시 시드해 content[0] 마이페이지 리다이렉트 안내 분기를 활성화한다. sampleGlobal 은 코어 keyspace(currentUser)를 시드하지 않으므로(코어 우선) 빈 패치로는 guest(null) 와 다른 결과를 만들지 못한다 — 로그인 상태를 명시 패치해야 양분 분기가 회원 쪽으로 전환되고 캔버스가 실제로 달라진다.", "initialState": { "global": { "currentUser": { "uuid": "editor-sample-member-uuid" } } } } ] }, { "comment": "admin 마일리지 거래내역 목록 — transactions 데이터소스 목록 유무. 마일리지 시스템.", "scope": { "kind": "route", "match": "*/admin/ecommerce/mileage-transactions" }, "items": [ { "id": "with_data", "label": "$t:editor.state.with_data", "default": true }, { "id": "empty_data", "label": "$t:editor.state.empty_data", "sampleDataOverrides": { "byEndpointPattern": { "/api/modules/sirsoft-ecommerce/admin/mileage-transactions*": { "data": { "data": [], "meta": { "total": 0, "per_page": 20, "current_page": 1 } } } } } } ] }, { "comment": "admin 쿠폰 목록 — coupons 데이터소스 목록 유무. 쿠폰 관리.", "scope": { "kind": "route", "match": "*/admin/ecommerce/promotion-coupons" }, "items": [ { "id": "with_data", "label": "$t:editor.state.with_data", "default": true }, { "id": "empty_data", "label": "$t:editor.state.empty_data", "sampleDataOverrides": { "byEndpointPattern": { "/api/modules/sirsoft-ecommerce/admin/promotion-coupons*": { "data": { "data": [], "meta": { "total": 0, "per_page": 20, "current_page": 1 } } } } } } ] }, { "comment": "admin 쿠폰 생성 — promotion-coupon-create 라우트(route.id 없음 = 신규 작성 폼). 쿠폰 관리. 검증 오류는 _local.errors.", "scope": { "kind": "route", "match": "*/admin/ecommerce/promotion-coupon-create" }, "items": [ { "id": "create_mode", "label": "$t:editor.state.create_mode", "default": true, "initialState": { "route": { "id": null } } }, { "id": "validation_failed", "label": "$t:editor.state.validation_failed", "formErrors": { "_local.errors.name": [ "필수 입력 항목입니다" ] } } ] }, { "comment": "admin 주문 목록 — orders 데이터소스 목록 유무.", "scope": { "kind": "route", "match": "*/admin/ecommerce/orders" }, "items": [ { "id": "with_data", "label": "$t:editor.state.with_data", "default": true }, { "id": "empty_data", "label": "$t:editor.state.empty_data", "sampleDataOverrides": { "byEndpointPattern": { "/api/modules/sirsoft-ecommerce/admin/orders*": { "data": { "data": [], "meta": { "total": 0, "per_page": 20, "current_page": 1 } } } } } } ] }, { "comment": "admin 주문 상세 — order 데이터소스 + 부분취소 분기(본문 if order.data.is_partially_cancelled). 주문 항목상태 전이.", "scope": { "kind": "route", "match": "*/admin/ecommerce/orders/:orderNumber" }, "items": [ { "id": "default", "label": "$t:editor.state.order_detail_default", "default": true }, { "id": "partially_cancelled", "label": "$t:editor.state.order_detail_partially_cancelled", "comment": "부분취소 상태 — order.data.is_partially_cancelled=true 로 취소 표시 분기를 캔버스에 노출.", "sampleDataOverrides": { "byEndpointPattern": { "/api/modules/sirsoft-ecommerce/admin/orders/*": { "data": { "is_partially_cancelled": true } } } } } ] } ] } }