fix : 모델, BOM 구성 수정

- 설계용 모델, BOM 기능 추가
This commit is contained in:
2025-09-05 17:59:34 +09:00
parent 41d0afa245
commit d9563c96cb
19 changed files with 1972 additions and 290 deletions

View File

@@ -29,6 +29,12 @@
use App\Http\Controllers\Api\V1\CategoryTemplateController;
use App\Http\Controllers\Api\V1\ClassificationController;
// 설계 전용 (디자인 네임스페이스)
use App\Http\Controllers\Api\V1\Design\DesignModelController as DesignModelController;
use App\Http\Controllers\Api\V1\Design\ModelVersionController as DesignModelVersionController;
use App\Http\Controllers\Api\V1\Design\BomTemplateController as DesignBomTemplateController;
// error test
Route::get('/test-error', function () {
throw new \Exception('슬랙 전송 테스트 예외');
@@ -121,9 +127,9 @@
// Material, Model, BOM API
Route::resource('materials', MaterialController::class)->except(['v1.create', 'edit']); // 자재관리
Route::resource('materials', MaterialController::class)->except(['create', 'edit']); // 자재관리
Route::resource('models', ModelController::class)->except(['v1.create', 'edit']); // 모델관리
Route::resource('boms', BomController::class)->except(['v1.create', 'edit']); // BOM관리
Route::resource('boms', BomController::class)->except(['create', 'edit']); // BOM관리
// Menu API
@@ -189,9 +195,9 @@
// Permission API
Route::prefix('permissions')->group(function () {
Route::get('departments/{dept_id}/menu-matrix', [PermissionController::class, 'deptMenuMatrix'])->name('permissions.deptMenuMatrix');; // 부서별 권한 메트릭스
Route::get('roles/{role_id}/menu-matrix', [PermissionController::class, 'roleMenuMatrix'])->name('permissions.roleMenuMatrix');; // 부서별 권한 메트릭스
Route::get('users/{user_id}/menu-matrix', [PermissionController::class, 'userMenuMatrix'])->name('permissions.userMenuMatrix');; // 부서별 권한 메트릭스
Route::get('departments/{dept_id}/menu-matrix', [PermissionController::class, 'deptMenuMatrix'])->name('permissions.deptMenuMatrix'); // 부서별 권한 메트릭스
Route::get('roles/{role_id}/menu-matrix', [PermissionController::class, 'roleMenuMatrix'])->name('permissions.roleMenuMatrix'); // 부서별 권한 메트릭스
Route::get('users/{user_id}/menu-matrix', [PermissionController::class, 'userMenuMatrix'])->name('permissions.userMenuMatrix'); // 부서별 권한 메트릭스
});
@@ -297,17 +303,18 @@
});
// Products (모델/부품/서브어셈블리)
Route::prefix('products')->group(function () {
Route::prefix('products')->group(function (){
// (선택) 드롭다운/모달용 간편 검색 & 활성 토글
Route::get ('/search', [ProductController::class, 'search'])->name('v1.products.search');
Route::post ('/{id}/toggle', [ProductController::class, 'toggle'])->name('v1.products.toggle');
Route::get ('', [ProductController::class, 'index'])->name('v1.products.index'); // 목록/검색(q, category_id, product_type, active, page/size)
Route::post ('', [ProductController::class, 'store'])->name('v1.products.store'); // 생성
Route::get ('/{id}', [ProductController::class, 'show'])->name('v1.products.show'); // 단건
Route::patch ('/{id}', [ProductController::class, 'update'])->name('v1.products.update'); // 수정
Route::delete('/{id}', [ProductController::class, 'destroy'])->name('v1.products.destroy'); // 삭제(soft)
// (선택) 드롭다운/모달용 간편 검색 & 활성 토글
Route::get ('/search', [ProductController::class, 'search'])->name('v1.products.search');
Route::post ('/{id}/toggle', [ProductController::class, 'toggle'])->name('v1.products.toggle');
// BOM 카테고리
Route::get('bom/categories', [ProductBomItemController::class, 'suggestCategories'])->name('v1.products.bom.categories.suggest'); // 전역(테넌트) 추천
Route::get('{id}/bom/categories', [ProductBomItemController::class, 'listCategories'])->name('v1.products.bom.categories'); // 해당 제품에서 사용 중
@@ -330,5 +337,25 @@
Route::get('/tree', [ProductBomItemController::class, 'tree']);
});
// 설계 전용 (Design) - 운영과 분리된 네임스페이스/경로
Route::prefix('design')->group(function () {
Route::get ('/models', [DesignModelController::class, 'index'])->name('v1.design.models.index');
Route::post ('/models', [DesignModelController::class, 'store'])->name('v1.design.models.store');
Route::get ('/models/{id}', [DesignModelController::class, 'show'])->name('v1.design.models.show');
Route::put ('/models/{id}', [DesignModelController::class, 'update'])->name('v1.design.models.update');
Route::delete('/models/{id}', [DesignModelController::class, 'destroy'])->name('v1.design.models.destroy');
Route::get ('/models/{modelId}/versions', [DesignModelVersionController::class, 'index'])->name('v1.design.models.versions.index');
Route::post ('/models/{modelId}/versions', [DesignModelVersionController::class, 'createDraft'])->name('v1.design.models.versions.store');
Route::post ('/versions/{versionId}/release', [DesignModelVersionController::class, 'release'])->name('v1.design.versions.release');
Route::get ('/versions/{versionId}/bom-templates', [DesignBomTemplateController::class, 'listByVersion'])->name('v1.design.bom.templates.index');
Route::post ('/versions/{versionId}/bom-templates', [DesignBomTemplateController::class, 'upsertTemplate'])->name('v1.design.bom.templates.store');
Route::get ('/bom-templates/{templateId}', [DesignBomTemplateController::class, 'show'])->name('v1.design.bom.templates.show');
Route::put ('/bom-templates/{templateId}/items', [DesignBomTemplateController::class, 'replaceItems'])->name('v1.design.bom.templates.items.replace');
});
});
});