feat(API): 공정 options JSON 컬럼 마이그레이션

- needs_work_log 개별 컬럼 → options JSON 구조로 전환
- StoreProcessRequest, UpdateProcessRequest 유효성 규칙 갱신
- Process 모델 $fillable, $casts 갱신

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-02-11 15:58:35 +09:00
parent 12053386f6
commit 8b78d62068
4 changed files with 73 additions and 6 deletions

View File

@@ -20,8 +20,10 @@ public function rules(): array
'department' => ['nullable', 'string', 'max:100'],
'work_log_template' => ['nullable', 'string', 'max:100'],
'document_template_id' => ['nullable', 'integer', 'exists:document_templates,id'],
'needs_work_log' => ['nullable', 'boolean'],
'work_log_template_id' => ['nullable', 'integer', 'exists:document_templates,id'],
'options' => ['nullable', 'array'],
'options.needs_inspection' => ['nullable', 'boolean'],
'options.needs_work_log' => ['nullable', 'boolean'],
'required_workers' => ['nullable', 'integer', 'min:1'],
'equipment_info' => ['nullable', 'string', 'max:255'],
'work_steps' => ['nullable'],
@@ -52,8 +54,10 @@ public function attributes(): array
'department' => '담당부서',
'work_log_template' => '작업일지 양식',
'document_template_id' => '중간검사 양식',
'needs_work_log' => '작업일지 여부',
'work_log_template_id' => '작업일지 양식 ID',
'options' => '공정 설정',
'options.needs_inspection' => '중간검사 여부',
'options.needs_work_log' => '작업일지 여부',
'required_workers' => '필요인원',
'equipment_info' => '설비정보',
'work_steps' => '작업단계',

View File

@@ -20,8 +20,10 @@ public function rules(): array
'department' => ['nullable', 'string', 'max:100'],
'work_log_template' => ['nullable', 'string', 'max:100'],
'document_template_id' => ['nullable', 'integer', 'exists:document_templates,id'],
'needs_work_log' => ['nullable', 'boolean'],
'work_log_template_id' => ['nullable', 'integer', 'exists:document_templates,id'],
'options' => ['nullable', 'array'],
'options.needs_inspection' => ['nullable', 'boolean'],
'options.needs_work_log' => ['nullable', 'boolean'],
'required_workers' => ['nullable', 'integer', 'min:1'],
'equipment_info' => ['nullable', 'string', 'max:255'],
'work_steps' => ['nullable'],
@@ -52,8 +54,10 @@ public function attributes(): array
'department' => '담당부서',
'work_log_template' => '작업일지 양식',
'document_template_id' => '중간검사 양식',
'needs_work_log' => '작업일지 여부',
'work_log_template_id' => '작업일지 양식 ID',
'options' => '공정 설정',
'options.needs_inspection' => '중간검사 여부',
'options.needs_work_log' => '작업일지 여부',
'required_workers' => '필요인원',
'equipment_info' => '설비정보',
'work_steps' => '작업단계',

View File

@@ -28,8 +28,8 @@ class Process extends Model
'department',
'work_log_template',
'document_template_id',
'needs_work_log',
'work_log_template_id',
'options',
'required_workers',
'equipment_info',
'work_steps',
@@ -43,7 +43,7 @@ class Process extends Model
protected $casts = [
'work_steps' => 'array',
'is_active' => 'boolean',
'needs_work_log' => 'boolean',
'options' => 'array',
'required_workers' => 'integer',
];

View File

@@ -0,0 +1,59 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Schema;
/**
* processes 테이블에 options JSON 컬럼 추가
* - needs_work_log 컬럼 → options.needs_work_log로 이동
* - options.needs_inspection 신규 추가
* - FK 컬럼(document_template_id, work_log_template_id)은 유지
*/
return new class extends Migration
{
public function up(): void
{
// 1. options JSON 컬럼 추가
Schema::table('processes', function (Blueprint $table) {
$table->json('options')->nullable()->after('work_log_template_id')->comment('공정 설정 (needs_work_log, needs_inspection 등)');
});
// 2. 기존 needs_work_log 데이터를 options로 이동
DB::table('processes')->orderBy('id')->each(function ($process) {
DB::table('processes')->where('id', $process->id)->update([
'options' => json_encode([
'needs_work_log' => (bool) $process->needs_work_log,
'needs_inspection' => false,
]),
]);
});
// 3. needs_work_log 컬럼 제거
Schema::table('processes', function (Blueprint $table) {
$table->dropColumn('needs_work_log');
});
}
public function down(): void
{
// 1. needs_work_log 컬럼 복원
Schema::table('processes', function (Blueprint $table) {
$table->boolean('needs_work_log')->default(false)->after('document_template_id')->comment('작업일지 여부');
});
// 2. options에서 needs_work_log 데이터 복원
DB::table('processes')->whereNotNull('options')->each(function ($process) {
$options = json_decode($process->options, true);
DB::table('processes')->where('id', $process->id)->update([
'needs_work_log' => $options['needs_work_log'] ?? false,
]);
});
// 3. options 컬럼 제거
Schema::table('processes', function (Blueprint $table) {
$table->dropColumn('options');
});
}
};