feat: add Zod validation schemas for all domain routes
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
97
src/schemas/attendance.schema.ts
Normal file
97
src/schemas/attendance.schema.ts
Normal file
@@ -0,0 +1,97 @@
|
||||
import { z } from 'zod';
|
||||
|
||||
export const AttendanceNotesSchema = z.object({
|
||||
notes: z.string().nullish(),
|
||||
});
|
||||
|
||||
export const AttendanceUpdateAddressSchema = z.object({
|
||||
address: z.string().max(500).nullish(),
|
||||
punch_action: z.string().optional().default('arrival'),
|
||||
});
|
||||
|
||||
export const AttendanceSwitchProjectSchema = z.object({
|
||||
project_id: z.union([z.number(), z.string()]).transform(v => Number(v)).nullish(),
|
||||
});
|
||||
|
||||
export const AttendanceBalancesSchema = z.object({
|
||||
user_id: z.union([z.number(), z.string()]).transform(v => Number(v)),
|
||||
year: z.union([z.number(), z.string()]).transform(v => Number(v)).optional(),
|
||||
action_type: z.string(),
|
||||
vacation_total: z.union([z.number(), z.string()]).transform(v => Number(v)).optional(),
|
||||
vacation_used: z.union([z.number(), z.string()]).transform(v => Number(v)).optional(),
|
||||
sick_used: z.union([z.number(), z.string()]).transform(v => Number(v)).optional(),
|
||||
});
|
||||
|
||||
export const AttendanceBulkSchema = z.object({
|
||||
month: z.string().regex(/^\d{4}-\d{2}$/, 'Měsíc je povinný (formát YYYY-MM)'),
|
||||
user_ids: z.array(z.number()).min(1, 'Vyberte alespoň jednoho zaměstnance'),
|
||||
arrival_time: z.string().optional().default('08:00'),
|
||||
departure_time: z.string().optional().default('16:30'),
|
||||
break_start_time: z.string().optional().default('12:00'),
|
||||
break_end_time: z.string().optional().default('12:30'),
|
||||
});
|
||||
|
||||
export const AttendanceLeaveSchema = z.object({
|
||||
user_id: z.union([z.number(), z.string()]).transform(v => Number(v)).optional(),
|
||||
date_from: z.string().min(1, 'Datum je povinné'),
|
||||
date_to: z.string().optional(),
|
||||
leave_type: z.string().optional().default('vacation'),
|
||||
leave_hours: z.union([z.number(), z.string()]).transform(v => Number(v)).optional(),
|
||||
notes: z.string().nullish(),
|
||||
});
|
||||
|
||||
const ProjectLogSchema = z.object({
|
||||
project_id: z.union([z.number(), z.string()]).transform(v => Number(v)),
|
||||
hours: z.number().optional().default(0),
|
||||
minutes: z.number().optional().default(0),
|
||||
});
|
||||
|
||||
export const AttendancePunchSchema = z.object({
|
||||
punch_action: z.string(),
|
||||
latitude: z.union([z.number(), z.string(), z.null()]).optional(),
|
||||
longitude: z.union([z.number(), z.string(), z.null()]).optional(),
|
||||
accuracy: z.union([z.number(), z.string(), z.null()]).optional(),
|
||||
address: z.string().max(500).nullish(),
|
||||
});
|
||||
|
||||
export const CreateAttendanceSchema = z.object({
|
||||
user_id: z.union([z.number(), z.string()]).transform(v => Number(v)).optional(),
|
||||
shift_date: z.string(),
|
||||
arrival_time: z.string().nullish(),
|
||||
arrival_lat: z.union([z.number(), z.string()]).transform(v => Number(v)).nullish(),
|
||||
arrival_lng: z.union([z.number(), z.string()]).transform(v => Number(v)).nullish(),
|
||||
arrival_accuracy: z.union([z.number(), z.string()]).transform(v => Number(v)).nullish(),
|
||||
arrival_address: z.string().nullish(),
|
||||
departure_time: z.string().nullish(),
|
||||
departure_lat: z.union([z.number(), z.string()]).transform(v => Number(v)).nullish(),
|
||||
departure_lng: z.union([z.number(), z.string()]).transform(v => Number(v)).nullish(),
|
||||
departure_accuracy: z.union([z.number(), z.string()]).transform(v => Number(v)).nullish(),
|
||||
departure_address: z.string().nullish(),
|
||||
notes: z.string().nullish(),
|
||||
project_id: z.union([z.number(), z.string()]).transform(v => Number(v)).nullish(),
|
||||
leave_type: z.string().optional().default('work'),
|
||||
leave_hours: z.union([z.number(), z.string()]).transform(v => Number(v)).nullish(),
|
||||
project_logs: z.array(ProjectLogSchema).optional(),
|
||||
});
|
||||
|
||||
export const UpdateAttendanceSchema = z.object({
|
||||
arrival_time: z.union([z.string(), z.null()]).optional(),
|
||||
departure_time: z.union([z.string(), z.null()]).optional(),
|
||||
break_start: z.union([z.string(), z.null()]).optional(),
|
||||
break_end: z.union([z.string(), z.null()]).optional(),
|
||||
notes: z.string().nullish(),
|
||||
project_id: z.union([z.number(), z.string(), z.null()]).optional(),
|
||||
leave_type: z.string().optional(),
|
||||
leave_hours: z.union([z.number(), z.string(), z.null()]).optional(),
|
||||
project_logs: z.array(ProjectLogSchema).optional(),
|
||||
});
|
||||
|
||||
export type AttendanceNotesInput = z.infer<typeof AttendanceNotesSchema>;
|
||||
export type AttendanceUpdateAddressInput = z.infer<typeof AttendanceUpdateAddressSchema>;
|
||||
export type AttendanceSwitchProjectInput = z.infer<typeof AttendanceSwitchProjectSchema>;
|
||||
export type AttendanceBalancesInput = z.infer<typeof AttendanceBalancesSchema>;
|
||||
export type AttendanceBulkInput = z.infer<typeof AttendanceBulkSchema>;
|
||||
export type AttendanceLeaveInput = z.infer<typeof AttendanceLeaveSchema>;
|
||||
export type AttendancePunchInput = z.infer<typeof AttendancePunchSchema>;
|
||||
export type CreateAttendanceInput = z.infer<typeof CreateAttendanceSchema>;
|
||||
export type UpdateAttendanceInput = z.infer<typeof UpdateAttendanceSchema>;
|
||||
Reference in New Issue
Block a user