refactor(item-master): 독립 엔티티 아키텍처 적용 및 Swagger 보완

- FK 컬럼 제거: item_sections.page_id, item_fields.section_id, item_bom_items.section_id
- entity_relationships 테이블로 전환하여 독립 엔티티 구조 확립
- ItemMasterField 관련 파일 삭제 (Controller, Service, Model, Requests)
- destroy 메서드 독립 엔티티 아키텍처 적용 (관계 링크만 삭제)
- Swagger 스키마에서 FK 참조 제거
- FormRequest 및 Swagger에 group_id(계층번호) 필드 추가
This commit is contained in:
2025-11-27 10:28:51 +09:00
parent 1d2dadc7da
commit 9588945922
18 changed files with 361 additions and 550 deletions

View File

@@ -1,58 +0,0 @@
<?php
namespace App\Http\Controllers\Api\V1\ItemMaster;
use App\Http\Controllers\Controller;
use App\Http\Requests\ItemMaster\ItemMasterFieldStoreRequest;
use App\Http\Requests\ItemMaster\ItemMasterFieldUpdateRequest;
use App\Helpers\ApiResponse;
use App\Services\ItemMaster\ItemMasterFieldService;
class ItemMasterFieldController extends Controller
{
public function __construct(
protected ItemMasterFieldService $service,
) {}
/**
* 마스터 필드 목록
*/
public function index()
{
return ApiResponse::handle(function () {
return $this->service->index();
}, __('message.fetched'));
}
/**
* 마스터 필드 생성
*/
public function store(ItemMasterFieldStoreRequest $request)
{
return ApiResponse::handle(function () use ($request) {
return $this->service->store($request->validated());
}, __('message.created'));
}
/**
* 마스터 필드 수정
*/
public function update(int $id, ItemMasterFieldUpdateRequest $request)
{
return ApiResponse::handle(function () use ($id, $request) {
return $this->service->update($id, $request->validated());
}, __('message.updated'));
}
/**
* 마스터 필드 삭제
*/
public function destroy(int $id)
{
return ApiResponse::handle(function () use ($id) {
$this->service->destroy($id);
return 'success';
}, __('message.deleted'));
}
}

View File

@@ -14,6 +14,7 @@ public function authorize(): bool
public function rules(): array
{
return [
'group_id' => 'nullable|integer|min:1', // 계층번호
'item_code' => 'nullable|string|max:100',
'item_name' => 'required|string|max:255',
'quantity' => 'nullable|numeric|min:0',

View File

@@ -14,6 +14,7 @@ public function authorize(): bool
public function rules(): array
{
return [
'group_id' => 'nullable|integer|min:1', // 계층번호
'field_name' => 'required|string|max:255',
'field_type' => 'required|in:textbox,number,dropdown,checkbox,date,textarea',
'is_required' => 'nullable|boolean',

View File

@@ -1,28 +0,0 @@
<?php
namespace App\Http\Requests\ItemMaster;
use Illuminate\Foundation\Http\FormRequest;
class ItemMasterFieldStoreRequest extends FormRequest
{
public function authorize(): bool
{
return true;
}
public function rules(): array
{
return [
'field_name' => 'required|string|max:255',
'field_type' => 'required|in:textbox,number,dropdown,checkbox,date,textarea',
'category' => 'nullable|string|max:100',
'description' => 'nullable|string',
'is_common' => 'nullable|boolean',
'default_value' => 'nullable|string',
'options' => 'nullable|array',
'validation_rules' => 'nullable|array',
'properties' => 'nullable|array',
];
}
}

View File

@@ -1,28 +0,0 @@
<?php
namespace App\Http\Requests\ItemMaster;
use Illuminate\Foundation\Http\FormRequest;
class ItemMasterFieldUpdateRequest extends FormRequest
{
public function authorize(): bool
{
return true;
}
public function rules(): array
{
return [
'field_name' => 'sometimes|string|max:255',
'field_type' => 'sometimes|in:textbox,number,dropdown,checkbox,date,textarea',
'category' => 'sometimes|nullable|string|max:100',
'description' => 'sometimes|nullable|string',
'is_common' => 'sometimes|nullable|boolean',
'default_value' => 'sometimes|nullable|string',
'options' => 'sometimes|nullable|array',
'validation_rules' => 'sometimes|nullable|array',
'properties' => 'sometimes|nullable|array',
];
}
}

View File

@@ -14,6 +14,7 @@ public function authorize(): bool
public function rules(): array
{
return [
'group_id' => 'nullable|integer|min:1', // 계층번호
'title' => 'required|string|max:255',
'type' => 'required|in:fields,bom',
];