91 lines
3.5 KiB
TypeScript
91 lines
3.5 KiB
TypeScript
import { z } from "zod"
|
|
|
|
export const mediaAssetTypeSchema = z.enum([
|
|
"artwork",
|
|
"banner",
|
|
"promotion",
|
|
"video",
|
|
"gif",
|
|
"generic",
|
|
])
|
|
|
|
export const artworkRenditionSlotSchema = z.enum(["thumbnail", "card", "full", "custom"])
|
|
|
|
export const createMediaAssetInputSchema = z.object({
|
|
id: z.string().uuid().optional(),
|
|
type: mediaAssetTypeSchema,
|
|
title: z.string().min(1).max(180),
|
|
description: z.string().max(5000).optional(),
|
|
altText: z.string().max(1000).optional(),
|
|
source: z.string().max(500).optional(),
|
|
copyright: z.string().max(500).optional(),
|
|
author: z.string().max(180).optional(),
|
|
tags: z.array(z.string().min(1).max(100)).default([]),
|
|
storageKey: z.string().max(500).optional(),
|
|
mimeType: z.string().max(180).optional(),
|
|
sizeBytes: z.number().int().min(0).optional(),
|
|
width: z.number().int().positive().optional(),
|
|
height: z.number().int().positive().optional(),
|
|
isPublished: z.boolean().optional(),
|
|
})
|
|
|
|
export const updateMediaAssetInputSchema = z.object({
|
|
id: z.string().uuid(),
|
|
type: mediaAssetTypeSchema.optional(),
|
|
title: z.string().min(1).max(180).optional(),
|
|
description: z.string().max(5000).nullable().optional(),
|
|
altText: z.string().max(1000).nullable().optional(),
|
|
source: z.string().max(500).nullable().optional(),
|
|
copyright: z.string().max(500).nullable().optional(),
|
|
author: z.string().max(180).nullable().optional(),
|
|
tags: z.array(z.string().min(1).max(100)).optional(),
|
|
mimeType: z.string().max(180).nullable().optional(),
|
|
width: z.number().int().positive().nullable().optional(),
|
|
height: z.number().int().positive().nullable().optional(),
|
|
sizeBytes: z.number().int().min(0).nullable().optional(),
|
|
isPublished: z.boolean().optional(),
|
|
})
|
|
|
|
export const createArtworkInputSchema = z.object({
|
|
title: z.string().min(1).max(180),
|
|
slug: z.string().min(1).max(180),
|
|
description: z.string().max(5000).optional(),
|
|
medium: z.string().max(180).optional(),
|
|
dimensions: z.string().max(180).optional(),
|
|
year: z.number().int().min(1000).max(9999).optional(),
|
|
framing: z.string().max(180).optional(),
|
|
availability: z.string().max(180).optional(),
|
|
})
|
|
|
|
export const createGroupingInputSchema = z.object({
|
|
name: z.string().min(1).max(180),
|
|
slug: z.string().min(1).max(180),
|
|
description: z.string().max(5000).optional(),
|
|
sortOrder: z.number().int().min(0).default(0),
|
|
isVisible: z.boolean().default(true),
|
|
})
|
|
|
|
export const linkArtworkGroupingInputSchema = z.object({
|
|
artworkId: z.string().uuid(),
|
|
groupType: z.enum(["gallery", "album", "category", "tag"]),
|
|
groupId: z.string().uuid(),
|
|
})
|
|
|
|
export const attachArtworkRenditionInputSchema = z.object({
|
|
artworkId: z.string().uuid(),
|
|
mediaAssetId: z.string().uuid(),
|
|
slot: artworkRenditionSlotSchema,
|
|
width: z.number().int().positive().optional(),
|
|
height: z.number().int().positive().optional(),
|
|
isPrimary: z.boolean().default(false),
|
|
})
|
|
|
|
export type MediaAssetType = z.infer<typeof mediaAssetTypeSchema>
|
|
export type ArtworkRenditionSlot = z.infer<typeof artworkRenditionSlotSchema>
|
|
export type CreateMediaAssetInput = z.infer<typeof createMediaAssetInputSchema>
|
|
export type UpdateMediaAssetInput = z.infer<typeof updateMediaAssetInputSchema>
|
|
export type CreateArtworkInput = z.infer<typeof createArtworkInputSchema>
|
|
export type CreateGroupingInput = z.infer<typeof createGroupingInputSchema>
|
|
export type LinkArtworkGroupingInput = z.infer<typeof linkArtworkGroupingInputSchema>
|
|
export type AttachArtworkRenditionInput = z.infer<typeof attachArtworkRenditionInputSchema>
|