import { registerDecorator, ValidationOptions, ValidationArguments, } from 'class-validator'; import { Assignee } from '../../features/tasks/types/types'; // TODO タスク 2502: バリデータをクラスを使用した記述に統一するで修正する /** * Validations options * @param [validationOptions] * @returns */ export const IsAssignees = (validationOptions?: ValidationOptions) => { return (object: any, propertyName: string) => { registerDecorator({ name: 'IsAssignees', target: object.constructor, propertyName: propertyName, options: validationOptions, validator: { // eslint-disable-next-line @typescript-eslint/no-unused-vars validate: (values: Assignee[], args: ValidationArguments) => { return values.every((value) => { const { typistUserId, typistGroupId, typistName } = value; if (typistUserId === undefined && typistGroupId === undefined) { return false; } if (typistUserId !== undefined && typistGroupId !== undefined) { return false; } if (!typistName) { return false; } return true; }); }, // eslint-disable-next-line @typescript-eslint/no-unused-vars defaultMessage: (args?: ValidationArguments): string => { return 'Request body is invalid format'; }, }, }); }; };