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 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 | import { IsString, IsNotEmpty, IsOptional, IsNumber, IsEnum, IsDateString, } from 'class-validator'; export class RecordPunchDto { @IsString() @IsNotEmpty() @IsEnum([ 'Check In', 'Check Out', 'Break Start', 'Break End', 'Site In', 'Site Out', ]) punchType: string; @IsDateString() @IsNotEmpty() timestamp: Date; // Important: The actual time recorded by the client device @IsString() @IsNotEmpty() timezone: string; @IsString() @IsNotEmpty() @IsEnum([ 'Web', 'Mobile', 'Biometric', 'Device', 'Admin', 'Import', 'API', 'Kiosk', 'Field App', 'Offline Sync', ]) source: string; @IsString() @IsOptional() deviceId?: string; @IsString() @IsOptional() deviceName?: string; @IsNumber() @IsOptional() latitude?: number; @IsNumber() @IsOptional() longitude?: number; @IsNumber() @IsOptional() accuracy?: number; @IsString() @IsOptional() locationId?: string; @IsString() @IsOptional() selfieFileId?: string; @IsString() @IsOptional() note?: string; @IsString() @IsOptional() idempotencyKey?: string; @IsOptional() metadata?: any; } |