infoalloggi-monorepo/apps/infoalloggi/src/schemas/public/Messages.ts

67 lines
2.2 KiB
TypeScript
Raw Normal View History

import { chatsChatid, type ChatsChatid } from './Chats';
import { usersId, type UsersId } from './Users';
import type { ColumnType, Selectable, Insertable, Updateable } from 'kysely';
import { z } from 'zod';
2025-08-04 17:45:44 +02:00
/** Identifier type for public.messages */
export type MessagesMessageid = string & { __brand: 'public.messages' };
2025-08-04 17:45:44 +02:00
/** Represents the table public.messages */
export default interface MessagesTable {
messageid: ColumnType<MessagesMessageid, MessagesMessageid | undefined, MessagesMessageid>;
2025-08-04 17:45:44 +02:00
chatid: ColumnType<ChatsChatid, ChatsChatid, ChatsChatid>;
2025-08-04 17:45:44 +02:00
message: ColumnType<string, string, string>;
2025-08-04 17:45:44 +02:00
time: ColumnType<Date, Date | string, Date | string>;
2025-08-04 17:45:44 +02:00
isread: ColumnType<boolean, boolean | undefined, boolean>;
2025-08-04 17:45:44 +02:00
sender: ColumnType<UsersId, UsersId, UsersId>;
reply_to_id: ColumnType<MessagesMessageid | null, MessagesMessageid | null, MessagesMessageid | null>;
is_forwarded: ColumnType<boolean, boolean | undefined, boolean>;
2025-08-04 17:45:44 +02:00
}
export type Messages = Selectable<MessagesTable>;
export type NewMessages = Insertable<MessagesTable>;
export type MessagesUpdate = Updateable<MessagesTable>;
export const messagesMessageid = z.uuid().transform(value => value as MessagesMessageid);
export const MessagesSchema = z.object({
messageid: messagesMessageid,
chatid: chatsChatid,
message: z.string(),
time: z.date(),
isread: z.boolean(),
sender: usersId,
reply_to_id: messagesMessageid.nullable(),
is_forwarded: z.boolean(),
});
export const NewMessagesSchema = z.object({
messageid: messagesMessageid.optional(),
chatid: chatsChatid,
message: z.string(),
time: z.union([z.date(), z.string()]).pipe(z.coerce.date()),
isread: z.boolean().optional(),
sender: usersId,
reply_to_id: messagesMessageid.optional().nullable(),
is_forwarded: z.boolean().optional(),
});
export const MessagesUpdateSchema = z.object({
messageid: messagesMessageid.optional(),
chatid: chatsChatid.optional(),
message: z.string().optional(),
time: z.union([z.date(), z.string()]).pipe(z.coerce.date()).optional(),
isread: z.boolean().optional(),
sender: usersId.optional(),
reply_to_id: messagesMessageid.optional().nullable(),
is_forwarded: z.boolean().optional(),
});