feat: [bending] 절곡품 관리 API 완성 + 데이터 마이그레이션
- GuiderailModelController/Service/Resource: 가이드레일/케이스/하단마감재 통합 CRUD - item_category 필터 (GUIDERAIL_MODEL/SHUTTERBOX_MODEL/BOTTOMBAR_MODEL) - BendingItemResource: legacy_bending_num 노출 추가 - ApiKeyMiddleware: guiderail-models, files 화이트리스트 추가 - Swagger: BendingItemApi, GuiderailModelApi 문서 (케이스/하단마감재 필드 포함) - 마이그레이션 커맨드 5개: GuiderailImportLegacy, BendingProductImportLegacy, BendingImportImages, BendingModelImportImages, BendingModelImportAssemblyImages - 데이터: GR 20건 + SB 30건 + BB 10건 + 이미지 473건 R2 업로드
This commit is contained in:
@@ -11,7 +11,7 @@
|
||||
"servers": [
|
||||
{
|
||||
"url": "https://api.sam.kr/",
|
||||
"description": "SAM관리시스템 API 서버"
|
||||
"description": "SAM API 서버"
|
||||
}
|
||||
],
|
||||
"paths": {
|
||||
@@ -9436,6 +9436,256 @@
|
||||
]
|
||||
}
|
||||
},
|
||||
"/api/v1/bending-items": {
|
||||
"get": {
|
||||
"tags": [
|
||||
"BendingItem"
|
||||
],
|
||||
"summary": "절곡품 목록 조회",
|
||||
"operationId": "c497d5bfebed3fb08cd4d5be9224c795",
|
||||
"parameters": [
|
||||
{
|
||||
"name": "item_sep",
|
||||
"in": "query",
|
||||
"required": false,
|
||||
"schema": {
|
||||
"type": "string",
|
||||
"enum": [
|
||||
"스크린",
|
||||
"철재"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "item_bending",
|
||||
"in": "query",
|
||||
"required": false,
|
||||
"schema": {
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "material",
|
||||
"in": "query",
|
||||
"required": false,
|
||||
"schema": {
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "model_UA",
|
||||
"in": "query",
|
||||
"required": false,
|
||||
"schema": {
|
||||
"type": "string",
|
||||
"enum": [
|
||||
"인정",
|
||||
"비인정"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "search",
|
||||
"in": "query",
|
||||
"required": false,
|
||||
"schema": {
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "page",
|
||||
"in": "query",
|
||||
"required": false,
|
||||
"schema": {
|
||||
"type": "integer"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "size",
|
||||
"in": "query",
|
||||
"required": false,
|
||||
"schema": {
|
||||
"type": "integer",
|
||||
"default": 50
|
||||
}
|
||||
}
|
||||
],
|
||||
"responses": {
|
||||
"200": {
|
||||
"description": "성공"
|
||||
}
|
||||
}
|
||||
},
|
||||
"post": {
|
||||
"tags": [
|
||||
"BendingItem"
|
||||
],
|
||||
"summary": "절곡품 등록",
|
||||
"operationId": "8c9e50c74611ec24e621ceb665031059",
|
||||
"requestBody": {
|
||||
"content": {
|
||||
"application/json": {
|
||||
"schema": {
|
||||
"required": [
|
||||
"code",
|
||||
"name",
|
||||
"item_name",
|
||||
"item_sep",
|
||||
"item_bending",
|
||||
"material"
|
||||
],
|
||||
"properties": {
|
||||
"code": {
|
||||
"type": "string"
|
||||
},
|
||||
"name": {
|
||||
"type": "string"
|
||||
},
|
||||
"item_name": {
|
||||
"type": "string"
|
||||
},
|
||||
"item_sep": {
|
||||
"type": "string",
|
||||
"enum": [
|
||||
"스크린",
|
||||
"철재"
|
||||
]
|
||||
},
|
||||
"item_bending": {
|
||||
"type": "string"
|
||||
},
|
||||
"material": {
|
||||
"type": "string"
|
||||
},
|
||||
"bendingData": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "object"
|
||||
},
|
||||
"nullable": true
|
||||
}
|
||||
},
|
||||
"type": "object"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"responses": {
|
||||
"200": {
|
||||
"description": "성공"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"/api/v1/bending-items/filters": {
|
||||
"get": {
|
||||
"tags": [
|
||||
"BendingItem"
|
||||
],
|
||||
"summary": "절곡품 필터 옵션 조회",
|
||||
"operationId": "f5dd325adc791e1b8cab40b9fa2fb77d",
|
||||
"responses": {
|
||||
"200": {
|
||||
"description": "성공"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"/api/v1/bending-items/{id}": {
|
||||
"get": {
|
||||
"tags": [
|
||||
"BendingItem"
|
||||
],
|
||||
"summary": "절곡품 상세 조회",
|
||||
"operationId": "d364f4d4cf76bcce7167561b73216382",
|
||||
"parameters": [
|
||||
{
|
||||
"name": "id",
|
||||
"in": "path",
|
||||
"required": true,
|
||||
"schema": {
|
||||
"type": "integer"
|
||||
}
|
||||
}
|
||||
],
|
||||
"responses": {
|
||||
"200": {
|
||||
"description": "성공"
|
||||
}
|
||||
}
|
||||
},
|
||||
"put": {
|
||||
"tags": [
|
||||
"BendingItem"
|
||||
],
|
||||
"summary": "절곡품 수정",
|
||||
"operationId": "9ce1223d6528c5f926f6726c2b1f65f2",
|
||||
"parameters": [
|
||||
{
|
||||
"name": "id",
|
||||
"in": "path",
|
||||
"required": true,
|
||||
"schema": {
|
||||
"type": "integer"
|
||||
}
|
||||
}
|
||||
],
|
||||
"requestBody": {
|
||||
"content": {
|
||||
"application/json": {
|
||||
"schema": {
|
||||
"properties": {
|
||||
"code": {
|
||||
"type": "string"
|
||||
},
|
||||
"name": {
|
||||
"type": "string"
|
||||
},
|
||||
"memo": {
|
||||
"type": "string"
|
||||
},
|
||||
"bendingData": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "object"
|
||||
},
|
||||
"nullable": true
|
||||
}
|
||||
},
|
||||
"type": "object"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"responses": {
|
||||
"200": {
|
||||
"description": "성공"
|
||||
}
|
||||
}
|
||||
},
|
||||
"delete": {
|
||||
"tags": [
|
||||
"BendingItem"
|
||||
],
|
||||
"summary": "절곡품 삭제",
|
||||
"operationId": "46dcd93439505ae5ffb1dd2c8c1e5685",
|
||||
"parameters": [
|
||||
{
|
||||
"name": "id",
|
||||
"in": "path",
|
||||
"required": true,
|
||||
"schema": {
|
||||
"type": "integer"
|
||||
}
|
||||
}
|
||||
],
|
||||
"responses": {
|
||||
"200": {
|
||||
"description": "성공"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"/api/v1/biddings": {
|
||||
"get": {
|
||||
"tags": [
|
||||
@@ -26052,6 +26302,243 @@
|
||||
]
|
||||
}
|
||||
},
|
||||
"/api/v1/guiderail-models": {
|
||||
"get": {
|
||||
"tags": [
|
||||
"GuiderailModel"
|
||||
],
|
||||
"summary": "절곡품 모델 목록 (가이드레일/케이스/하단마감재 통합)",
|
||||
"operationId": "f06bc491c0801ca7ec8676381ac5dc53",
|
||||
"parameters": [
|
||||
{
|
||||
"name": "item_category",
|
||||
"in": "query",
|
||||
"description": "필수: 카테고리 구분 (없으면 60건 전부 반환)",
|
||||
"required": true,
|
||||
"schema": {
|
||||
"type": "string",
|
||||
"enum": [
|
||||
"GUIDERAIL_MODEL",
|
||||
"SHUTTERBOX_MODEL",
|
||||
"BOTTOMBAR_MODEL"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "item_sep",
|
||||
"in": "query",
|
||||
"required": false,
|
||||
"schema": {
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "model_UA",
|
||||
"in": "query",
|
||||
"required": false,
|
||||
"schema": {
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "check_type",
|
||||
"in": "query",
|
||||
"required": false,
|
||||
"schema": {
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "model_name",
|
||||
"in": "query",
|
||||
"required": false,
|
||||
"schema": {
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "search",
|
||||
"in": "query",
|
||||
"required": false,
|
||||
"schema": {
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "page",
|
||||
"in": "query",
|
||||
"required": false,
|
||||
"schema": {
|
||||
"type": "integer"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "size",
|
||||
"in": "query",
|
||||
"required": false,
|
||||
"schema": {
|
||||
"type": "integer",
|
||||
"default": 50
|
||||
}
|
||||
}
|
||||
],
|
||||
"responses": {
|
||||
"200": {
|
||||
"description": "성공"
|
||||
}
|
||||
}
|
||||
},
|
||||
"post": {
|
||||
"tags": [
|
||||
"GuiderailModel"
|
||||
],
|
||||
"summary": "절곡품 모델 등록",
|
||||
"operationId": "6b4f759362fa6db48357bab171175f4f",
|
||||
"requestBody": {
|
||||
"content": {
|
||||
"application/json": {
|
||||
"schema": {
|
||||
"required": [
|
||||
"code",
|
||||
"name"
|
||||
],
|
||||
"properties": {
|
||||
"code": {
|
||||
"type": "string"
|
||||
},
|
||||
"name": {
|
||||
"type": "string"
|
||||
},
|
||||
"model_name": {
|
||||
"type": "string"
|
||||
},
|
||||
"check_type": {
|
||||
"type": "string"
|
||||
},
|
||||
"components": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "object"
|
||||
}
|
||||
}
|
||||
},
|
||||
"type": "object"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"responses": {
|
||||
"200": {
|
||||
"description": "성공"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"/api/v1/guiderail-models/filters": {
|
||||
"get": {
|
||||
"tags": [
|
||||
"GuiderailModel"
|
||||
],
|
||||
"summary": "절곡품 모델 필터 옵션",
|
||||
"operationId": "85422fba3619fcb7fac3db2a1dc20bb1",
|
||||
"responses": {
|
||||
"200": {
|
||||
"description": "성공"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"/api/v1/guiderail-models/{id}": {
|
||||
"get": {
|
||||
"tags": [
|
||||
"GuiderailModel"
|
||||
],
|
||||
"summary": "절곡품 모델 상세 (부품 조합 포함)",
|
||||
"operationId": "6c24a276c41bef2fb211b4d6d5a3c45a",
|
||||
"parameters": [
|
||||
{
|
||||
"name": "id",
|
||||
"in": "path",
|
||||
"required": true,
|
||||
"schema": {
|
||||
"type": "integer"
|
||||
}
|
||||
}
|
||||
],
|
||||
"responses": {
|
||||
"200": {
|
||||
"description": "성공"
|
||||
}
|
||||
}
|
||||
},
|
||||
"put": {
|
||||
"tags": [
|
||||
"GuiderailModel"
|
||||
],
|
||||
"summary": "절곡품 모델 수정",
|
||||
"operationId": "0284e070bc05779f643d8579c584de23",
|
||||
"parameters": [
|
||||
{
|
||||
"name": "id",
|
||||
"in": "path",
|
||||
"required": true,
|
||||
"schema": {
|
||||
"type": "integer"
|
||||
}
|
||||
}
|
||||
],
|
||||
"requestBody": {
|
||||
"content": {
|
||||
"application/json": {
|
||||
"schema": {
|
||||
"properties": {
|
||||
"model_name": {
|
||||
"type": "string"
|
||||
},
|
||||
"components": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "object"
|
||||
}
|
||||
},
|
||||
"material_summary": {
|
||||
"type": "object"
|
||||
}
|
||||
},
|
||||
"type": "object"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"responses": {
|
||||
"200": {
|
||||
"description": "성공"
|
||||
}
|
||||
}
|
||||
},
|
||||
"delete": {
|
||||
"tags": [
|
||||
"GuiderailModel"
|
||||
],
|
||||
"summary": "절곡품 모델 삭제",
|
||||
"operationId": "3468308d63c19adb4325812d9636bf5a",
|
||||
"parameters": [
|
||||
{
|
||||
"name": "id",
|
||||
"in": "path",
|
||||
"required": true,
|
||||
"schema": {
|
||||
"type": "integer"
|
||||
}
|
||||
}
|
||||
],
|
||||
"responses": {
|
||||
"200": {
|
||||
"description": "성공"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"/api/v1/internal/exchange-token": {
|
||||
"post": {
|
||||
"tags": [
|
||||
@@ -64189,6 +64676,177 @@
|
||||
},
|
||||
"type": "object"
|
||||
},
|
||||
"BendingItem": {
|
||||
"properties": {
|
||||
"id": {
|
||||
"type": "integer",
|
||||
"example": 15862
|
||||
},
|
||||
"code": {
|
||||
"type": "string",
|
||||
"example": "BD-BE-30"
|
||||
},
|
||||
"name": {
|
||||
"type": "string",
|
||||
"example": "하단마감재(스크린) EGI 3000mm"
|
||||
},
|
||||
"item_type": {
|
||||
"type": "string",
|
||||
"example": "PT"
|
||||
},
|
||||
"item_category": {
|
||||
"type": "string",
|
||||
"example": "BENDING"
|
||||
},
|
||||
"unit": {
|
||||
"type": "string",
|
||||
"example": "EA"
|
||||
},
|
||||
"is_active": {
|
||||
"type": "boolean",
|
||||
"example": true
|
||||
},
|
||||
"item_name": {
|
||||
"type": "string",
|
||||
"example": "하단마감재"
|
||||
},
|
||||
"item_sep": {
|
||||
"type": "string",
|
||||
"enum": [
|
||||
"스크린",
|
||||
"철재"
|
||||
]
|
||||
},
|
||||
"item_bending": {
|
||||
"type": "string",
|
||||
"example": "하단마감재"
|
||||
},
|
||||
"item_spec": {
|
||||
"type": "string",
|
||||
"example": "60*40",
|
||||
"nullable": true
|
||||
},
|
||||
"material": {
|
||||
"type": "string",
|
||||
"example": "EGI 1.55T"
|
||||
},
|
||||
"model_name": {
|
||||
"type": "string",
|
||||
"example": "KSS01",
|
||||
"nullable": true
|
||||
},
|
||||
"model_UA": {
|
||||
"type": "string",
|
||||
"enum": [
|
||||
"인정",
|
||||
"비인정"
|
||||
],
|
||||
"nullable": true
|
||||
},
|
||||
"search_keyword": {
|
||||
"type": "string",
|
||||
"nullable": true
|
||||
},
|
||||
"rail_width": {
|
||||
"type": "integer",
|
||||
"nullable": true
|
||||
},
|
||||
"registration_date": {
|
||||
"type": "string",
|
||||
"format": "date",
|
||||
"nullable": true
|
||||
},
|
||||
"author": {
|
||||
"type": "string",
|
||||
"nullable": true
|
||||
},
|
||||
"memo": {
|
||||
"type": "string",
|
||||
"nullable": true
|
||||
},
|
||||
"exit_direction": {
|
||||
"type": "string",
|
||||
"nullable": true
|
||||
},
|
||||
"front_bottom_width": {
|
||||
"type": "integer",
|
||||
"nullable": true
|
||||
},
|
||||
"box_width": {
|
||||
"type": "integer",
|
||||
"nullable": true
|
||||
},
|
||||
"box_height": {
|
||||
"type": "integer",
|
||||
"nullable": true
|
||||
},
|
||||
"bendingData": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"properties": {
|
||||
"no": {
|
||||
"type": "integer"
|
||||
},
|
||||
"input": {
|
||||
"type": "number"
|
||||
},
|
||||
"rate": {
|
||||
"type": "string"
|
||||
},
|
||||
"sum": {
|
||||
"type": "number"
|
||||
},
|
||||
"color": {
|
||||
"type": "boolean"
|
||||
},
|
||||
"aAngle": {
|
||||
"type": "boolean"
|
||||
}
|
||||
},
|
||||
"type": "object"
|
||||
},
|
||||
"nullable": true
|
||||
},
|
||||
"prefix": {
|
||||
"type": "string",
|
||||
"example": "BE",
|
||||
"nullable": true
|
||||
},
|
||||
"length_code": {
|
||||
"type": "string",
|
||||
"example": "30",
|
||||
"nullable": true
|
||||
},
|
||||
"length_mm": {
|
||||
"type": "integer",
|
||||
"example": 3000,
|
||||
"nullable": true
|
||||
},
|
||||
"legacy_bending_num": {
|
||||
"description": "레거시 chandj bending.num (운영 전 삭제 예정)",
|
||||
"type": "integer",
|
||||
"nullable": true
|
||||
},
|
||||
"width_sum": {
|
||||
"type": "integer",
|
||||
"example": 193,
|
||||
"nullable": true
|
||||
},
|
||||
"bend_count": {
|
||||
"type": "integer",
|
||||
"example": 5
|
||||
},
|
||||
"created_at": {
|
||||
"type": "string",
|
||||
"format": "date-time"
|
||||
},
|
||||
"updated_at": {
|
||||
"type": "string",
|
||||
"format": "date-time"
|
||||
}
|
||||
},
|
||||
"type": "object"
|
||||
},
|
||||
"Bidding": {
|
||||
"properties": {
|
||||
"id": {
|
||||
@@ -73925,6 +74583,152 @@
|
||||
},
|
||||
"type": "object"
|
||||
},
|
||||
"GuiderailModel": {
|
||||
"properties": {
|
||||
"id": {
|
||||
"type": "integer"
|
||||
},
|
||||
"code": {
|
||||
"type": "string",
|
||||
"example": "GR-KSS01-벽면형-SUS"
|
||||
},
|
||||
"name": {
|
||||
"type": "string",
|
||||
"example": "KSS01 벽면형 SUS마감"
|
||||
},
|
||||
"item_category": {
|
||||
"type": "string",
|
||||
"enum": [
|
||||
"GUIDERAIL_MODEL",
|
||||
"SHUTTERBOX_MODEL",
|
||||
"BOTTOMBAR_MODEL"
|
||||
]
|
||||
},
|
||||
"model_name": {
|
||||
"type": "string",
|
||||
"example": "KSS01",
|
||||
"nullable": true
|
||||
},
|
||||
"check_type": {
|
||||
"type": "string",
|
||||
"enum": [
|
||||
"벽면형",
|
||||
"측면형"
|
||||
],
|
||||
"nullable": true
|
||||
},
|
||||
"rail_width": {
|
||||
"type": "integer",
|
||||
"example": 70,
|
||||
"nullable": true
|
||||
},
|
||||
"rail_length": {
|
||||
"type": "integer",
|
||||
"example": 120,
|
||||
"nullable": true
|
||||
},
|
||||
"finishing_type": {
|
||||
"type": "string",
|
||||
"enum": [
|
||||
"SUS마감",
|
||||
"EGI마감"
|
||||
],
|
||||
"nullable": true
|
||||
},
|
||||
"item_sep": {
|
||||
"type": "string",
|
||||
"enum": [
|
||||
"스크린",
|
||||
"철재"
|
||||
],
|
||||
"nullable": true
|
||||
},
|
||||
"model_UA": {
|
||||
"type": "string",
|
||||
"enum": [
|
||||
"인정",
|
||||
"비인정"
|
||||
],
|
||||
"nullable": true
|
||||
},
|
||||
"exit_direction": {
|
||||
"description": "케이스 점검구 방향",
|
||||
"type": "string",
|
||||
"nullable": true
|
||||
},
|
||||
"front_bottom_width": {
|
||||
"description": "케이스 전면밑",
|
||||
"type": "integer",
|
||||
"nullable": true
|
||||
},
|
||||
"box_width": {
|
||||
"description": "케이스 너비",
|
||||
"type": "integer",
|
||||
"nullable": true
|
||||
},
|
||||
"box_height": {
|
||||
"description": "케이스 높이",
|
||||
"type": "integer",
|
||||
"nullable": true
|
||||
},
|
||||
"bar_width": {
|
||||
"description": "하단마감재 폭",
|
||||
"type": "integer",
|
||||
"nullable": true
|
||||
},
|
||||
"bar_height": {
|
||||
"description": "하단마감재 높이",
|
||||
"type": "integer",
|
||||
"nullable": true
|
||||
},
|
||||
"components": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"properties": {
|
||||
"orderNumber": {
|
||||
"type": "integer"
|
||||
},
|
||||
"itemName": {
|
||||
"type": "string"
|
||||
},
|
||||
"material": {
|
||||
"type": "string"
|
||||
},
|
||||
"quantity": {
|
||||
"type": "integer"
|
||||
},
|
||||
"width_sum": {
|
||||
"type": "number"
|
||||
},
|
||||
"image_file_id": {
|
||||
"description": "부품 이미지 → /api/v1/files/{id}/view",
|
||||
"type": "integer",
|
||||
"nullable": true
|
||||
},
|
||||
"bendingData": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "object"
|
||||
}
|
||||
}
|
||||
},
|
||||
"type": "object"
|
||||
}
|
||||
},
|
||||
"material_summary": {
|
||||
"type": "object",
|
||||
"example": {
|
||||
"SUS 1.2T": 406,
|
||||
"EGI 1.55T": 398
|
||||
}
|
||||
},
|
||||
"component_count": {
|
||||
"type": "integer",
|
||||
"example": 4
|
||||
}
|
||||
},
|
||||
"type": "object"
|
||||
},
|
||||
"ExchangeTokenRequest": {
|
||||
"required": [
|
||||
"user_id",
|
||||
@@ -93801,6 +94605,10 @@
|
||||
"name": "BarobillSettings",
|
||||
"description": "바로빌 설정 관리"
|
||||
},
|
||||
{
|
||||
"name": "BendingItem",
|
||||
"description": "절곡품 기초관리"
|
||||
},
|
||||
{
|
||||
"name": "Bidding",
|
||||
"description": "입찰관리 API"
|
||||
@@ -93905,6 +94713,10 @@
|
||||
"name": "Folder",
|
||||
"description": "폴더 관리"
|
||||
},
|
||||
{
|
||||
"name": "GuiderailModel",
|
||||
"description": "절곡품 모델 관리 (가이드레일/케이스/하단마감재)"
|
||||
},
|
||||
{
|
||||
"name": "ItemMaster",
|
||||
"description": "품목기준관리 API"
|
||||
|
||||
Reference in New Issue
Block a user