2026-03-05 20:29:39 +09:00
|
|
|
<?php
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 품질관리 API 라우트 (v1)
|
|
|
|
|
*
|
|
|
|
|
* - 제품검사 (품질관리서)
|
|
|
|
|
* - 실적신고
|
|
|
|
|
*/
|
|
|
|
|
|
2026-03-11 20:04:29 +09:00
|
|
|
use App\Http\Controllers\Api\V1\ChecklistTemplateController;
|
2026-03-05 20:29:39 +09:00
|
|
|
use App\Http\Controllers\Api\V1\PerformanceReportController;
|
2026-03-10 16:38:21 +09:00
|
|
|
use App\Http\Controllers\Api\V1\QmsLotAuditController;
|
2026-03-05 20:29:39 +09:00
|
|
|
use App\Http\Controllers\Api\V1\QualityDocumentController;
|
|
|
|
|
use Illuminate\Support\Facades\Route;
|
|
|
|
|
|
|
|
|
|
// 제품검사 (품질관리서)
|
|
|
|
|
Route::prefix('quality/documents')->group(function () {
|
|
|
|
|
Route::get('', [QualityDocumentController::class, 'index'])->name('v1.quality.documents.index');
|
|
|
|
|
Route::get('/stats', [QualityDocumentController::class, 'stats'])->name('v1.quality.documents.stats');
|
|
|
|
|
Route::get('/calendar', [QualityDocumentController::class, 'calendar'])->name('v1.quality.documents.calendar');
|
|
|
|
|
Route::get('/available-orders', [QualityDocumentController::class, 'availableOrders'])->name('v1.quality.documents.available-orders');
|
|
|
|
|
Route::post('', [QualityDocumentController::class, 'store'])->name('v1.quality.documents.store');
|
|
|
|
|
Route::get('/{id}', [QualityDocumentController::class, 'show'])->whereNumber('id')->name('v1.quality.documents.show');
|
|
|
|
|
Route::put('/{id}', [QualityDocumentController::class, 'update'])->whereNumber('id')->name('v1.quality.documents.update');
|
|
|
|
|
Route::delete('/{id}', [QualityDocumentController::class, 'destroy'])->whereNumber('id')->name('v1.quality.documents.destroy');
|
|
|
|
|
Route::patch('/{id}/complete', [QualityDocumentController::class, 'complete'])->whereNumber('id')->name('v1.quality.documents.complete');
|
|
|
|
|
Route::post('/{id}/orders', [QualityDocumentController::class, 'attachOrders'])->whereNumber('id')->name('v1.quality.documents.attach-orders');
|
|
|
|
|
Route::delete('/{id}/orders/{orderId}', [QualityDocumentController::class, 'detachOrder'])->whereNumber('id')->whereNumber('orderId')->name('v1.quality.documents.detach-order');
|
|
|
|
|
Route::post('/{id}/locations/{locId}/inspect', [QualityDocumentController::class, 'inspectLocation'])->whereNumber('id')->whereNumber('locId')->name('v1.quality.documents.inspect-location');
|
|
|
|
|
Route::get('/{id}/request-document', [QualityDocumentController::class, 'requestDocument'])->whereNumber('id')->name('v1.quality.documents.request-document');
|
|
|
|
|
Route::get('/{id}/result-document', [QualityDocumentController::class, 'resultDocument'])->whereNumber('id')->name('v1.quality.documents.result-document');
|
2026-03-13 10:14:00 +09:00
|
|
|
Route::post('/{id}/upload-file', [QualityDocumentController::class, 'uploadFile'])->whereNumber('id')->name('v1.quality.documents.upload-file');
|
|
|
|
|
Route::delete('/{id}/file', [QualityDocumentController::class, 'deleteFile'])->whereNumber('id')->name('v1.quality.documents.delete-file');
|
2026-03-05 20:29:39 +09:00
|
|
|
});
|
|
|
|
|
|
|
|
|
|
// 실적신고
|
|
|
|
|
Route::prefix('quality/performance-reports')->group(function () {
|
|
|
|
|
Route::get('', [PerformanceReportController::class, 'index'])->name('v1.quality.performance-reports.index');
|
|
|
|
|
Route::get('/stats', [PerformanceReportController::class, 'stats'])->name('v1.quality.performance-reports.stats');
|
|
|
|
|
Route::get('/missing', [PerformanceReportController::class, 'missing'])->name('v1.quality.performance-reports.missing');
|
|
|
|
|
Route::patch('/confirm', [PerformanceReportController::class, 'confirm'])->name('v1.quality.performance-reports.confirm');
|
|
|
|
|
Route::patch('/unconfirm', [PerformanceReportController::class, 'unconfirm'])->name('v1.quality.performance-reports.unconfirm');
|
|
|
|
|
Route::patch('/memo', [PerformanceReportController::class, 'updateMemo'])->name('v1.quality.performance-reports.memo');
|
|
|
|
|
});
|
2026-03-10 16:38:21 +09:00
|
|
|
|
|
|
|
|
// QMS 로트 추적 심사
|
|
|
|
|
Route::prefix('qms/lot-audit')->group(function () {
|
|
|
|
|
Route::get('/reports', [QmsLotAuditController::class, 'index'])->name('v1.qms.lot-audit.reports');
|
|
|
|
|
Route::get('/reports/{id}', [QmsLotAuditController::class, 'show'])->whereNumber('id')->name('v1.qms.lot-audit.reports.show');
|
|
|
|
|
Route::get('/routes/{id}/documents', [QmsLotAuditController::class, 'routeDocuments'])->whereNumber('id')->name('v1.qms.lot-audit.routes.documents');
|
|
|
|
|
Route::get('/documents/{type}/{id}', [QmsLotAuditController::class, 'documentDetail'])->whereNumber('id')->name('v1.qms.lot-audit.documents.detail');
|
|
|
|
|
Route::patch('/units/{id}/confirm', [QmsLotAuditController::class, 'confirm'])->whereNumber('id')->name('v1.qms.lot-audit.units.confirm');
|
|
|
|
|
});
|
feat: [QMS] 1일차 기준/매뉴얼 심사 백엔드 구현 (Phase 2)
- 마이그레이션: audit_checklists, audit_checklist_categories, audit_checklist_items, audit_standard_documents (4테이블)
- 모델 4개: AuditChecklist, AuditChecklistCategory, AuditChecklistItem, AuditStandardDocument
- AuditChecklistService: CRUD, 완료처리, 항목 토글(lockForUpdate), 기준 문서 연결/해제, 카테고리+항목 일괄 동기화
- AuditChecklistController: 9개 엔드포인트
- FormRequest 2개: Store(카테고리+항목 중첩 검증), Update
- 라우트 9개 등록 (/api/v1/qms/checklists, checklist-items)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-10 16:41:20 +09:00
|
|
|
|
2026-03-11 20:04:29 +09:00
|
|
|
// 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');
|
2026-03-12 14:00:43 +09:00
|
|
|
Route::patch('/{id}/items/{subItemId}/toggle', [ChecklistTemplateController::class, 'toggleItem'])->whereNumber('id')->name('v1.quality.checklist-templates.toggle-item');
|
2026-03-11 20:04:29 +09:00
|
|
|
});
|
|
|
|
|
|
|
|
|
|
// 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');
|
|
|
|
|
});
|
|
|
|
|
|
2026-03-12 14:00:43 +09:00
|
|
|
// QMS 기준/매뉴얼 심사 (1일차) — checklist_templates로 통합됨, AuditChecklistController 제거
|