33 lines
1.3 KiB
TypeScript
33 lines
1.3 KiB
TypeScript
import { z } from "zod"
|
|
|
|
export const announcementPlacementSchema = z.enum(["global_top", "homepage"])
|
|
|
|
export const createAnnouncementInputSchema = z.object({
|
|
title: z.string().min(1).max(180),
|
|
message: z.string().min(1).max(500),
|
|
placement: announcementPlacementSchema.default("global_top"),
|
|
priority: z.number().int().min(0).default(100),
|
|
ctaLabel: z.string().max(120).nullable().optional(),
|
|
ctaHref: z.string().max(500).nullable().optional(),
|
|
startsAt: z.date().nullable().optional(),
|
|
endsAt: z.date().nullable().optional(),
|
|
isVisible: z.boolean().default(true),
|
|
})
|
|
|
|
export const updateAnnouncementInputSchema = z.object({
|
|
id: z.string().uuid(),
|
|
title: z.string().min(1).max(180).optional(),
|
|
message: z.string().min(1).max(500).optional(),
|
|
placement: announcementPlacementSchema.optional(),
|
|
priority: z.number().int().min(0).optional(),
|
|
ctaLabel: z.string().max(120).nullable().optional(),
|
|
ctaHref: z.string().max(500).nullable().optional(),
|
|
startsAt: z.date().nullable().optional(),
|
|
endsAt: z.date().nullable().optional(),
|
|
isVisible: z.boolean().optional(),
|
|
})
|
|
|
|
export type AnnouncementPlacement = z.infer<typeof announcementPlacementSchema>
|
|
export type CreateAnnouncementInput = z.infer<typeof createAnnouncementInputSchema>
|
|
export type UpdateAnnouncementInput = z.infer<typeof updateAnnouncementInputSchema>
|