'sometimes|exists:admin_pm_projects,id', 'title' => 'sometimes|required|string|max:255', 'description' => 'nullable|string|max:5000', 'status' => 'sometimes|in:'.implode(',', array_keys(AdminPmTask::getStatuses())), 'priority' => 'sometimes|in:'.implode(',', array_keys(AdminPmTask::getPriorities())), 'due_date' => 'nullable|date', 'sort_order' => 'nullable|integer|min:0', 'assignee_id' => 'nullable|exists:users,id', ]; } /** * Get custom attributes for validator errors. */ public function attributes(): array { return [ 'project_id' => '프로젝트', 'title' => '작업 제목', 'description' => '작업 설명', 'status' => '상태', 'priority' => '우선순위', 'due_date' => '마감일', 'sort_order' => '정렬 순서', 'assignee_id' => '담당자', ]; } /** * Get the error messages for the defined validation rules. */ public function messages(): array { return [ 'project_id.exists' => '존재하지 않는 프로젝트입니다.', 'title.required' => '작업 제목은 필수입니다.', 'title.max' => '작업 제목은 최대 255자까지 입력 가능합니다.', 'description.max' => '작업 설명은 최대 5000자까지 입력 가능합니다.', 'status.in' => '올바른 상태를 선택해주세요.', 'priority.in' => '올바른 우선순위를 선택해주세요.', 'due_date.date' => '올바른 날짜 형식이 아닙니다.', 'sort_order.integer' => '정렬 순서는 숫자여야 합니다.', 'assignee_id.exists' => '존재하지 않는 담당자입니다.', ]; } }