import { z } from "zod"; import { Group } from "@server/models"; const BaseIdSchema = z.object({ /** Group Id */ id: z.string().uuid(), }); export const GroupsListSchema = z.object({ body: z.object({ /** Groups sorting direction */ direction: z .string() .optional() .transform((val) => (val !== "ASC" ? "DESC" : val)), /** Groups sorting column */ sort: z .string() .refine((val) => Object.keys(Group.getAttributes()).includes(val), { message: "Invalid sort parameter", }) .default("updatedAt"), /** Only list groups where this user is a member */ userId: z.string().uuid().optional(), }), }); export type GroupsListReq = z.infer; export const GroupsInfoSchema = z.object({ body: BaseIdSchema, }); export type GroupsInfoReq = z.infer; export const GroupsCreateSchema = z.object({ body: z.object({ /** Group name */ name: z.string(), }), }); export type GroupsCreateReq = z.infer; export const GroupsUpdateSchema = z.object({ body: BaseIdSchema.extend({ /** Group name */ name: z.string(), }), }); export type GroupsUpdateReq = z.infer; export const GroupsDeleteSchema = z.object({ body: BaseIdSchema, }); export type GroupsDeleteReq = z.infer; export const GroupsMembershipsSchema = z.object({ body: BaseIdSchema.extend({ /** Group name search query */ query: z.string().optional(), }), }); export type GroupsMembershipsReq = z.infer; export const GroupsAddUserSchema = z.object({ body: BaseIdSchema.extend({ /** User Id */ userId: z.string().uuid(), }), }); export type GroupsAddUserReq = z.infer; export const GroupsRemoveUserSchema = z.object({ body: BaseIdSchema.extend({ /** User Id */ userId: z.string().uuid(), }), }); export type GroupsRemoveUserReq = z.infer;