Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 | 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x | import { IsArray, IsIn, IsOptional, IsString, Length } from 'class-validator';
export const GOAL_STATUSES = ['not_started', 'on_track', 'at_risk', 'achieved', 'abandoned'] as const;
export type GoalStatusValue = (typeof GOAL_STATUSES)[number];
export class CreateGoalDto {
@IsString()
@Length(1, 500)
horizon!: string;
@IsString()
@Length(1, 500)
metric!: string;
@IsString()
@Length(1, 1000)
target!: string;
@IsOptional()
@IsArray()
milestones?: unknown[];
}
export class UpdateGoalDto {
@IsOptional()
@IsString()
@Length(1, 500)
horizon?: string;
@IsOptional()
@IsString()
@Length(1, 500)
metric?: string;
@IsOptional()
@IsString()
@Length(1, 1000)
target?: string;
@IsOptional()
@IsArray()
milestones?: unknown[];
@IsOptional()
@IsIn(GOAL_STATUSES as unknown as string[])
status?: GoalStatusValue;
}
|