feat: [QMS] 점검표 템플릿 관리 백엔드 구현

- checklist_templates 테이블 마이그레이션 + 기본 시딩
- ChecklistTemplate 모델 (BelongsToTenant, Auditable, SoftDeletes)
- ChecklistTemplateService: 조회/저장/파일 업로드/삭제
- SaveChecklistTemplateRequest: 중첩 JSON 검증
- ChecklistTemplateController: 5개 엔드포인트
- 라우트 등록 (quality/checklist-templates, quality/qms-documents)
This commit is contained in:
2026-03-11 20:04:29 +09:00
parent 3bae303447
commit 12373edf8c
6 changed files with 536 additions and 0 deletions

View File

@@ -8,6 +8,7 @@
*/
use App\Http\Controllers\Api\V1\AuditChecklistController;
use App\Http\Controllers\Api\V1\ChecklistTemplateController;
use App\Http\Controllers\Api\V1\PerformanceReportController;
use App\Http\Controllers\Api\V1\QmsLotAuditController;
use App\Http\Controllers\Api\V1\QualityDocumentController;
@@ -50,6 +51,19 @@
Route::patch('/units/{id}/confirm', [QmsLotAuditController::class, 'confirm'])->whereNumber('id')->name('v1.qms.lot-audit.units.confirm');
});
// QMS 점검표 템플릿 관리
Route::prefix('quality/checklist-templates')->group(function () {
Route::get('', [ChecklistTemplateController::class, 'show'])->name('v1.quality.checklist-templates.show');
Route::put('/{id}', [ChecklistTemplateController::class, 'update'])->whereNumber('id')->name('v1.quality.checklist-templates.update');
});
// QMS 점검표 문서 (파일) 관리
Route::prefix('quality/qms-documents')->group(function () {
Route::get('', [ChecklistTemplateController::class, 'documents'])->name('v1.quality.qms-documents.index');
Route::post('', [ChecklistTemplateController::class, 'uploadDocument'])->name('v1.quality.qms-documents.store');
Route::delete('/{id}', [ChecklistTemplateController::class, 'deleteDocument'])->whereNumber('id')->name('v1.quality.qms-documents.destroy');
});
// QMS 기준/매뉴얼 심사 (1일차)
Route::prefix('qms')->group(function () {
Route::get('/checklists', [AuditChecklistController::class, 'index'])->name('v1.qms.checklists.index');