import type { CommittedMessage } from "../types"; import type { Users } from "./generated/public/Users"; export type Conversation = { id: string; title: string; userId: string; createdAt?: string; }; export type Fact = { id: string; userId: string; sourceMessageId: string; content: string; createdAt?: string; }; export type FactTrigger = { id: string; sourceFactId: string; content: string; priorityMultiplier: number; priorityMultiplierReason: string | null; scopeConversationId: string; createdAt?: string; }; export type User = Omit & { id: string; }; export interface Entity { construct: (data: T) => T; create: (data: Omit) => Promise; createMany: (data: Omit[]) => Promise; findAll: (user?: { userId: string }) => Promise; findById: (id: string) => Promise; update: (id: string, data: Partial) => Promise; delete: (id: string) => Promise; } export interface ConversationEntity extends Entity { fetchMessages: (conversationId: string) => Promise>; } export interface FactEntity extends Entity { findByConversationId: (conversationId: string) => Promise>; } export interface MessageEntity extends Entity { findByConversationId: ( conversationId: string ) => Promise>; } export type FactTriggerEntity = Entity & { findByFactId: (factId: string) => Promise>; findByConversationId: (conversationId: string) => Promise>; }; export type UserEntity = Entity & { findByEmailAddress: (emailAddress: string) => Promise; }; export interface ApplicationDatabase { conversations: ConversationEntity; factTriggers: FactTriggerEntity; facts: FactEntity; messages: MessageEntity; users: UserEntity; }