feat: [pm] 이슈에 팀/담당자/고객사 필드 추가

- DB 마이그레이션: 하이브리드 FK + 문자열 필드 방식
- Model: fillable, casts, relationships, accessor 추가
- FormRequest: validation rules 추가 (Store/Update)
- ImportService: JSON import 시 새 필드 처리
- UI: 이슈 모달에 입력 필드 추가
- UI: 작업 탭 아코디언에 고객사·부서·담당자 표시
- 이슈 저장 후 작업 탭 즉시 갱신
This commit is contained in:
2025-12-02 19:10:15 +09:00
parent 8b88224be9
commit d4051e20fa
6 changed files with 143 additions and 4 deletions

View File

@@ -36,6 +36,17 @@ public function rules(): array
'tasks.*.issues.*.description' => 'nullable|string',
'tasks.*.issues.*.type' => 'nullable|in:bug,feature,improvement',
'tasks.*.issues.*.status' => 'nullable|in:open,in_progress,resolved,closed',
// 일정 관련
'tasks.*.issues.*.start_date' => 'nullable|date',
'tasks.*.issues.*.due_date' => 'nullable|date|after_or_equal:tasks.*.issues.*.start_date',
'tasks.*.issues.*.estimated_hours' => 'nullable|integer|min:0',
'tasks.*.issues.*.is_urgent' => 'nullable|boolean',
// 팀/담당자/고객사 (하이브리드)
'tasks.*.issues.*.department_id' => 'nullable|integer|exists:departments,id',
'tasks.*.issues.*.team' => 'nullable|string|max:100',
'tasks.*.issues.*.assignee_id' => 'nullable|integer|exists:users,id',
'tasks.*.issues.*.assignee_name' => 'nullable|string|max:100',
'tasks.*.issues.*.client' => 'nullable|string|max:100',
];
}
@@ -48,4 +59,4 @@ public function messages(): array
'tasks.*.issues.*.title.required' => '각 이슈의 title은 필수입니다.',
];
}
}
}