69 lines
1.9 KiB
TypeScript
69 lines
1.9 KiB
TypeScript
import { z } from "zod"
|
|
|
|
export const UserRoleSchema = z.enum(["admin", "user"])
|
|
|
|
export const UserInsertSchema = z.object({
|
|
email: z.string().email(),
|
|
name: z.string().min(1),
|
|
role: UserRoleSchema,
|
|
passwordHash: z.string().min(1)
|
|
})
|
|
|
|
export const UserSelectSchema = UserInsertSchema.extend({
|
|
id: z.string().uuid(),
|
|
createdAt: z.date()
|
|
}).omit({ passwordHash: true })
|
|
|
|
export const CustomerInsertSchema = z.object({
|
|
name: z.string().min(1),
|
|
active: z.boolean().default(true)
|
|
})
|
|
|
|
export const CustomerSelectSchema = CustomerInsertSchema.extend({
|
|
id: z.string().uuid(),
|
|
createdAt: z.date()
|
|
})
|
|
|
|
export const ProjectInsertSchema = z.object({
|
|
name: z.string().min(1),
|
|
customerId: z.string().uuid(),
|
|
active: z.boolean().default(true)
|
|
})
|
|
|
|
export const ProjectSelectSchema = ProjectInsertSchema.extend({
|
|
id: z.string().uuid(),
|
|
createdAt: z.date()
|
|
})
|
|
|
|
export const TimeEntryInsertSchema = z.object({
|
|
userId: z.string().uuid(),
|
|
projectId: z.string().uuid().optional(),
|
|
description: z.string().min(1),
|
|
startTime: z.date(),
|
|
endTime: z.date().optional()
|
|
})
|
|
|
|
export const TimeEntrySelectSchema = TimeEntryInsertSchema.extend({
|
|
id: z.string().uuid(),
|
|
createdAt: z.date()
|
|
})
|
|
|
|
export const LoginRequestSchema = z.object({
|
|
email: z.string().email(),
|
|
password: z.string().min(1)
|
|
})
|
|
|
|
export type UserInsert = z.infer<typeof UserInsertSchema>
|
|
export type UserSelect = z.infer<typeof UserSelectSchema>
|
|
export type UserRole = z.infer<typeof UserRoleSchema>
|
|
|
|
export type CustomerInsert = z.infer<typeof CustomerInsertSchema>
|
|
export type CustomerSelect = z.infer<typeof CustomerSelectSchema>
|
|
|
|
export type ProjectInsert = z.infer<typeof ProjectInsertSchema>
|
|
export type ProjectSelect = z.infer<typeof ProjectSelectSchema>
|
|
|
|
export type TimeEntryInsert = z.infer<typeof TimeEntryInsertSchema>
|
|
export type TimeEntrySelect = z.infer<typeof TimeEntrySelectSchema>
|
|
|
|
export type LoginRequest = z.infer<typeof LoginRequestSchema> |