{
  "name": "품목 삭제 테스트 (Force Delete & 사용중 체크)",
  "description": "품목 삭제 기능 테스트: 1) 사용되지 않는 품목은 Force Delete 2) 사용 중인 품목은 삭제 불가 에러 반환",
  "version": "1.0",
  "config": {
    "baseUrl": "",
    "timeout": 30000,
    "stopOnFailure": true
  },
  "variables": {
    "user_id": "{{$env.FLOW_TESTER_USER_ID}}",
    "user_pwd": "{{$env.FLOW_TESTER_USER_PWD}}",
    "ts": "{{$timestamp}}"
  },
  "steps": [
    {
      "id": "login",
      "name": "로그인",
      "method": "POST",
      "endpoint": "/login",
      "body": {
        "user_id": "{{user_id}}",
        "user_pwd": "{{user_pwd}}"
      },
      "expect": {
        "status": [200],
        "jsonPath": {
          "$.access_token": "@isString"
        }
      },
      "extract": {
        "token": "$.access_token"
      }
    },
    {
      "id": "create_test_product",
      "name": "테스트용 제품 생성 (FG)",
      "method": "POST",
      "endpoint": "/items",
      "headers": {
        "Authorization": "Bearer {{login.token}}"
      },
      "body": {
        "product_type": "FG",
        "code": "TEST-DEL-FG-{{ts}}",
        "name": "삭제테스트용 완제품",
        "unit": "EA",
        "is_active": true
      },
      "expect": {
        "status": [200, 201],
        "jsonPath": {
          "$.success": true,
          "$.data.id": "@isNumber"
        }
      },
      "extract": {
        "product_id": "$.data.id",
        "product_code": "$.data.code"
      }
    },
    {
      "id": "create_test_material",
      "name": "테스트용 자재 생성 (RM)",
      "method": "POST",
      "endpoint": "/items",
      "headers": {
        "Authorization": "Bearer {{login.token}}"
      },
      "body": {
        "product_type": "RM",
        "code": "TEST-DEL-RM-{{ts}}",
        "name": "삭제테스트용 원자재",
        "unit": "EA",
        "is_active": true
      },
      "expect": {
        "status": [200, 201],
        "jsonPath": {
          "$.success": true,
          "$.data.id": "@isNumber"
        }
      },
      "extract": {
        "material_id": "$.data.id",
        "material_code": "$.data.code"
      }
    },
    {
      "id": "delete_unused_product",
      "name": "사용되지 않는 제품 삭제 (Force Delete 성공)",
      "method": "DELETE",
      "endpoint": "/items/{{create_test_product.product_id}}?item_type=FG",
      "headers": {
        "Authorization": "Bearer {{login.token}}"
      },
      "expect": {
        "status": [200],
        "jsonPath": {
          "$.success": true
        }
      }
    },
    {
      "id": "verify_product_deleted",
      "name": "제품 영구 삭제 확인 (404 응답)",
      "method": "GET",
      "endpoint": "/items/{{create_test_product.product_id}}",
      "headers": {
        "Authorization": "Bearer {{login.token}}"
      },
      "expect": {
        "status": [404],
        "jsonPath": {
          "$.success": false
        }
      }
    },
    {
      "id": "delete_unused_material",
      "name": "사용되지 않는 자재 삭제 (Force Delete 성공)",
      "method": "DELETE",
      "endpoint": "/items/{{create_test_material.material_id}}?item_type=RM",
      "headers": {
        "Authorization": "Bearer {{login.token}}"
      },
      "expect": {
        "status": [200],
        "jsonPath": {
          "$.success": true
        }
      }
    },
    {
      "id": "verify_material_deleted",
      "name": "자재 영구 삭제 확인 (404 응답)",
      "method": "GET",
      "endpoint": "/items/{{create_test_material.material_id}}?item_type=RM",
      "headers": {
        "Authorization": "Bearer {{login.token}}"
      },
      "expect": {
        "status": [404],
        "jsonPath": {
          "$.success": false
        }
      }
    },
    {
      "id": "create_parent_product",
      "name": "BOM 상위 제품 생성",
      "method": "POST",
      "endpoint": "/items",
      "headers": {
        "Authorization": "Bearer {{login.token}}"
      },
      "body": {
        "product_type": "FG",
        "code": "TEST-BOM-PARENT-{{ts}}",
        "name": "BOM 상위 제품",
        "unit": "EA",
        "is_active": true
      },
      "expect": {
        "status": [200, 201],
        "jsonPath": {
          "$.success": true,
          "$.data.id": "@isNumber"
        }
      },
      "extract": {
        "parent_id": "$.data.id"
      }
    },
    {
      "id": "create_child_material",
      "name": "BOM 구성품용 자재 생성",
      "method": "POST",
      "endpoint": "/items",
      "headers": {
        "Authorization": "Bearer {{login.token}}"
      },
      "body": {
        "product_type": "RM",
        "code": "TEST-BOM-CHILD-{{ts}}",
        "name": "BOM 구성품 자재",
        "unit": "EA",
        "is_active": true
      },
      "expect": {
        "status": [200, 201],
        "jsonPath": {
          "$.success": true,
          "$.data.id": "@isNumber"
        }
      },
      "extract": {
        "child_material_id": "$.data.id",
        "child_material_code": "$.data.code"
      }
    },
    {
      "id": "add_bom_component",
      "name": "BOM 구성품 추가 (자재를 상위 제품에 연결)",
      "method": "POST",
      "endpoint": "/items/{{create_parent_product.parent_id}}/bom",
      "headers": {
        "Authorization": "Bearer {{login.token}}"
      },
      "body": {
        "items": [
          {
            "ref_type": "MATERIAL",
            "ref_id": "{{create_child_material.child_material_id}}",
            "quantity": 2,
            "unit": "EA"
          }
        ]
      },
      "expect": {
        "status": [200, 201],
        "jsonPath": {
          "$.success": true
        }
      }
    },
    {
      "id": "delete_used_material",
      "name": "사용 중인 자재 삭제 시도 (400 에러 - BOM 구성품)",
      "method": "DELETE",
      "endpoint": "/items/{{create_child_material.child_material_id}}?item_type=RM",
      "headers": {
        "Authorization": "Bearer {{login.token}}"
      },
      "expect": {
        "status": [400],
        "jsonPath": {
          "$.success": false
        }
      }
    },
    {
      "id": "create_batch_products",
      "name": "일괄 삭제용 제품 1 생성",
      "method": "POST",
      "endpoint": "/items",
      "headers": {
        "Authorization": "Bearer {{login.token}}"
      },
      "body": {
        "product_type": "FG",
        "code": "TEST-BATCH-1-{{ts}}",
        "name": "일괄삭제 테스트 1",
        "unit": "EA",
        "is_active": true
      },
      "expect": {
        "status": [200, 201],
        "jsonPath": {
          "$.success": true,
          "$.data.id": "@isNumber"
        }
      },
      "extract": {
        "batch_id_1": "$.data.id"
      }
    },
    {
      "id": "create_batch_products_2",
      "name": "일괄 삭제용 제품 2 생성",
      "method": "POST",
      "endpoint": "/items",
      "headers": {
        "Authorization": "Bearer {{login.token}}"
      },
      "body": {
        "product_type": "FG",
        "code": "TEST-BATCH-2-{{ts}}",
        "name": "일괄삭제 테스트 2",
        "unit": "EA",
        "is_active": true
      },
      "expect": {
        "status": [200, 201],
        "jsonPath": {
          "$.success": true,
          "$.data.id": "@isNumber"
        }
      },
      "extract": {
        "batch_id_2": "$.data.id"
      }
    },
    {
      "id": "batch_delete_unused",
      "name": "사용되지 않는 제품들 일괄 삭제 (성공)",
      "method": "DELETE",
      "endpoint": "/items/batch",
      "headers": {
        "Authorization": "Bearer {{login.token}}"
      },
      "body": {
        "item_type": "FG",
        "ids": ["{{create_batch_products.batch_id_1}}", "{{create_batch_products_2.batch_id_2}}"]
      },
      "expect": {
        "status": [200],
        "jsonPath": {
          "$.success": true
        }
      }
    },
    {
      "id": "create_batch_for_fail",
      "name": "일괄 삭제 실패 테스트용 제품 생성",
      "method": "POST",
      "endpoint": "/items",
      "headers": {
        "Authorization": "Bearer {{login.token}}"
      },
      "body": {
        "product_type": "FG",
        "code": "TEST-BATCH-FAIL-{{ts}}",
        "name": "일괄삭제 실패 테스트",
        "unit": "EA",
        "is_active": true
      },
      "expect": {
        "status": [200, 201],
        "jsonPath": {
          "$.success": true,
          "$.data.id": "@isNumber"
        }
      },
      "extract": {
        "batch_fail_id": "$.data.id"
      }
    },
    {
      "id": "batch_delete_with_used",
      "name": "사용 중인 자재 일괄 삭제 시도 (400 에러)",
      "method": "DELETE",
      "endpoint": "/items/batch",
      "headers": {
        "Authorization": "Bearer {{login.token}}"
      },
      "body": {
        "item_type": "RM",
        "ids": ["{{create_child_material.child_material_id}}"]
      },
      "expect": {
        "status": [400],
        "jsonPath": {
          "$.success": false
        }
      }
    },
    {
      "id": "cleanup_bom",
      "name": "정리: BOM 구성품 전체 삭제 (빈 배열로 교체)",
      "method": "POST",
      "endpoint": "/items/{{create_parent_product.parent_id}}/bom/replace",
      "headers": {
        "Authorization": "Bearer {{login.token}}"
      },
      "body": {
        "items": []
      },
      "expect": {
        "status": [200, 201, 404]
      }
    },
    {
      "id": "cleanup_parent",
      "name": "정리: 상위 제품 삭제",
      "method": "DELETE",
      "endpoint": "/items/{{create_parent_product.parent_id}}?item_type=FG",
      "headers": {
        "Authorization": "Bearer {{login.token}}"
      },
      "expect": {
        "status": [200, 404]
      }
    },
    {
      "id": "cleanup_child",
      "name": "정리: 구성품 자재 삭제 (BOM 해제 후)",
      "method": "DELETE",
      "endpoint": "/items/{{create_child_material.child_material_id}}?item_type=RM",
      "headers": {
        "Authorization": "Bearer {{login.token}}"
      },
      "expect": {
        "status": [200, 404]
      }
    },
    {
      "id": "cleanup_batch_fail",
      "name": "정리: 일괄삭제 테스트용 제품 삭제",
      "method": "DELETE",
      "endpoint": "/items/{{create_batch_for_fail.batch_fail_id}}?item_type=FG",
      "headers": {
        "Authorization": "Bearer {{login.token}}"
      },
      "expect": {
        "status": [200, 404]
      }
    }
  ]
}