2025-11-20 17:27:34 +09:00
< ? php
namespace App\Swagger\v1 ;
/**
* @ OA\Tag ( name = " ItemMaster " , description = " 품목기준관리 API " )
*
* ========================================
* 모델 스키마
* ========================================
*
* @ OA\Schema (
* schema = " ItemPage " ,
* type = " object " ,
*
* @ OA\Property ( property = " id " , type = " integer " , example = 1 ),
* @ OA\Property ( property = " tenant_id " , type = " integer " , example = 1 ),
* @ OA\Property ( property = " page_name " , type = " string " , example = " 기본 정보 " ),
* @ OA\Property ( property = " item_type " , type = " string " , enum = { " FG " , " PT " , " SM " , " RM " , " CS " }, example = " FG " ),
* @ OA\Property ( property = " absolute_path " , type = " string " , nullable = true , example = " /items/fg/basic " ),
* @ OA\Property ( property = " is_active " , type = " boolean " , example = true ),
* @ OA\Property ( property = " created_at " , type = " string " , example = " 2025-11-20 10:00:00 " ),
* @ OA\Property ( property = " updated_at " , type = " string " , example = " 2025-11-20 10:00:00 " ),
* @ OA\Property (
* property = " sections " ,
* type = " array " ,
*
* @ OA\Items ( ref = " #/components/schemas/ItemSection " )
* )
* )
*
* @ OA\Schema (
* schema = " ItemSection " ,
* type = " object " ,
2025-12-09 09:39:16 +09:00
* description = " 엔티티 - 관계는 entity_relationships로 관리 " ,
2025-11-20 17:27:34 +09:00
*
* @ OA\Property ( property = " id " , type = " integer " , example = 1 ),
* @ OA\Property ( property = " tenant_id " , type = " integer " , example = 1 ),
2025-11-27 10:28:51 +09:00
* @ OA\Property ( property = " group_id " , type = " integer " , nullable = true , example = 1 , description = " 계층번호 " ),
2025-11-20 17:27:34 +09:00
* @ OA\Property ( property = " title " , type = " string " , example = " 제품 상세 " ),
* @ OA\Property ( property = " type " , type = " string " , enum = { " fields " , " bom " }, example = " fields " ),
* @ OA\Property ( property = " order_no " , type = " integer " , example = 0 ),
2025-11-26 14:09:31 +09:00
* @ OA\Property ( property = " is_template " , type = " boolean " , example = false , description = " 템플릿 여부 " ),
* @ OA\Property ( property = " is_default " , type = " boolean " , example = false , description = " 기본 템플릿 여부 " ),
2025-11-27 15:51:00 +09:00
* @ OA\Property ( property = " is_locked " , type = " boolean " , example = false , description = " 연결 잠금 여부 (init API 응답 시 포함) " ),
2025-11-26 14:09:31 +09:00
* @ OA\Property ( property = " description " , type = " string " , nullable = true , example = " 섹션 설명 " ),
2025-11-20 17:27:34 +09:00
* @ OA\Property ( property = " created_at " , type = " string " , example = " 2025-11-20 10:00:00 " ),
* @ OA\Property ( property = " updated_at " , type = " string " , example = " 2025-11-20 10:00:00 " ),
* @ OA\Property (
* property = " fields " ,
* type = " array " ,
*
* @ OA\Items ( ref = " #/components/schemas/ItemField " )
* ),
*
* @ OA\Property (
2025-11-27 15:51:00 +09:00
* property = " bom_items " ,
2025-11-20 17:27:34 +09:00
* type = " array " ,
*
* @ OA\Items ( ref = " #/components/schemas/ItemBomItem " )
* )
* )
*
* @ OA\Schema (
* schema = " ItemField " ,
* type = " object " ,
2025-12-09 09:39:16 +09:00
* description = " 엔티티 - 관계는 entity_relationships로 관리 " ,
2025-11-20 17:27:34 +09:00
*
* @ OA\Property ( property = " id " , type = " integer " , example = 1 ),
* @ OA\Property ( property = " tenant_id " , type = " integer " , example = 1 ),
2025-11-27 10:28:51 +09:00
* @ OA\Property ( property = " group_id " , type = " integer " , nullable = true , example = 1 , description = " 계층번호 " ),
2025-11-20 17:27:34 +09:00
* @ OA\Property ( property = " field_name " , type = " string " , example = " 제품명 " ),
2025-11-28 17:39:14 +09:00
* @ OA\Property ( property = " field_key " , type = " string " , nullable = true , example = " 81_itemNum " , description = " 필드 고유 키 ( { ID}_ { key} 형식) " ),
2025-11-20 17:27:34 +09:00
* @ OA\Property ( property = " field_type " , type = " string " , enum = { " textbox " , " number " , " dropdown " , " checkbox " , " date " , " textarea " }, example = " textbox " ),
* @ OA\Property ( property = " order_no " , type = " integer " , example = 0 ),
* @ OA\Property ( property = " is_required " , type = " boolean " , example = true ),
2025-11-28 17:39:14 +09:00
* @ OA\Property ( property = " is_locked " , type = " boolean " , example = false , description = " 엔티티 잠금 여부 " ),
* @ OA\Property ( property = " locked_by " , type = " integer " , nullable = true , example = null , description = " 잠금 설정자 ID " ),
* @ OA\Property ( property = " locked_at " , type = " string " , nullable = true , example = null , description = " 잠금 설정 일시 " ),
2025-11-20 17:27:34 +09:00
* @ OA\Property ( property = " default_value " , type = " string " , nullable = true , example = null ),
* @ OA\Property ( property = " placeholder " , type = " string " , nullable = true , example = " 제품명을 입력하세요 " ),
* @ OA\Property ( property = " display_condition " , type = " object " , nullable = true , example = null ),
* @ OA\Property ( property = " validation_rules " , type = " object " , nullable = true , example = null ),
* @ OA\Property ( property = " options " , type = " object " , nullable = true , example = null ),
* @ OA\Property ( property = " properties " , type = " object " , nullable = true , example = null ),
2025-11-27 10:28:51 +09:00
* @ OA\Property ( property = " category " , type = " string " , nullable = true , example = " basic " , description = " 필드 카테고리 " ),
* @ OA\Property ( property = " description " , type = " string " , nullable = true , example = " 필드 설명 " ),
* @ OA\Property ( property = " is_common " , type = " boolean " , example = false , description = " 공통 필드 여부 " ),
2025-11-20 17:27:34 +09:00
* @ OA\Property ( property = " created_at " , type = " string " , example = " 2025-11-20 10:00:00 " ),
* @ OA\Property ( property = " updated_at " , type = " string " , example = " 2025-11-20 10:00:00 " )
* )
*
* @ OA\Schema (
* schema = " ItemBomItem " ,
* type = " object " ,
2025-12-09 09:39:16 +09:00
* description = " 엔티티 - 관계는 entity_relationships로 관리 " ,
2025-11-20 17:27:34 +09:00
*
* @ OA\Property ( property = " id " , type = " integer " , example = 1 ),
* @ OA\Property ( property = " tenant_id " , type = " integer " , example = 1 ),
2025-11-27 10:28:51 +09:00
* @ OA\Property ( property = " group_id " , type = " integer " , nullable = true , example = 1 , description = " 계층번호 " ),
2025-11-20 17:27:34 +09:00
* @ OA\Property ( property = " item_code " , type = " string " , nullable = true , example = " ITEM001 " ),
* @ OA\Property ( property = " item_name " , type = " string " , example = " 부품 A " ),
* @ OA\Property ( property = " quantity " , type = " number " , format = " float " , example = 1.5 ),
* @ OA\Property ( property = " unit " , type = " string " , nullable = true , example = " EA " ),
* @ OA\Property ( property = " unit_price " , type = " number " , format = " float " , nullable = true , example = 10000 ),
* @ OA\Property ( property = " total_price " , type = " number " , format = " float " , nullable = true , example = 15000 ),
* @ OA\Property ( property = " spec " , type = " string " , nullable = true , example = " 규격 정보 " ),
* @ OA\Property ( property = " note " , type = " string " , nullable = true , example = " 비고 " ),
2025-11-27 15:51:00 +09:00
* @ OA\Property ( property = " is_locked " , type = " boolean " , example = false , description = " 연결 잠금 여부 (init API 응답 시 포함) " ),
2025-11-20 17:27:34 +09:00
* @ OA\Property ( property = " created_at " , type = " string " , example = " 2025-11-20 10:00:00 " ),
* @ OA\Property ( property = " updated_at " , type = " string " , example = " 2025-11-20 10:00:00 " )
* )
*
* @ OA\Schema (
* schema = " SectionTemplate " ,
* type = " object " ,
*
* @ OA\Property ( property = " id " , type = " integer " , example = 1 ),
* @ OA\Property ( property = " tenant_id " , type = " integer " , example = 1 ),
* @ OA\Property ( property = " title " , type = " string " , example = " 기본 템플릿 " ),
* @ OA\Property ( property = " type " , type = " string " , enum = { " fields " , " bom " }, example = " fields " ),
* @ OA\Property ( property = " description " , type = " string " , nullable = true , example = " 설명 " ),
* @ OA\Property ( property = " is_default " , type = " boolean " , example = false ),
* @ OA\Property ( property = " created_at " , type = " string " , example = " 2025-11-20 10:00:00 " ),
* @ OA\Property ( property = " updated_at " , type = " string " , example = " 2025-11-20 10:00:00 " )
* )
*
* @ OA\Schema (
* schema = " CustomTab " ,
* type = " object " ,
*
* @ OA\Property ( property = " id " , type = " integer " , example = 1 ),
* @ OA\Property ( property = " tenant_id " , type = " integer " , example = 1 ),
* @ OA\Property ( property = " label " , type = " string " , example = " 커스텀 탭 " ),
* @ OA\Property ( property = " icon " , type = " string " , nullable = true , example = " icon-name " ),
* @ OA\Property ( property = " is_default " , type = " boolean " , example = false ),
* @ OA\Property ( property = " order_no " , type = " integer " , example = 0 ),
* @ OA\Property ( property = " created_at " , type = " string " , example = " 2025-11-20 10:00:00 " ),
* @ OA\Property ( property = " updated_at " , type = " string " , example = " 2025-11-20 10:00:00 " ),
* @ OA\Property ( property = " columnSetting " , type = " object " , nullable = true )
* )
*
* @ OA\Schema (
* schema = " UnitOption " ,
* type = " object " ,
*
* @ OA\Property ( property = " id " , type = " integer " , example = 1 ),
* @ OA\Property ( property = " tenant_id " , type = " integer " , example = 1 ),
* @ OA\Property ( property = " label " , type = " string " , example = " 개 " ),
* @ OA\Property ( property = " value " , type = " string " , example = " EA " ),
* @ OA\Property ( property = " created_at " , type = " string " , example = " 2025-11-20 10:00:00 " ),
* @ OA\Property ( property = " updated_at " , type = " string " , example = " 2025-11-20 10:00:00 " )
* )
*
* ========================================
* Request 스키마
* ========================================
*
* @ OA\Schema (
* schema = " ItemPageStoreRequest " ,
* type = " object " ,
* required = { " page_name " , " item_type " },
*
* @ OA\Property ( property = " page_name " , type = " string " , maxLength = 255 , example = " 기본 정보 " ),
* @ OA\Property ( property = " item_type " , type = " string " , enum = { " FG " , " PT " , " SM " , " RM " , " CS " }, example = " FG " ),
* @ OA\Property ( property = " absolute_path " , type = " string " , nullable = true , maxLength = 500 , example = " /items/fg/basic " )
* )
*
* @ OA\Schema (
* schema = " ItemPageUpdateRequest " ,
* type = " object " ,
*
* @ OA\Property ( property = " page_name " , type = " string " , maxLength = 255 , example = " 기본 정보 " ),
* @ OA\Property ( property = " absolute_path " , type = " string " , nullable = true , maxLength = 500 , example = " /items/fg/basic " )
* )
*
* @ OA\Schema (
* schema = " ItemSectionStoreRequest " ,
* type = " object " ,
* required = { " title " , " type " },
*
2025-11-27 10:28:51 +09:00
* @ OA\Property ( property = " group_id " , type = " integer " , nullable = true , example = 1 , description = " 계층번호 " ),
2025-11-20 17:27:34 +09:00
* @ OA\Property ( property = " title " , type = " string " , maxLength = 255 , example = " 제품 상세 " ),
* @ OA\Property ( property = " type " , type = " string " , enum = { " fields " , " bom " }, example = " fields " )
* )
*
* @ OA\Schema (
2025-11-26 14:09:31 +09:00
* schema = " IndependentSectionStoreRequest " ,
* type = " object " ,
* required = { " title " , " type " },
*
2025-11-27 10:28:51 +09:00
* @ OA\Property ( property = " group_id " , type = " integer " , nullable = true , example = 1 , description = " 계층번호 " ),
2025-12-09 09:39:16 +09:00
* @ OA\Property ( property = " title " , type = " string " , maxLength = 255 , example = " 섹션 " ),
2025-11-26 14:09:31 +09:00
* @ OA\Property ( property = " type " , type = " string " , enum = { " fields " , " bom " }, example = " fields " ),
* @ OA\Property ( property = " is_template " , type = " boolean " , example = false ),
* @ OA\Property ( property = " is_default " , type = " boolean " , example = false ),
* @ OA\Property ( property = " description " , type = " string " , nullable = true , example = " 섹션 설명 " )
* )
*
* @ OA\Schema (
* schema = " IndependentFieldStoreRequest " ,
* type = " object " ,
* required = { " field_name " , " field_type " },
*
2025-11-27 10:28:51 +09:00
* @ OA\Property ( property = " group_id " , type = " integer " , nullable = true , example = 1 , description = " 계층번호 " ),
2025-11-26 14:09:31 +09:00
* @ OA\Property ( property = " field_name " , type = " string " , maxLength = 255 , example = " 제품명 " ),
2025-11-28 17:39:14 +09:00
* @ OA\Property ( property = " field_key " , type = " string " , nullable = true , maxLength = 80 , example = " itemNum " , description = " 필드 고유 키 (영문+숫자+언더스코어, 저장 시 { ID}_ { key} 형식으로 변환) " ),
2025-11-26 14:09:31 +09:00
* @ OA\Property ( property = " field_type " , type = " string " , enum = { " textbox " , " number " , " dropdown " , " checkbox " , " date " , " textarea " }, example = " textbox " ),
* @ OA\Property ( property = " is_required " , type = " boolean " , example = false ),
* @ OA\Property ( property = " default_value " , type = " string " , nullable = true , example = null ),
* @ OA\Property ( property = " placeholder " , type = " string " , nullable = true , maxLength = 255 , example = " 입력하세요 " ),
* @ OA\Property ( property = " display_condition " , type = " object " , nullable = true , example = null ),
* @ OA\Property ( property = " validation_rules " , type = " object " , nullable = true , example = null ),
* @ OA\Property ( property = " options " , type = " object " , nullable = true , example = null ),
2025-11-28 17:39:14 +09:00
* @ OA\Property ( property = " properties " , type = " object " , nullable = true , example = null ),
* @ OA\Property ( property = " is_locked " , type = " boolean " , nullable = true , example = false , description = " 잠금 여부 " )
2025-11-26 14:09:31 +09:00
* )
*
* @ OA\Schema (
* schema = " IndependentBomItemStoreRequest " ,
* type = " object " ,
* required = { " item_name " },
*
2025-11-27 10:28:51 +09:00
* @ OA\Property ( property = " group_id " , type = " integer " , nullable = true , example = 1 , description = " 계층번호 " ),
2025-11-26 14:09:31 +09:00
* @ OA\Property ( property = " item_code " , type = " string " , nullable = true , maxLength = 100 , example = " ITEM001 " ),
* @ OA\Property ( property = " item_name " , type = " string " , maxLength = 255 , example = " 부품 A " ),
* @ OA\Property ( property = " quantity " , type = " number " , format = " float " , example = 1 ),
* @ OA\Property ( property = " unit " , type = " string " , nullable = true , maxLength = 50 , example = " EA " ),
* @ OA\Property ( property = " unit_price " , type = " number " , format = " float " , nullable = true , example = 10000 ),
* @ OA\Property ( property = " total_price " , type = " number " , format = " float " , nullable = true , example = 10000 ),
* @ OA\Property ( property = " spec " , type = " string " , nullable = true , example = " 규격 " ),
* @ OA\Property ( property = " note " , type = " string " , nullable = true , example = " 비고 " )
* )
*
* @ OA\Schema (
* schema = " SectionUsageResponse " ,
* type = " object " ,
2025-11-27 10:28:51 +09:00
* description = " 섹션 사용처 응답 (entity_relationships 기반) " ,
2025-11-26 14:09:31 +09:00
*
* @ OA\Property ( property = " section_id " , type = " integer " , example = 1 ),
* @ OA\Property ( property = " linked_pages " , type = " array " , @ OA\Items ( type = " object " )),
* @ OA\Property ( property = " total_usage_count " , type = " integer " , example = 2 )
* )
*
* @ OA\Schema (
* schema = " FieldUsageResponse " ,
* type = " object " ,
2025-11-27 10:28:51 +09:00
* description = " 필드 사용처 응답 (entity_relationships 기반) " ,
2025-11-26 14:09:31 +09:00
*
* @ OA\Property ( property = " field_id " , type = " integer " , example = 1 ),
* @ OA\Property ( property = " linked_sections " , type = " array " , @ OA\Items ( type = " object " )),
* @ OA\Property ( property = " linked_pages " , type = " array " , @ OA\Items ( type = " object " )),
* @ OA\Property ( property = " total_usage_count " , type = " integer " , example = 3 )
* )
*
* @ OA\Schema (
2025-11-20 17:27:34 +09:00
* schema = " ItemSectionUpdateRequest " ,
* type = " object " ,
*
* @ OA\Property ( property = " title " , type = " string " , maxLength = 255 , example = " 제품 상세 " )
* )
*
* @ OA\Schema (
* schema = " ItemFieldStoreRequest " ,
* type = " object " ,
* required = { " field_name " , " field_type " },
*
2025-11-27 10:28:51 +09:00
* @ OA\Property ( property = " group_id " , type = " integer " , nullable = true , example = 1 , description = " 계층번호 " ),
2025-11-20 17:27:34 +09:00
* @ OA\Property ( property = " field_name " , type = " string " , maxLength = 255 , example = " 제품명 " ),
2025-11-28 17:39:14 +09:00
* @ OA\Property ( property = " field_key " , type = " string " , nullable = true , maxLength = 80 , example = " itemNum " , description = " 필드 고유 키 (영문+숫자+언더스코어, 저장 시 { ID}_ { key} 형식으로 변환) " ),
2025-11-20 17:27:34 +09:00
* @ OA\Property ( property = " field_type " , type = " string " , enum = { " textbox " , " number " , " dropdown " , " checkbox " , " date " , " textarea " }, example = " textbox " ),
* @ OA\Property ( property = " is_required " , type = " boolean " , example = true ),
* @ OA\Property ( property = " default_value " , type = " string " , nullable = true , example = null ),
* @ OA\Property ( property = " placeholder " , type = " string " , nullable = true , maxLength = 255 , example = " 제품명을 입력하세요 " ),
* @ OA\Property ( property = " display_condition " , type = " object " , nullable = true , example = null ),
* @ OA\Property ( property = " validation_rules " , type = " object " , nullable = true , example = null ),
* @ OA\Property ( property = " options " , type = " object " , nullable = true , example = null ),
2025-11-28 17:39:14 +09:00
* @ OA\Property ( property = " properties " , type = " object " , nullable = true , example = null ),
* @ OA\Property ( property = " is_locked " , type = " boolean " , nullable = true , example = false , description = " 잠금 여부 " )
2025-11-20 17:27:34 +09:00
* )
*
* @ OA\Schema (
* schema = " ItemFieldUpdateRequest " ,
* type = " object " ,
*
* @ OA\Property ( property = " field_name " , type = " string " , maxLength = 255 , example = " 제품명 " ),
2025-11-28 17:39:14 +09:00
* @ OA\Property ( property = " field_key " , type = " string " , nullable = true , maxLength = 80 , example = " itemNum " , description = " 필드 고유 키 (영문+숫자+언더스코어) " ),
2025-11-20 17:27:34 +09:00
* @ OA\Property ( property = " field_type " , type = " string " , enum = { " textbox " , " number " , " dropdown " , " checkbox " , " date " , " textarea " }, example = " textbox " ),
* @ OA\Property ( property = " is_required " , type = " boolean " , example = true ),
* @ OA\Property ( property = " default_value " , type = " string " , nullable = true , example = null ),
* @ OA\Property ( property = " placeholder " , type = " string " , nullable = true , maxLength = 255 , example = " 제품명을 입력하세요 " ),
* @ OA\Property ( property = " display_condition " , type = " object " , nullable = true , example = null ),
* @ OA\Property ( property = " validation_rules " , type = " object " , nullable = true , example = null ),
* @ OA\Property ( property = " options " , type = " object " , nullable = true , example = null ),
2025-11-28 17:39:14 +09:00
* @ OA\Property ( property = " properties " , type = " object " , nullable = true , example = null ),
* @ OA\Property ( property = " is_locked " , type = " boolean " , nullable = true , example = false , description = " 잠금 여부 " )
2025-11-20 17:27:34 +09:00
* )
*
* @ OA\Schema (
* schema = " ItemBomItemStoreRequest " ,
* type = " object " ,
* required = { " item_name " },
*
2025-11-27 10:28:51 +09:00
* @ OA\Property ( property = " group_id " , type = " integer " , nullable = true , example = 1 , description = " 계층번호 " ),
2025-11-20 17:27:34 +09:00
* @ OA\Property ( property = " item_code " , type = " string " , nullable = true , maxLength = 100 , example = " ITEM001 " ),
* @ OA\Property ( property = " item_name " , type = " string " , maxLength = 255 , example = " 부품 A " ),
* @ OA\Property ( property = " quantity " , type = " number " , format = " float " , example = 1.5 ),
* @ OA\Property ( property = " unit " , type = " string " , nullable = true , maxLength = 50 , example = " EA " ),
* @ OA\Property ( property = " unit_price " , type = " number " , format = " float " , nullable = true , example = 10000 ),
* @ OA\Property ( property = " total_price " , type = " number " , format = " float " , nullable = true , example = 15000 ),
* @ OA\Property ( property = " spec " , type = " string " , nullable = true , example = " 규격 정보 " ),
* @ OA\Property ( property = " note " , type = " string " , nullable = true , example = " 비고 " )
* )
*
* @ OA\Schema (
* schema = " ItemBomItemUpdateRequest " ,
* type = " object " ,
*
* @ OA\Property ( property = " item_code " , type = " string " , nullable = true , maxLength = 100 , example = " ITEM001 " ),
* @ OA\Property ( property = " item_name " , type = " string " , maxLength = 255 , example = " 부품 A " ),
* @ OA\Property ( property = " quantity " , type = " number " , format = " float " , example = 1.5 ),
* @ OA\Property ( property = " unit " , type = " string " , nullable = true , maxLength = 50 , example = " EA " ),
* @ OA\Property ( property = " unit_price " , type = " number " , format = " float " , nullable = true , example = 10000 ),
* @ OA\Property ( property = " total_price " , type = " number " , format = " float " , nullable = true , example = 15000 ),
* @ OA\Property ( property = " spec " , type = " string " , nullable = true , example = " 규격 정보 " ),
* @ OA\Property ( property = " note " , type = " string " , nullable = true , example = " 비고 " )
* )
*
* @ OA\Schema (
* schema = " SectionTemplateStoreRequest " ,
* type = " object " ,
* required = { " title " , " type " },
*
2025-11-26 18:08:03 +09:00
* @ OA\Property ( property = " page_id " , type = " integer " , nullable = true , example = 1 , description = " 연결할 페이지 ID (선택, 있으면 즉시 링크 연결) " ),
* @ OA\Property ( property = " title " , type = " string " , maxLength = 255 , example = " 기본 섹션 " ),
2025-11-20 17:27:34 +09:00
* @ OA\Property ( property = " type " , type = " string " , enum = { " fields " , " bom " }, example = " fields " ),
* @ OA\Property ( property = " description " , type = " string " , nullable = true , example = " 설명 " ),
* @ OA\Property ( property = " is_default " , type = " boolean " , example = false )
* )
*
* @ OA\Schema (
* schema = " SectionTemplateUpdateRequest " ,
* type = " object " ,
*
* @ OA\Property ( property = " title " , type = " string " , maxLength = 255 , example = " 기본 템플릿 " ),
* @ OA\Property ( property = " type " , type = " string " , enum = { " fields " , " bom " }, example = " fields " ),
* @ OA\Property ( property = " description " , type = " string " , nullable = true , example = " 설명 " ),
* @ OA\Property ( property = " is_default " , type = " boolean " , example = false )
* )
*
* @ OA\Schema (
* schema = " CustomTabStoreRequest " ,
* type = " object " ,
* required = { " label " },
*
* @ OA\Property ( property = " label " , type = " string " , maxLength = 255 , example = " 커스텀 탭 " ),
* @ OA\Property ( property = " icon " , type = " string " , nullable = true , maxLength = 100 , example = " icon-name " ),
* @ OA\Property ( property = " is_default " , type = " boolean " , example = false )
* )
*
* @ OA\Schema (
* schema = " CustomTabUpdateRequest " ,
* type = " object " ,
*
* @ OA\Property ( property = " label " , type = " string " , maxLength = 255 , example = " 커스텀 탭 " ),
* @ OA\Property ( property = " icon " , type = " string " , nullable = true , maxLength = 100 , example = " icon-name " ),
* @ OA\Property ( property = " is_default " , type = " boolean " , example = false )
* )
*
* @ OA\Schema (
* schema = " UnitOptionStoreRequest " ,
* type = " object " ,
* required = { " label " , " value " },
*
* @ OA\Property ( property = " label " , type = " string " , maxLength = 100 , example = " 개 " ),
* @ OA\Property ( property = " value " , type = " string " , maxLength = 50 , example = " EA " )
* )
*
* @ OA\Schema (
* schema = " ReorderRequest " ,
* type = " object " ,
* required = { " items " },
*
* @ OA\Property (
* property = " items " ,
* type = " array " ,
*
* @ OA\Items (
* type = " object " ,
* required = { " id " , " order_no " },
*
* @ OA\Property ( property = " id " , type = " integer " , example = 1 ),
* @ OA\Property ( property = " order_no " , type = " integer " , example = 0 )
* ),
* example = {{ " id " : 1 , " order_no " : 0 },{ " id " : 2 , " order_no " : 1 }}
* )
* )
*
* ========================================
* Response 스키마
* ========================================
*
* @ OA\Schema (
* schema = " ItemMasterInitResponse " ,
* type = " object " ,
*
* @ OA\Property (
* property = " pages " ,
* type = " array " ,
2025-11-26 18:08:03 +09:00
* description = " 페이지 목록 (linkedSections 기반) " ,
2025-11-20 17:27:34 +09:00
*
* @ OA\Items ( ref = " #/components/schemas/ItemPage " )
* ),
*
* @ OA\Property (
2025-11-26 18:08:03 +09:00
* property = " sections " ,
2025-11-20 17:27:34 +09:00
* type = " array " ,
2025-12-09 09:39:16 +09:00
* description = " 모든 섹션 목록 (재사용 가능) " ,
2025-11-20 17:27:34 +09:00
*
2025-11-26 18:08:03 +09:00
* @ OA\Items ( ref = " #/components/schemas/ItemSection " )
2025-11-20 17:27:34 +09:00
* ),
*
* @ OA\Property (
2025-11-27 17:33:23 +09:00
* property = " fields " ,
* type = " array " ,
2025-12-09 09:39:16 +09:00
* description = " 모든 필드 목록 (재사용 가능) " ,
2025-11-27 17:33:23 +09:00
*
* @ OA\Items ( ref = " #/components/schemas/ItemField " )
* ),
*
* @ OA\Property (
2025-11-20 17:27:34 +09:00
* property = " customTabs " ,
* type = " array " ,
*
* @ OA\Items ( ref = " #/components/schemas/CustomTab " )
* ),
*
* @ OA\Property (
* property = " unitOptions " ,
* type = " array " ,
*
* @ OA\Items ( ref = " #/components/schemas/UnitOption " )
* )
* )
*/
class ItemMasterApi
{
2025-12-09 09:39:16 +09:00
// ════════════════════════════════════════════════════════════════════════
// 초기화
// ════════════════════════════════════════════════════════════════════════
2025-11-20 17:27:34 +09:00
/**
* @ OA\Get (
* path = " /api/v1/item-master/init " ,
* tags = { " ItemMaster " },
* summary = " 품목기준관리 초기 데이터 로드 " ,
* security = {{ " ApiKeyAuth " : {}},{ " BearerAuth " : {}}},
*
* @ OA\Response ( response = 200 , description = " 조회 성공 " ,
*
* @ OA\JsonContent ( allOf = {
*
* @ OA\Schema ( ref = " #/components/schemas/ApiResponse " ),
* @ OA\Schema ( @ OA\Property ( property = " data " , ref = " #/components/schemas/ItemMasterInitResponse " ))
* })
* ),
*
* @ OA\Response ( response = 401 , description = " 인증 실패 " , @ OA\JsonContent ( ref = " #/components/schemas/ErrorResponse " ))
* )
*/
public function init () {}
2025-12-09 09:39:16 +09:00
// ════════════════════════════════════════════════════════════════════════
// 필드 (Fields)
// ════════════════════════════════════════════════════════════════════════
2025-11-20 17:27:34 +09:00
/**
* @ OA\Get (
2025-12-09 09:39:16 +09:00
* path = " /api/v1/item-master/fields " ,
2025-11-20 17:27:34 +09:00
* tags = { " ItemMaster " },
2025-12-09 09:39:16 +09:00
* summary = " 필드 목록 조회 " ,
* description = " 섹션과 연결되지 않은 필드 목록을 조회합니다. " ,
2025-11-20 17:27:34 +09:00
* security = {{ " ApiKeyAuth " : {}},{ " BearerAuth " : {}}},
*
* @ OA\Response ( response = 200 , description = " 조회 성공 " ,
*
* @ OA\JsonContent ( allOf = {
*
* @ OA\Schema ( ref = " #/components/schemas/ApiResponse " ),
2025-12-09 09:39:16 +09:00
* @ OA\Schema ( @ OA\Property ( property = " data " , type = " array " , @ OA\Items ( ref = " #/components/schemas/ItemField " )))
2025-11-20 17:27:34 +09:00
* })
* ),
*
* @ OA\Response ( response = 401 , description = " 인증 실패 " , @ OA\JsonContent ( ref = " #/components/schemas/ErrorResponse " ))
* )
*/
2025-12-09 09:39:16 +09:00
public function indexFields () {}
2025-11-20 17:27:34 +09:00
/**
* @ OA\Post (
2025-12-09 09:39:16 +09:00
* path = " /api/v1/item-master/fields " ,
2025-11-20 17:27:34 +09:00
* tags = { " ItemMaster " },
2025-12-09 09:39:16 +09:00
* summary = " 필드 생성 " ,
* description = " 섹션과 연결되지 않은 필드를 생성합니다. " ,
2025-11-20 17:27:34 +09:00
* security = {{ " ApiKeyAuth " : {}},{ " BearerAuth " : {}}},
*
2025-12-09 09:39:16 +09:00
* @ OA\RequestBody ( required = true , @ OA\JsonContent ( ref = " #/components/schemas/IndependentFieldStoreRequest " )),
2025-11-20 17:27:34 +09:00
*
* @ OA\Response ( response = 200 , description = " 생성 성공 " ,
*
* @ OA\JsonContent ( allOf = {
*
* @ OA\Schema ( ref = " #/components/schemas/ApiResponse " ),
2025-12-09 09:39:16 +09:00
* @ OA\Schema ( @ OA\Property ( property = " data " , ref = " #/components/schemas/ItemField " ))
2025-11-20 17:27:34 +09:00
* })
* ),
*
* @ OA\Response ( response = 422 , description = " 검증 실패 " , @ OA\JsonContent ( ref = " #/components/schemas/ErrorResponse " ))
* )
*/
2025-12-09 09:39:16 +09:00
public function storeIndependentField () {}
/**
* @ OA\Post (
* path = " /api/v1/item-master/sections/ { sectionId}/fields " ,
* tags = { " ItemMaster " },
* summary = " 필드 생성 (섹션 연결) " ,
* security = {{ " ApiKeyAuth " : {}},{ " BearerAuth " : {}}},
*
* @ OA\Parameter ( name = " sectionId " , in = " path " , required = true , @ OA\Schema ( type = " integer " )),
*
* @ OA\RequestBody ( required = true , @ OA\JsonContent ( ref = " #/components/schemas/ItemFieldStoreRequest " )),
*
* @ OA\Response ( response = 200 , description = " 생성 성공 " ,
*
* @ OA\JsonContent ( allOf = {
*
* @ OA\Schema ( ref = " #/components/schemas/ApiResponse " ),
* @ OA\Schema ( @ OA\Property ( property = " data " , ref = " #/components/schemas/ItemField " ))
* })
* ),
*
* @ OA\Response ( response = 422 , description = " 검증 실패 " , @ OA\JsonContent ( ref = " #/components/schemas/ErrorResponse " ))
* )
*/
public function storeFields () {}
2025-11-20 17:27:34 +09:00
/**
* @ OA\Put (
2025-12-09 09:39:16 +09:00
* path = " /api/v1/item-master/fields/ { id} " ,
2025-11-20 17:27:34 +09:00
* tags = { " ItemMaster " },
2025-12-09 09:39:16 +09:00
* summary = " 필드 수정 " ,
2025-11-20 17:27:34 +09:00
* security = {{ " ApiKeyAuth " : {}},{ " BearerAuth " : {}}},
*
* @ OA\Parameter ( name = " id " , in = " path " , required = true , @ OA\Schema ( type = " integer " )),
*
2025-12-09 09:39:16 +09:00
* @ OA\RequestBody ( required = true , @ OA\JsonContent ( ref = " #/components/schemas/ItemFieldUpdateRequest " )),
2025-11-20 17:27:34 +09:00
*
* @ OA\Response ( response = 200 , description = " 수정 성공 " ,
*
* @ OA\JsonContent ( allOf = {
*
* @ OA\Schema ( ref = " #/components/schemas/ApiResponse " ),
2025-12-09 09:39:16 +09:00
* @ OA\Schema ( @ OA\Property ( property = " data " , ref = " #/components/schemas/ItemField " ))
2025-11-20 17:27:34 +09:00
* })
* ),
*
* @ OA\Response ( response = 404 , description = " 데이터 없음 " , @ OA\JsonContent ( ref = " #/components/schemas/ErrorResponse " ))
* )
*/
2025-12-09 09:39:16 +09:00
public function updateFields () {}
2025-11-20 17:27:34 +09:00
/**
* @ OA\Delete (
2025-12-09 09:39:16 +09:00
* path = " /api/v1/item-master/fields/ { id} " ,
2025-11-20 17:27:34 +09:00
* tags = { " ItemMaster " },
2025-12-09 09:39:16 +09:00
* summary = " 필드 삭제 " ,
2025-11-20 17:27:34 +09:00
* security = {{ " ApiKeyAuth " : {}},{ " BearerAuth " : {}}},
*
* @ OA\Parameter ( name = " id " , in = " path " , required = true , @ OA\Schema ( type = " integer " )),
*
* @ OA\Response ( response = 200 , description = " 삭제 성공 " , @ OA\JsonContent ( ref = " #/components/schemas/ApiResponse " )),
* @ OA\Response ( response = 404 , description = " 데이터 없음 " , @ OA\JsonContent ( ref = " #/components/schemas/ErrorResponse " ))
* )
*/
2025-12-09 09:39:16 +09:00
public function destroyFields () {}
2025-11-20 17:27:34 +09:00
2025-11-26 14:09:31 +09:00
/**
2025-12-09 09:39:16 +09:00
* @ OA\Put (
* path = " /api/v1/item-master/sections/ { sectionId}/fields/reorder " ,
2025-11-26 14:09:31 +09:00
* tags = { " ItemMaster " },
2025-12-09 09:39:16 +09:00
* summary = " 필드 순서 변경 " ,
2025-11-26 14:09:31 +09:00
* security = {{ " ApiKeyAuth " : {}},{ " BearerAuth " : {}}},
*
2025-12-09 09:39:16 +09:00
* @ OA\Parameter ( name = " sectionId " , in = " path " , required = true , @ OA\Schema ( type = " integer " )),
2025-11-26 14:09:31 +09:00
*
2025-12-09 09:39:16 +09:00
* @ OA\RequestBody ( required = true , @ OA\JsonContent ( ref = " #/components/schemas/ReorderRequest " )),
*
* @ OA\Response ( response = 200 , description = " 순서 변경 성공 " , @ OA\JsonContent ( ref = " #/components/schemas/ApiResponse " )),
* @ OA\Response ( response = 422 , description = " 검증 실패 " , @ OA\JsonContent ( ref = " #/components/schemas/ErrorResponse " ))
* )
*/
public function reorderFields () {}
/**
* @ OA\Post (
* path = " /api/v1/item-master/fields/ { id}/clone " ,
* tags = { " ItemMaster " },
* summary = " 필드 복제 " ,
* description = " 기존 필드를 복제하여 새 필드를 생성합니다. " ,
* security = {{ " ApiKeyAuth " : {}},{ " BearerAuth " : {}}},
*
* @ OA\Parameter ( name = " id " , in = " path " , required = true , description = " 복제할 필드 ID " , @ OA\Schema ( type = " integer " )),
*
* @ OA\Response ( response = 200 , description = " 복제 성공 " ,
2025-11-26 14:09:31 +09:00
*
* @ OA\JsonContent ( allOf = {
*
* @ OA\Schema ( ref = " #/components/schemas/ApiResponse " ),
2025-12-09 09:39:16 +09:00
* @ OA\Schema ( @ OA\Property ( property = " data " , ref = " #/components/schemas/ItemField " ))
2025-11-26 14:09:31 +09:00
* })
* ),
*
2025-12-09 09:39:16 +09:00
* @ OA\Response ( response = 404 , description = " 데이터 없음 " , @ OA\JsonContent ( ref = " #/components/schemas/ErrorResponse " ))
2025-11-26 14:09:31 +09:00
* )
*/
2025-12-09 09:39:16 +09:00
public function cloneField () {}
2025-11-26 14:09:31 +09:00
/**
2025-12-09 09:39:16 +09:00
* @ OA\Get (
* path = " /api/v1/item-master/fields/ { id}/usage " ,
2025-11-26 14:09:31 +09:00
* tags = { " ItemMaster " },
2025-12-09 09:39:16 +09:00
* summary = " 필드 사용처 조회 " ,
* description = " 필드가 어떤 섹션/페이지에 연결되어 있는지 조회합니다. " ,
2025-11-26 14:09:31 +09:00
* security = {{ " ApiKeyAuth " : {}},{ " BearerAuth " : {}}},
*
2025-12-09 09:39:16 +09:00
* @ OA\Parameter ( name = " id " , in = " path " , required = true , description = " 필드 ID " , @ OA\Schema ( type = " integer " )),
2025-11-26 14:09:31 +09:00
*
2025-12-09 09:39:16 +09:00
* @ OA\Response ( response = 200 , description = " 조회 성공 " ,
2025-11-26 14:09:31 +09:00
*
* @ OA\JsonContent ( allOf = {
*
* @ OA\Schema ( ref = " #/components/schemas/ApiResponse " ),
2025-12-09 09:39:16 +09:00
* @ OA\Schema ( @ OA\Property ( property = " data " , ref = " #/components/schemas/FieldUsageResponse " ))
2025-11-26 14:09:31 +09:00
* })
* ),
*
2025-12-09 09:39:16 +09:00
* @ OA\Response ( response = 404 , description = " 데이터 없음 " , @ OA\JsonContent ( ref = " #/components/schemas/ErrorResponse " ))
2025-11-26 14:09:31 +09:00
* )
*/
2025-12-09 09:39:16 +09:00
public function getFieldUsage () {}
// ════════════════════════════════════════════════════════════════════════
// 단위 (Unit Options)
// ════════════════════════════════════════════════════════════════════════
2025-11-26 14:09:31 +09:00
/**
2025-12-09 09:39:16 +09:00
* @ OA\Get (
* path = " /api/v1/item-master/unit-options " ,
2025-11-26 14:09:31 +09:00
* tags = { " ItemMaster " },
2025-12-09 09:39:16 +09:00
* summary = " 단위 옵션 목록 " ,
2025-11-26 14:09:31 +09:00
* security = {{ " ApiKeyAuth " : {}},{ " BearerAuth " : {}}},
*
2025-12-09 09:39:16 +09:00
* @ OA\Response ( response = 200 , description = " 조회 성공 " ,
2025-11-26 14:09:31 +09:00
*
* @ OA\JsonContent ( allOf = {
*
* @ OA\Schema ( ref = " #/components/schemas/ApiResponse " ),
2025-12-09 09:39:16 +09:00
* @ OA\Schema ( @ OA\Property ( property = " data " , type = " array " , @ OA\Items ( ref = " #/components/schemas/UnitOption " )))
2025-11-26 14:09:31 +09:00
* })
* ),
*
2025-12-09 09:39:16 +09:00
* @ OA\Response ( response = 401 , description = " 인증 실패 " , @ OA\JsonContent ( ref = " #/components/schemas/ErrorResponse " ))
2025-11-26 14:09:31 +09:00
* )
*/
2025-12-09 09:39:16 +09:00
public function indexUnitOptions () {}
2025-11-26 14:09:31 +09:00
/**
2025-12-09 09:39:16 +09:00
* @ OA\Post (
* path = " /api/v1/item-master/unit-options " ,
2025-11-26 14:09:31 +09:00
* tags = { " ItemMaster " },
2025-12-09 09:39:16 +09:00
* summary = " 단위 옵션 생성 " ,
2025-11-26 14:09:31 +09:00
* security = {{ " ApiKeyAuth " : {}},{ " BearerAuth " : {}}},
*
2025-12-09 09:39:16 +09:00
* @ OA\RequestBody ( required = true , @ OA\JsonContent ( ref = " #/components/schemas/UnitOptionStoreRequest " )),
2025-11-26 14:09:31 +09:00
*
2025-12-09 09:39:16 +09:00
* @ OA\Response ( response = 200 , description = " 생성 성공 " ,
2025-11-26 14:09:31 +09:00
*
* @ OA\JsonContent ( allOf = {
*
* @ OA\Schema ( ref = " #/components/schemas/ApiResponse " ),
2025-12-09 09:39:16 +09:00
* @ OA\Schema ( @ OA\Property ( property = " data " , ref = " #/components/schemas/UnitOption " ))
2025-11-26 14:09:31 +09:00
* })
* ),
*
2025-12-09 09:39:16 +09:00
* @ OA\Response ( response = 422 , description = " 검증 실패 " , @ OA\JsonContent ( ref = " #/components/schemas/ErrorResponse " ))
* )
*/
public function storeUnitOptions () {}
/**
* @ OA\Delete (
* path = " /api/v1/item-master/unit-options/ { id} " ,
* tags = { " ItemMaster " },
* summary = " 단위 옵션 삭제 " ,
* security = {{ " ApiKeyAuth " : {}},{ " BearerAuth " : {}}},
*
* @ OA\Parameter ( name = " id " , in = " path " , required = true , @ OA\Schema ( type = " integer " )),
*
* @ OA\Response ( response = 200 , description = " 삭제 성공 " , @ OA\JsonContent ( ref = " #/components/schemas/ApiResponse " )),
2025-11-26 14:09:31 +09:00
* @ OA\Response ( response = 404 , description = " 데이터 없음 " , @ OA\JsonContent ( ref = " #/components/schemas/ErrorResponse " ))
* )
*/
2025-12-09 09:39:16 +09:00
public function destroyUnitOptions () {}
// ════════════════════════════════════════════════════════════════════════
// 페이지 (Pages)
// ════════════════════════════════════════════════════════════════════════
2025-11-26 14:09:31 +09:00
/**
* @ OA\Get (
2025-12-09 09:39:16 +09:00
* path = " /api/v1/item-master/pages " ,
2025-11-26 14:09:31 +09:00
* tags = { " ItemMaster " },
2025-12-09 09:39:16 +09:00
* summary = " 페이지 목록 조회 " ,
2025-11-26 14:09:31 +09:00
* security = {{ " ApiKeyAuth " : {}},{ " BearerAuth " : {}}},
*
2025-12-09 09:39:16 +09:00
* @ OA\Parameter ( name = " item_type " , in = " query " , description = " 품목 유형 필터 " , @ OA\Schema ( type = " string " , enum = { " FG " , " PT " , " SM " , " RM " , " CS " })),
*
2025-11-26 14:09:31 +09:00
* @ OA\Response ( response = 200 , description = " 조회 성공 " ,
*
* @ OA\JsonContent ( allOf = {
*
* @ OA\Schema ( ref = " #/components/schemas/ApiResponse " ),
2025-12-09 09:39:16 +09:00
* @ OA\Schema ( @ OA\Property ( property = " data " , type = " array " , @ OA\Items ( ref = " #/components/schemas/ItemPage " )))
2025-11-26 14:09:31 +09:00
* })
* ),
*
* @ OA\Response ( response = 401 , description = " 인증 실패 " , @ OA\JsonContent ( ref = " #/components/schemas/ErrorResponse " ))
* )
*/
2025-12-09 09:39:16 +09:00
public function indexPages () {}
2025-11-26 14:09:31 +09:00
/**
* @ OA\Post (
2025-12-09 09:39:16 +09:00
* path = " /api/v1/item-master/pages " ,
2025-11-26 14:09:31 +09:00
* tags = { " ItemMaster " },
2025-12-09 09:39:16 +09:00
* summary = " 페이지 생성 " ,
2025-11-26 14:09:31 +09:00
* security = {{ " ApiKeyAuth " : {}},{ " BearerAuth " : {}}},
*
2025-12-09 09:39:16 +09:00
* @ OA\RequestBody ( required = true , @ OA\JsonContent ( ref = " #/components/schemas/ItemPageStoreRequest " )),
2025-11-26 14:09:31 +09:00
*
* @ OA\Response ( response = 200 , description = " 생성 성공 " ,
*
* @ OA\JsonContent ( allOf = {
*
* @ OA\Schema ( ref = " #/components/schemas/ApiResponse " ),
2025-12-09 09:39:16 +09:00
* @ OA\Schema ( @ OA\Property ( property = " data " , ref = " #/components/schemas/ItemPage " ))
2025-11-26 14:09:31 +09:00
* })
* ),
*
* @ OA\Response ( response = 422 , description = " 검증 실패 " , @ OA\JsonContent ( ref = " #/components/schemas/ErrorResponse " ))
* )
*/
2025-12-09 09:39:16 +09:00
public function storePages () {}
2025-11-26 14:09:31 +09:00
/**
2025-12-09 09:39:16 +09:00
* @ OA\Put (
* path = " /api/v1/item-master/pages/ { id} " ,
2025-11-26 14:09:31 +09:00
* tags = { " ItemMaster " },
2025-12-09 09:39:16 +09:00
* summary = " 페이지 수정 " ,
2025-11-26 14:09:31 +09:00
* security = {{ " ApiKeyAuth " : {}},{ " BearerAuth " : {}}},
*
2025-12-09 09:39:16 +09:00
* @ OA\Parameter ( name = " id " , in = " path " , required = true , @ OA\Schema ( type = " integer " )),
2025-11-26 14:09:31 +09:00
*
2025-12-09 09:39:16 +09:00
* @ OA\RequestBody ( required = true , @ OA\JsonContent ( ref = " #/components/schemas/ItemPageUpdateRequest " )),
*
* @ OA\Response ( response = 200 , description = " 수정 성공 " ,
2025-11-26 14:09:31 +09:00
*
* @ OA\JsonContent ( allOf = {
*
* @ OA\Schema ( ref = " #/components/schemas/ApiResponse " ),
2025-12-09 09:39:16 +09:00
* @ OA\Schema ( @ OA\Property ( property = " data " , ref = " #/components/schemas/ItemPage " ))
2025-11-26 14:09:31 +09:00
* })
* ),
*
* @ OA\Response ( response = 404 , description = " 데이터 없음 " , @ OA\JsonContent ( ref = " #/components/schemas/ErrorResponse " ))
* )
*/
2025-12-09 09:39:16 +09:00
public function updatePages () {}
2025-11-26 14:09:31 +09:00
/**
2025-12-09 09:39:16 +09:00
* @ OA\Delete (
* path = " /api/v1/item-master/pages/ { id} " ,
2025-11-26 14:09:31 +09:00
* tags = { " ItemMaster " },
2025-12-09 09:39:16 +09:00
* summary = " 페이지 삭제 " ,
* description = " 페이지를 삭제합니다. 연결된 섹션/필드는 삭제되지 않고 관계만 해제됩니다. " ,
2025-11-26 14:09:31 +09:00
* security = {{ " ApiKeyAuth " : {}},{ " BearerAuth " : {}}},
*
2025-12-09 09:39:16 +09:00
* @ OA\Parameter ( name = " id " , in = " path " , required = true , @ OA\Schema ( type = " integer " )),
2025-11-26 14:09:31 +09:00
*
2025-12-09 09:39:16 +09:00
* @ OA\Response ( response = 200 , description = " 삭제 성공 " , @ OA\JsonContent ( ref = " #/components/schemas/ApiResponse " )),
2025-11-26 14:09:31 +09:00
* @ OA\Response ( response = 404 , description = " 데이터 없음 " , @ OA\JsonContent ( ref = " #/components/schemas/ErrorResponse " ))
* )
*/
2025-12-09 09:39:16 +09:00
public function destroyPages () {}
// ════════════════════════════════════════════════════════════════════════
// 섹션 (Sections)
// ════════════════════════════════════════════════════════════════════════
2025-11-26 14:09:31 +09:00
/**
* @ OA\Get (
2025-12-09 09:39:16 +09:00
* path = " /api/v1/item-master/sections " ,
2025-11-26 14:09:31 +09:00
* tags = { " ItemMaster " },
2025-12-09 09:39:16 +09:00
* summary = " 섹션 목록 조회 " ,
* description = " 페이지와 연결되지 않은 섹션 목록을 조회합니다. is_template 파라미터로 템플릿 필터링이 가능합니다. " ,
2025-11-26 14:09:31 +09:00
* security = {{ " ApiKeyAuth " : {}},{ " BearerAuth " : {}}},
*
2025-12-09 09:39:16 +09:00
* @ OA\Parameter ( name = " is_template " , in = " query " , description = " 템플릿 여부 필터 " , @ OA\Schema ( type = " boolean " )),
*
2025-11-26 14:09:31 +09:00
* @ OA\Response ( response = 200 , description = " 조회 성공 " ,
*
* @ OA\JsonContent ( allOf = {
*
* @ OA\Schema ( ref = " #/components/schemas/ApiResponse " ),
2025-12-09 09:39:16 +09:00
* @ OA\Schema ( @ OA\Property ( property = " data " , type = " array " , @ OA\Items ( ref = " #/components/schemas/ItemSection " )))
2025-11-26 14:09:31 +09:00
* })
* ),
*
* @ OA\Response ( response = 401 , description = " 인증 실패 " , @ OA\JsonContent ( ref = " #/components/schemas/ErrorResponse " ))
* )
*/
2025-12-09 09:39:16 +09:00
public function indexSections () {}
2025-11-26 14:09:31 +09:00
/**
* @ OA\Post (
2025-12-09 09:39:16 +09:00
* path = " /api/v1/item-master/sections " ,
2025-11-26 14:09:31 +09:00
* tags = { " ItemMaster " },
2025-12-09 09:39:16 +09:00
* summary = " 섹션 생성 " ,
* description = " 페이지와 연결되지 않은 섹션을 생성합니다. " ,
2025-11-26 14:09:31 +09:00
* security = {{ " ApiKeyAuth " : {}},{ " BearerAuth " : {}}},
*
2025-12-09 09:39:16 +09:00
* @ OA\RequestBody ( required = true , @ OA\JsonContent ( ref = " #/components/schemas/IndependentSectionStoreRequest " )),
2025-11-26 14:09:31 +09:00
*
* @ OA\Response ( response = 200 , description = " 생성 성공 " ,
*
* @ OA\JsonContent ( allOf = {
*
* @ OA\Schema ( ref = " #/components/schemas/ApiResponse " ),
2025-12-09 09:39:16 +09:00
* @ OA\Schema ( @ OA\Property ( property = " data " , ref = " #/components/schemas/ItemSection " ))
2025-11-26 14:09:31 +09:00
* })
* ),
*
* @ OA\Response ( response = 422 , description = " 검증 실패 " , @ OA\JsonContent ( ref = " #/components/schemas/ErrorResponse " ))
* )
*/
2025-12-09 09:39:16 +09:00
public function storeIndependentSection () {}
2025-11-26 14:09:31 +09:00
2025-11-20 17:27:34 +09:00
/**
* @ OA\Post (
* path = " /api/v1/item-master/pages/ { pageId}/sections " ,
* tags = { " ItemMaster " },
2025-11-26 14:09:31 +09:00
* summary = " 섹션 생성 (페이지 연결) " ,
2025-11-20 17:27:34 +09:00
* security = {{ " ApiKeyAuth " : {}},{ " BearerAuth " : {}}},
*
* @ OA\Parameter ( name = " pageId " , in = " path " , required = true , @ OA\Schema ( type = " integer " )),
*
* @ OA\RequestBody ( required = true , @ OA\JsonContent ( ref = " #/components/schemas/ItemSectionStoreRequest " )),
*
* @ OA\Response ( response = 200 , description = " 생성 성공 " ,
*
* @ OA\JsonContent ( allOf = {
*
* @ OA\Schema ( ref = " #/components/schemas/ApiResponse " ),
* @ OA\Schema ( @ OA\Property ( property = " data " , ref = " #/components/schemas/ItemSection " ))
* })
* ),
*
* @ OA\Response ( response = 422 , description = " 검증 실패 " , @ OA\JsonContent ( ref = " #/components/schemas/ErrorResponse " ))
* )
*/
public function storeSections () {}
/**
* @ OA\Put (
* path = " /api/v1/item-master/sections/ { id} " ,
* tags = { " ItemMaster " },
* summary = " 섹션 수정 " ,
* security = {{ " ApiKeyAuth " : {}},{ " BearerAuth " : {}}},
*
* @ OA\Parameter ( name = " id " , in = " path " , required = true , @ OA\Schema ( type = " integer " )),
*
* @ OA\RequestBody ( required = true , @ OA\JsonContent ( ref = " #/components/schemas/ItemSectionUpdateRequest " )),
*
* @ OA\Response ( response = 200 , description = " 수정 성공 " ,
*
* @ OA\JsonContent ( allOf = {
*
* @ OA\Schema ( ref = " #/components/schemas/ApiResponse " ),
* @ OA\Schema ( @ OA\Property ( property = " data " , ref = " #/components/schemas/ItemSection " ))
* })
* ),
*
* @ OA\Response ( response = 404 , description = " 데이터 없음 " , @ OA\JsonContent ( ref = " #/components/schemas/ErrorResponse " ))
* )
*/
public function updateSections () {}
/**
* @ OA\Delete (
* path = " /api/v1/item-master/sections/ { id} " ,
* tags = { " ItemMaster " },
2025-11-27 10:28:51 +09:00
* summary = " 섹션 삭제 " ,
* description = " 섹션을 삭제합니다. 연결된 필드/BOM은 삭제되지 않고 관계만 해제됩니다. " ,
2025-11-20 17:27:34 +09:00
* security = {{ " ApiKeyAuth " : {}},{ " BearerAuth " : {}}},
*
* @ OA\Parameter ( name = " id " , in = " path " , required = true , @ OA\Schema ( type = " integer " )),
*
* @ OA\Response ( response = 200 , description = " 삭제 성공 " , @ OA\JsonContent ( ref = " #/components/schemas/ApiResponse " )),
* @ OA\Response ( response = 404 , description = " 데이터 없음 " , @ OA\JsonContent ( ref = " #/components/schemas/ErrorResponse " ))
* )
*/
public function destroySections () {}
/**
* @ OA\Put (
* path = " /api/v1/item-master/pages/ { pageId}/sections/reorder " ,
* tags = { " ItemMaster " },
* summary = " 섹션 순서 변경 " ,
* security = {{ " ApiKeyAuth " : {}},{ " BearerAuth " : {}}},
*
* @ OA\Parameter ( name = " pageId " , in = " path " , required = true , @ OA\Schema ( type = " integer " )),
*
* @ OA\RequestBody ( required = true , @ OA\JsonContent ( ref = " #/components/schemas/ReorderRequest " )),
*
* @ OA\Response ( response = 200 , description = " 순서 변경 성공 " , @ OA\JsonContent ( ref = " #/components/schemas/ApiResponse " )),
* @ OA\Response ( response = 422 , description = " 검증 실패 " , @ OA\JsonContent ( ref = " #/components/schemas/ErrorResponse " ))
* )
*/
public function reorderSections () {}
/**
* @ OA\Post (
2025-12-09 09:39:16 +09:00
* path = " /api/v1/item-master/sections/ { id}/clone " ,
2025-11-20 17:27:34 +09:00
* tags = { " ItemMaster " },
2025-12-09 09:39:16 +09:00
* summary = " 섹션 복제 " ,
* description = " 기존 섹션을 복제하여 새 섹션을 생성합니다. 하위 필드와 BOM 항목도 함께 복제됩니다. " ,
2025-11-20 17:27:34 +09:00
* security = {{ " ApiKeyAuth " : {}},{ " BearerAuth " : {}}},
*
2025-12-09 09:39:16 +09:00
* @ OA\Parameter ( name = " id " , in = " path " , required = true , description = " 복제할 섹션 ID " , @ OA\Schema ( type = " integer " )),
2025-11-20 17:27:34 +09:00
*
2025-12-09 09:39:16 +09:00
* @ OA\Response ( response = 200 , description = " 복제 성공 " ,
2025-11-20 17:27:34 +09:00
*
* @ OA\JsonContent ( allOf = {
*
* @ OA\Schema ( ref = " #/components/schemas/ApiResponse " ),
2025-12-09 09:39:16 +09:00
* @ OA\Schema ( @ OA\Property ( property = " data " , ref = " #/components/schemas/ItemSection " ))
2025-11-20 17:27:34 +09:00
* })
* ),
*
2025-12-09 09:39:16 +09:00
* @ OA\Response ( response = 404 , description = " 데이터 없음 " , @ OA\JsonContent ( ref = " #/components/schemas/ErrorResponse " ))
2025-11-20 17:27:34 +09:00
* )
*/
2025-12-09 09:39:16 +09:00
public function cloneSection () {}
2025-11-20 17:27:34 +09:00
/**
2025-12-09 09:39:16 +09:00
* @ OA\Get (
* path = " /api/v1/item-master/sections/ { id}/usage " ,
2025-11-20 17:27:34 +09:00
* tags = { " ItemMaster " },
2025-12-09 09:39:16 +09:00
* summary = " 섹션 사용처 조회 " ,
* description = " 섹션이 어떤 페이지에 연결되어 있는지 조회합니다 (entity_relationships 기반). " ,
2025-11-20 17:27:34 +09:00
* security = {{ " ApiKeyAuth " : {}},{ " BearerAuth " : {}}},
*
2025-12-09 09:39:16 +09:00
* @ OA\Parameter ( name = " id " , in = " path " , required = true , description = " 섹션 ID " , @ OA\Schema ( type = " integer " )),
2025-11-20 17:27:34 +09:00
*
2025-12-09 09:39:16 +09:00
* @ OA\Response ( response = 200 , description = " 조회 성공 " ,
2025-11-20 17:27:34 +09:00
*
* @ OA\JsonContent ( allOf = {
*
* @ OA\Schema ( ref = " #/components/schemas/ApiResponse " ),
2025-12-09 09:39:16 +09:00
* @ OA\Schema ( @ OA\Property ( property = " data " , ref = " #/components/schemas/SectionUsageResponse " ))
2025-11-20 17:27:34 +09:00
* })
* ),
*
* @ OA\Response ( response = 404 , description = " 데이터 없음 " , @ OA\JsonContent ( ref = " #/components/schemas/ErrorResponse " ))
* )
*/
2025-12-09 09:39:16 +09:00
public function getSectionUsage () {}
2025-11-20 17:27:34 +09:00
2025-12-09 09:39:16 +09:00
// ────────────────────────────────────────────────────────────────────────
// 섹션 템플릿 (Section Templates)
// ────────────────────────────────────────────────────────────────────────
2025-11-20 17:27:34 +09:00
/**
2025-12-09 09:39:16 +09:00
* @ OA\Get (
* path = " /api/v1/item-master/section-templates " ,
2025-11-20 17:27:34 +09:00
* tags = { " ItemMaster " },
2025-12-09 09:39:16 +09:00
* summary = " 섹션 템플릿 목록 " ,
2025-11-20 17:27:34 +09:00
* security = {{ " ApiKeyAuth " : {}},{ " BearerAuth " : {}}},
*
2025-12-09 09:39:16 +09:00
* @ OA\Response ( response = 200 , description = " 조회 성공 " ,
2025-11-20 17:27:34 +09:00
*
2025-12-09 09:39:16 +09:00
* @ OA\JsonContent ( allOf = {
2025-11-20 17:27:34 +09:00
*
2025-12-09 09:39:16 +09:00
* @ OA\Schema ( ref = " #/components/schemas/ApiResponse " ),
* @ OA\Schema ( @ OA\Property ( property = " data " , type = " array " , @ OA\Items ( ref = " #/components/schemas/SectionTemplate " )))
* })
* ),
*
* @ OA\Response ( response = 401 , description = " 인증 실패 " , @ OA\JsonContent ( ref = " #/components/schemas/ErrorResponse " ))
2025-11-20 17:27:34 +09:00
* )
*/
2025-12-09 09:39:16 +09:00
public function indexSectionTemplates () {}
2025-11-20 17:27:34 +09:00
/**
* @ OA\Post (
2025-12-09 09:39:16 +09:00
* path = " /api/v1/item-master/section-templates " ,
2025-11-20 17:27:34 +09:00
* tags = { " ItemMaster " },
2025-12-09 09:39:16 +09:00
* summary = " 섹션 템플릿 생성 " ,
2025-11-20 17:27:34 +09:00
* security = {{ " ApiKeyAuth " : {}},{ " BearerAuth " : {}}},
*
2025-12-09 09:39:16 +09:00
* @ OA\RequestBody ( required = true , @ OA\JsonContent ( ref = " #/components/schemas/SectionTemplateStoreRequest " )),
2025-11-20 17:27:34 +09:00
*
* @ OA\Response ( response = 200 , description = " 생성 성공 " ,
*
* @ OA\JsonContent ( allOf = {
*
* @ OA\Schema ( ref = " #/components/schemas/ApiResponse " ),
2025-12-09 09:39:16 +09:00
* @ OA\Schema ( @ OA\Property ( property = " data " , ref = " #/components/schemas/SectionTemplate " ))
2025-11-20 17:27:34 +09:00
* })
* ),
*
* @ OA\Response ( response = 422 , description = " 검증 실패 " , @ OA\JsonContent ( ref = " #/components/schemas/ErrorResponse " ))
* )
*/
2025-12-09 09:39:16 +09:00
public function storeSectionTemplates () {}
2025-11-20 17:27:34 +09:00
/**
* @ OA\Put (
2025-12-09 09:39:16 +09:00
* path = " /api/v1/item-master/section-templates/ { id} " ,
2025-11-20 17:27:34 +09:00
* tags = { " ItemMaster " },
2025-12-09 09:39:16 +09:00
* summary = " 섹션 템플릿 수정 " ,
2025-11-20 17:27:34 +09:00
* security = {{ " ApiKeyAuth " : {}},{ " BearerAuth " : {}}},
*
* @ OA\Parameter ( name = " id " , in = " path " , required = true , @ OA\Schema ( type = " integer " )),
*
2025-12-09 09:39:16 +09:00
* @ OA\RequestBody ( required = true , @ OA\JsonContent ( ref = " #/components/schemas/SectionTemplateUpdateRequest " )),
2025-11-20 17:27:34 +09:00
*
* @ OA\Response ( response = 200 , description = " 수정 성공 " ,
*
* @ OA\JsonContent ( allOf = {
*
* @ OA\Schema ( ref = " #/components/schemas/ApiResponse " ),
2025-12-09 09:39:16 +09:00
* @ OA\Schema ( @ OA\Property ( property = " data " , ref = " #/components/schemas/SectionTemplate " ))
2025-11-20 17:27:34 +09:00
* })
* ),
*
* @ OA\Response ( response = 404 , description = " 데이터 없음 " , @ OA\JsonContent ( ref = " #/components/schemas/ErrorResponse " ))
* )
*/
2025-12-09 09:39:16 +09:00
public function updateSectionTemplates () {}
2025-11-20 17:27:34 +09:00
/**
* @ OA\Delete (
2025-12-09 09:39:16 +09:00
* path = " /api/v1/item-master/section-templates/ { id} " ,
2025-11-20 17:27:34 +09:00
* tags = { " ItemMaster " },
2025-12-09 09:39:16 +09:00
* summary = " 섹션 템플릿 삭제 " ,
2025-11-20 17:27:34 +09:00
* security = {{ " ApiKeyAuth " : {}},{ " BearerAuth " : {}}},
*
* @ OA\Parameter ( name = " id " , in = " path " , required = true , @ OA\Schema ( type = " integer " )),
*
* @ OA\Response ( response = 200 , description = " 삭제 성공 " , @ OA\JsonContent ( ref = " #/components/schemas/ApiResponse " )),
* @ OA\Response ( response = 404 , description = " 데이터 없음 " , @ OA\JsonContent ( ref = " #/components/schemas/ErrorResponse " ))
* )
*/
2025-12-09 09:39:16 +09:00
public function destroySectionTemplates () {}
// ════════════════════════════════════════════════════════════════════════
// BOM
// ════════════════════════════════════════════════════════════════════════
2025-11-20 17:27:34 +09:00
/**
* @ OA\Get (
2025-12-09 09:39:16 +09:00
* path = " /api/v1/item-master/bom-items " ,
2025-11-20 17:27:34 +09:00
* tags = { " ItemMaster " },
2025-12-09 09:39:16 +09:00
* summary = " BOM 목록 조회 " ,
* description = " 섹션과 연결되지 않은 BOM 항목 목록을 조회합니다. " ,
2025-11-20 17:27:34 +09:00
* security = {{ " ApiKeyAuth " : {}},{ " BearerAuth " : {}}},
*
* @ OA\Response ( response = 200 , description = " 조회 성공 " ,
*
* @ OA\JsonContent ( allOf = {
*
* @ OA\Schema ( ref = " #/components/schemas/ApiResponse " ),
2025-12-09 09:39:16 +09:00
* @ OA\Schema ( @ OA\Property ( property = " data " , type = " array " , @ OA\Items ( ref = " #/components/schemas/ItemBomItem " )))
2025-11-20 17:27:34 +09:00
* })
* ),
*
* @ OA\Response ( response = 401 , description = " 인증 실패 " , @ OA\JsonContent ( ref = " #/components/schemas/ErrorResponse " ))
* )
*/
2025-12-09 09:39:16 +09:00
public function indexBomItems () {}
2025-11-20 17:27:34 +09:00
/**
* @ OA\Post (
2025-12-09 09:39:16 +09:00
* path = " /api/v1/item-master/bom-items " ,
2025-11-20 17:27:34 +09:00
* tags = { " ItemMaster " },
2025-12-09 09:39:16 +09:00
* summary = " BOM 생성 " ,
* description = " 섹션과 연결되지 않은 BOM 항목을 생성합니다. " ,
2025-11-20 17:27:34 +09:00
* security = {{ " ApiKeyAuth " : {}},{ " BearerAuth " : {}}},
*
2025-12-09 09:39:16 +09:00
* @ OA\RequestBody ( required = true , @ OA\JsonContent ( ref = " #/components/schemas/IndependentBomItemStoreRequest " )),
2025-11-20 17:27:34 +09:00
*
* @ OA\Response ( response = 200 , description = " 생성 성공 " ,
*
* @ OA\JsonContent ( allOf = {
*
* @ OA\Schema ( ref = " #/components/schemas/ApiResponse " ),
2025-12-09 09:39:16 +09:00
* @ OA\Schema ( @ OA\Property ( property = " data " , ref = " #/components/schemas/ItemBomItem " ))
2025-11-20 17:27:34 +09:00
* })
* ),
*
* @ OA\Response ( response = 422 , description = " 검증 실패 " , @ OA\JsonContent ( ref = " #/components/schemas/ErrorResponse " ))
* )
*/
2025-12-09 09:39:16 +09:00
public function storeIndependentBomItem () {}
/**
* @ OA\Post (
* path = " /api/v1/item-master/sections/ { sectionId}/bom-items " ,
* tags = { " ItemMaster " },
* summary = " BOM 항목 생성 (섹션 연결) " ,
* security = {{ " ApiKeyAuth " : {}},{ " BearerAuth " : {}}},
*
* @ OA\Parameter ( name = " sectionId " , in = " path " , required = true , @ OA\Schema ( type = " integer " )),
*
* @ OA\RequestBody ( required = true , @ OA\JsonContent ( ref = " #/components/schemas/ItemBomItemStoreRequest " )),
*
* @ OA\Response ( response = 200 , description = " 생성 성공 " ,
*
* @ OA\JsonContent ( allOf = {
*
* @ OA\Schema ( ref = " #/components/schemas/ApiResponse " ),
* @ OA\Schema ( @ OA\Property ( property = " data " , ref = " #/components/schemas/ItemBomItem " ))
* })
* ),
*
* @ OA\Response ( response = 422 , description = " 검증 실패 " , @ OA\JsonContent ( ref = " #/components/schemas/ErrorResponse " ))
* )
*/
public function storeBomItems () {}
2025-11-20 17:27:34 +09:00
/**
* @ OA\Put (
2025-12-09 09:39:16 +09:00
* path = " /api/v1/item-master/bom-items/ { id} " ,
2025-11-20 17:27:34 +09:00
* tags = { " ItemMaster " },
2025-12-09 09:39:16 +09:00
* summary = " BOM 항목 수정 " ,
2025-11-20 17:27:34 +09:00
* security = {{ " ApiKeyAuth " : {}},{ " BearerAuth " : {}}},
*
* @ OA\Parameter ( name = " id " , in = " path " , required = true , @ OA\Schema ( type = " integer " )),
*
2025-12-09 09:39:16 +09:00
* @ OA\RequestBody ( required = true , @ OA\JsonContent ( ref = " #/components/schemas/ItemBomItemUpdateRequest " )),
2025-11-20 17:27:34 +09:00
*
* @ OA\Response ( response = 200 , description = " 수정 성공 " ,
*
* @ OA\JsonContent ( allOf = {
*
* @ OA\Schema ( ref = " #/components/schemas/ApiResponse " ),
2025-12-09 09:39:16 +09:00
* @ OA\Schema ( @ OA\Property ( property = " data " , ref = " #/components/schemas/ItemBomItem " ))
2025-11-20 17:27:34 +09:00
* })
* ),
*
* @ OA\Response ( response = 404 , description = " 데이터 없음 " , @ OA\JsonContent ( ref = " #/components/schemas/ErrorResponse " ))
* )
*/
2025-12-09 09:39:16 +09:00
public function updateBomItems () {}
2025-11-20 17:27:34 +09:00
/**
* @ OA\Delete (
2025-12-09 09:39:16 +09:00
* path = " /api/v1/item-master/bom-items/ { id} " ,
2025-11-20 17:27:34 +09:00
* tags = { " ItemMaster " },
2025-12-09 09:39:16 +09:00
* summary = " BOM 항목 삭제 " ,
2025-11-20 17:27:34 +09:00
* security = {{ " ApiKeyAuth " : {}},{ " BearerAuth " : {}}},
*
* @ OA\Parameter ( name = " id " , in = " path " , required = true , @ OA\Schema ( type = " integer " )),
*
* @ OA\Response ( response = 200 , description = " 삭제 성공 " , @ OA\JsonContent ( ref = " #/components/schemas/ApiResponse " )),
* @ OA\Response ( response = 404 , description = " 데이터 없음 " , @ OA\JsonContent ( ref = " #/components/schemas/ErrorResponse " ))
* )
*/
2025-12-09 09:39:16 +09:00
public function destroyBomItems () {}
// ════════════════════════════════════════════════════════════════════════
// 커스텀 탭 (Custom Tabs)
// ════════════════════════════════════════════════════════════════════════
2025-11-20 17:27:34 +09:00
/**
* @ OA\Get (
* path = " /api/v1/item-master/custom-tabs " ,
* tags = { " ItemMaster " },
* summary = " 커스텀 탭 목록 " ,
* security = {{ " ApiKeyAuth " : {}},{ " BearerAuth " : {}}},
*
* @ OA\Response ( response = 200 , description = " 조회 성공 " ,
*
* @ OA\JsonContent ( allOf = {
*
* @ OA\Schema ( ref = " #/components/schemas/ApiResponse " ),
* @ OA\Schema ( @ OA\Property ( property = " data " , type = " array " , @ OA\Items ( ref = " #/components/schemas/CustomTab " )))
* })
* ),
*
* @ OA\Response ( response = 401 , description = " 인증 실패 " , @ OA\JsonContent ( ref = " #/components/schemas/ErrorResponse " ))
* )
*/
public function indexCustomTabs () {}
/**
* @ OA\Post (
* path = " /api/v1/item-master/custom-tabs " ,
* tags = { " ItemMaster " },
* summary = " 커스텀 탭 생성 " ,
* security = {{ " ApiKeyAuth " : {}},{ " BearerAuth " : {}}},
*
* @ OA\RequestBody ( required = true , @ OA\JsonContent ( ref = " #/components/schemas/CustomTabStoreRequest " )),
*
* @ OA\Response ( response = 200 , description = " 생성 성공 " ,
*
* @ OA\JsonContent ( allOf = {
*
* @ OA\Schema ( ref = " #/components/schemas/ApiResponse " ),
* @ OA\Schema ( @ OA\Property ( property = " data " , ref = " #/components/schemas/CustomTab " ))
* })
* ),
*
* @ OA\Response ( response = 422 , description = " 검증 실패 " , @ OA\JsonContent ( ref = " #/components/schemas/ErrorResponse " ))
* )
*/
public function storeCustomTabs () {}
/**
* @ OA\Put (
* path = " /api/v1/item-master/custom-tabs/ { id} " ,
* tags = { " ItemMaster " },
* summary = " 커스텀 탭 수정 " ,
* security = {{ " ApiKeyAuth " : {}},{ " BearerAuth " : {}}},
*
* @ OA\Parameter ( name = " id " , in = " path " , required = true , @ OA\Schema ( type = " integer " )),
*
* @ OA\RequestBody ( required = true , @ OA\JsonContent ( ref = " #/components/schemas/CustomTabUpdateRequest " )),
*
* @ OA\Response ( response = 200 , description = " 수정 성공 " ,
*
* @ OA\JsonContent ( allOf = {
*
* @ OA\Schema ( ref = " #/components/schemas/ApiResponse " ),
* @ OA\Schema ( @ OA\Property ( property = " data " , ref = " #/components/schemas/CustomTab " ))
* })
* ),
*
* @ OA\Response ( response = 404 , description = " 데이터 없음 " , @ OA\JsonContent ( ref = " #/components/schemas/ErrorResponse " ))
* )
*/
public function updateCustomTabs () {}
/**
* @ OA\Delete (
* path = " /api/v1/item-master/custom-tabs/ { id} " ,
* tags = { " ItemMaster " },
* summary = " 커스텀 탭 삭제 " ,
* security = {{ " ApiKeyAuth " : {}},{ " BearerAuth " : {}}},
*
* @ OA\Parameter ( name = " id " , in = " path " , required = true , @ OA\Schema ( type = " integer " )),
*
* @ OA\Response ( response = 200 , description = " 삭제 성공 " , @ OA\JsonContent ( ref = " #/components/schemas/ApiResponse " )),
* @ OA\Response ( response = 404 , description = " 데이터 없음 " , @ OA\JsonContent ( ref = " #/components/schemas/ErrorResponse " ))
* )
*/
public function destroyCustomTabs () {}
/**
* @ OA\Put (
* path = " /api/v1/item-master/custom-tabs/reorder " ,
* tags = { " ItemMaster " },
* summary = " 커스텀 탭 순서 변경 " ,
* security = {{ " ApiKeyAuth " : {}},{ " BearerAuth " : {}}},
*
* @ OA\RequestBody ( required = true , @ OA\JsonContent ( ref = " #/components/schemas/ReorderRequest " )),
*
* @ OA\Response ( response = 200 , description = " 순서 변경 성공 " , @ OA\JsonContent ( ref = " #/components/schemas/ApiResponse " )),
* @ OA\Response ( response = 422 , description = " 검증 실패 " , @ OA\JsonContent ( ref = " #/components/schemas/ErrorResponse " ))
* )
*/
public function reorderCustomTabs () {}
}