feat(pages): add pages and navigation builder baseline

This commit is contained in:
2026-02-12 19:30:09 +01:00
parent 7d9bc9dca9
commit 281b1d7a1b
15 changed files with 1372 additions and 16 deletions

View File

@@ -1,6 +1,7 @@
import { z } from "zod"
export * from "./media"
export * from "./pages-navigation"
export * from "./rbac"
export const postStatusSchema = z.enum(["draft", "published"])

View File

@@ -0,0 +1,57 @@
import { z } from "zod"
export const pageStatusSchema = z.enum(["draft", "published"])
export const createPageInputSchema = z.object({
title: z.string().min(1).max(180),
slug: z.string().min(1).max(180),
status: pageStatusSchema.default("draft"),
summary: z.string().max(500).nullable().optional(),
content: z.string().min(1),
seoTitle: z.string().max(180).nullable().optional(),
seoDescription: z.string().max(320).nullable().optional(),
})
export const updatePageInputSchema = z.object({
id: z.string().uuid(),
title: z.string().min(1).max(180).optional(),
slug: z.string().min(1).max(180).optional(),
status: pageStatusSchema.optional(),
summary: z.string().max(500).nullable().optional(),
content: z.string().min(1).optional(),
seoTitle: z.string().max(180).nullable().optional(),
seoDescription: z.string().max(320).nullable().optional(),
})
export const createNavigationMenuInputSchema = z.object({
name: z.string().min(1).max(180),
slug: z.string().min(1).max(180),
location: z.string().min(1).max(80).default("primary"),
isVisible: z.boolean().default(true),
})
export const createNavigationItemInputSchema = z.object({
menuId: z.string().uuid(),
label: z.string().min(1).max(180),
href: z.string().max(500).nullable().optional(),
pageId: z.string().uuid().nullable().optional(),
parentId: z.string().uuid().nullable().optional(),
sortOrder: z.number().int().min(0).default(0),
isVisible: z.boolean().default(true),
})
export const updateNavigationItemInputSchema = z.object({
id: z.string().uuid(),
label: z.string().min(1).max(180).optional(),
href: z.string().max(500).nullable().optional(),
pageId: z.string().uuid().nullable().optional(),
parentId: z.string().uuid().nullable().optional(),
sortOrder: z.number().int().min(0).optional(),
isVisible: z.boolean().optional(),
})
export type CreatePageInput = z.infer<typeof createPageInputSchema>
export type UpdatePageInput = z.infer<typeof updatePageInputSchema>
export type CreateNavigationMenuInput = z.infer<typeof createNavigationMenuInputSchema>
export type CreateNavigationItemInput = z.infer<typeof createNavigationItemInputSchema>
export type UpdateNavigationItemInput = z.infer<typeof updateNavigationItemInputSchema>