Files
kan/packages/api/src/schemas/workspace.ts
2026-05-18 23:20:11 +01:00

97 lines
3.1 KiB
TypeScript

import { z } from "zod";
import { userSchema } from "./common";
// ─── workspace.all ───────────────────────────────────────────
export const workspaceListItemSchema = z.object({
role: z.string(),
workspace: z.object({
publicId: z.string(),
name: z.string(),
description: z.string().nullable(),
slug: z.string(),
plan: z.enum(["free", "team", "pro", "enterprise"]),
weekStartDay: z.number().nullable(),
cardPrefix: z.string(),
deletedAt: z.date().nullable(),
}),
});
// ─── workspace.byId ──────────────────────────────────────────
const workspaceMemberDetailSchema = z.object({
publicId: z.string(),
email: z.string().optional(),
role: z.string(),
status: z.string(),
createdAt: z.date(),
user: z
.object({
id: z.string().nullable(),
name: z.string().nullable(),
email: z.string().optional(),
image: z.string().nullable(),
})
.nullable(),
});
const workspaceSubscriptionSchema = z.object({
plan: z.string(),
status: z.string(),
seats: z.number().nullable(),
unlimitedSeats: z.boolean().nullable(),
partnerTier: z.number().nullable(),
periodStart: z.date().nullable(),
periodEnd: z.date().nullable(),
});
export const workspaceDetailSchema = z.object({
publicId: z.string(),
name: z.string(),
slug: z.string(),
showEmailsToMembers: z.boolean().nullable(),
weekStartDay: z.number().nullable(),
members: z.array(workspaceMemberDetailSchema),
subscriptions: z.array(workspaceSubscriptionSchema),
});
// ─── workspace.bySlug ────────────────────────────────────────
export const workspaceWithBoardsSchema = z.object({
publicId: z.string(),
name: z.string(),
description: z.string().nullable(),
slug: z.string(),
boards: z.array(
z.object({
publicId: z.string(),
slug: z.string(),
name: z.string(),
}),
),
});
// ─── workspace.create ────────────────────────────────────────
export const workspaceCreateResponseSchema = z.object({
publicId: z.string(),
name: z.string(),
slug: z.string(),
description: z.string().nullable(),
plan: z.enum(["free", "team", "pro", "enterprise"]),
cardPrefix: z.string(),
});
// ─── workspace.update ────────────────────────────────────────
export const workspaceUpdateResponseSchema = z.object({
publicId: z.string(),
name: z.string(),
slug: z.string(),
description: z.string().nullable(),
plan: z.enum(["free", "team", "pro", "enterprise"]),
showEmailsToMembers: z.boolean().nullable(),
weekStartDay: z.number().nullable(),
});
// ─── workspace.delete ────────────────────────────────────────
export const workspaceDeleteResponseSchema = z.object({
success: z.boolean(),
});