feat: 공정 단계(ProcessStep) CRUD API 구현

- process_steps 테이블 마이그레이션 생성 (step_code, sort_order, boolean 플래그 등)
- ProcessStep 모델 생성 (child entity 패턴, HasFactory만 사용)
- ProcessStepService: CRUD + reorder + STP-001 자동채번
- ProcessStepController: DI + ApiResponse::handle 패턴
- FormRequest 3개: Store, Update, Reorder
- Process 모델에 steps() HasMany 관계 추가
- ProcessService eager-load에 steps 추가 (5곳)
- Nested routes: /processes/{processId}/steps

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
2026-02-03 18:59:12 +09:00
parent 529c587023
commit 3d20c6979d
10 changed files with 441 additions and 5 deletions

View File

@@ -13,6 +13,7 @@
use App\Http\Controllers\Api\V1\WorkOrderController;
use App\Http\Controllers\Api\V1\WorkResultController;
use App\Http\Controllers\V1\ProcessController;
use App\Http\Controllers\V1\ProcessStepController;
use Illuminate\Support\Facades\Route;
// Process API (공정 관리)
@@ -26,6 +27,16 @@
Route::put('/{id}', [ProcessController::class, 'update'])->whereNumber('id')->name('v1.processes.update');
Route::delete('/{id}', [ProcessController::class, 'destroy'])->whereNumber('id')->name('v1.processes.destroy');
Route::patch('/{id}/toggle', [ProcessController::class, 'toggleActive'])->whereNumber('id')->name('v1.processes.toggle');
// Process Steps (공정 단계)
Route::prefix('{processId}/steps')->whereNumber('processId')->group(function () {
Route::get('', [ProcessStepController::class, 'index'])->name('v1.processes.steps.index');
Route::post('', [ProcessStepController::class, 'store'])->name('v1.processes.steps.store');
Route::patch('/reorder', [ProcessStepController::class, 'reorder'])->name('v1.processes.steps.reorder');
Route::get('/{stepId}', [ProcessStepController::class, 'show'])->whereNumber('stepId')->name('v1.processes.steps.show');
Route::put('/{stepId}', [ProcessStepController::class, 'update'])->whereNumber('stepId')->name('v1.processes.steps.update');
Route::delete('/{stepId}', [ProcessStepController::class, 'destroy'])->whereNumber('stepId')->name('v1.processes.steps.destroy');
});
});
// Work Order API (작업지시 관리)