import { number, z } from "zod"; export const ErrorTo = z.object({ errors: z.array(z.string()), code: z.number(), }); export type TErrorTo = z.infer; export function isError(value: unknown): value is TErrorTo { return ErrorTo.safeParse(value).success; } function CreateAPIResponse(obj: T) { return z.union([ErrorTo, obj]); } export const NoContentTo = z.object({}); export type TNoContentTo = z.infer; export const NoContentToResp = CreateAPIResponse(NoContentTo); export type TNoContentToResp = z.infer; export const PersonSignupTo = z.object({ username: z.string(), fullName: z.string(), password: z.string(), }); export type TPersonSignupTo = z.infer; export const PersonTo = z.object({ uuid: z.string(), username: z.string(), fullName: z.string(), }); export type TPersonTo = z.infer; export const PersonToResp = CreateAPIResponse(PersonTo); export type TPersonToResp = z.infer; export const PersonToArr = z.array(PersonTo); export type TPersonToArr = z.infer; export const PersonToArrResp = CreateAPIResponse(PersonToArr); export type TPersonToArrResp = z.infer; export const TokenRequestTo = z.object({ username: z.string(), password: z.string(), }); export type TTokenRequestTo = z.infer; export const TokenTo = z.object({ token: z.string(), }); export type TTokenTo = z.infer; export const TokenToResp = CreateAPIResponse(TokenTo); export type TTokenToResp = z.infer; export const PostTo = z.object({ id: z.number(), authorUuid: z.string(), text: z.string(), createdAt: z.number(), authorUsername: z.string(), }); export type TPostTo = z.infer; export const PostToArr = z.array(PostTo); export type TPostToArr = z.infer; export const PostToResp = CreateAPIResponse(PostTo); export type TPostToResp = z.infer; export const PostToArrResp = CreateAPIResponse(PostToArr); export type TPostToArrResp = z.infer; export const MessageTo = z.object({ id: number(), chatId: z.number(), authorUuid: z.string(), authorUsername: z.string(), contents: z.string(), createdAt: z.number(), }); export type TMessageTo = z.infer; export const MessageToResp = CreateAPIResponse(MessageTo); export type TMessageToResp = z.infer; export const MessagesToResp = CreateAPIResponse(z.array(MessageTo)); export type TMessagesToResp = z.infer; export const ChatTo = z.object({ id: z.number(), name: z.string(), creatorUuid: z.string(), memberCount: z.number(), }); export type TChatTo = z.infer; export const ChatToResp = CreateAPIResponse(ChatTo); export type TChatToResp = z.infer; export const ChatsToResp = CreateAPIResponse(z.array(ChatTo)); export type TChatsToResp = z.infer;