blind_chat / src /routes /LocalDB.ts
lauro1's picture
test
faca43f
raw
history blame
3.68 kB
import Dexie, { type Table, liveQuery } from 'dexie';
import { refresh_chats_writable_empty, refresh_chats_writable } from "../routes/LayoutWritable";
import { env } from '$env/dynamic/public';
export interface Chat {
index?: number;
title: string,
id: string;
createdAt: Date,
message?: Array<MessageDb>;
}
export interface MessageDb {
content: string;
from: string;
id: string;
createdAt: Date;
updatedAt: Date;
}
export class ChatDatabase extends Dexie {
chats!: Table<Chat>;
constructor() {
super('blindchat');
this.version(16).stores({
chats: '++index, title, createdAt, id, message'
});
}
}
export async function createChat(id_chat: string, msg: MessageDb | undefined, title?: string) {
try {
let title_f = ""
if (title === undefined) {
let count = (await db.chats.count()) + 1
title_f = "Untitled " + count
}
else
title_f = title
const chat = {
id: id_chat,
title: title_f,
message: msg === undefined ? undefined : [msg],
createdAt: new Date(),
}
const id = await db.chats.add(chat);
} catch (error) {
console.log(error)
}
let push = await getChats()
refresh_chats_writable.set(push)
}
export async function deleteAllChats() {
const chat_ret = await db.chats.clear()
refresh_chats_writable_empty.set(true)
}
export async function deleteChat(id_chat: string) {
const chat_ret = await db.chats.where("id").equals(id_chat).delete()
let count = await db.chats.count()
if (count > 0) {
let push = await getChats()
refresh_chats_writable.set(push)
}
else {
refresh_chats_writable_empty.set(true)
}
}
export async function modifyTitle(id_chat: string, newTitle: string) {
const chat_ret = db.chats.where("id").equals(id_chat)
let count = await chat_ret.count()
if (count > 0) {
let res = await chat_ret.first()
chat_ret.modify({title: newTitle})
let push = await getChats()
refresh_chats_writable.set(push)
}
}
export async function addMessageToChat(id_chat: string, msg: MessageDb) {
const chat_ret = db.chats.where("id").equals(id_chat)
let count = await chat_ret.count()
if (count < 1) {
createChat(id_chat, msg, )
}
else {
let msgs: MessageDb[]
chat_ret.first().then((res) => {
if (res?.message == undefined) {
msgs.push(msg)
res.message = msgs
}
res.message.push(msg)
chat_ret.modify({id: id_chat, message: res.message})
})
}
}
export async function getTitle(id_chat: string) {
let title_ret = env.PUBLIC_APP_NAME
try {
const chat_ret = await (db.chats.where("id").equals(id_chat).first())
title_ret = chat_ret!.title
}
catch (err) {
console.log(err)
}
return title_ret
}
export async function getMessages(id_chat: string) {
try {
const chat_ret = await db.chats.where("id").equals(id_chat).first()
const msg = chat_ret?.message
return [...msg]
}
catch (err) {
console.log(err)
}
return undefined
}
export async function getChats() {
let titles = []
try {
const all = (await db.chats.orderBy('createdAt').toArray()).forEach(function (chat) {
titles.push({
title: chat.title,
model: "", // Hardcoded for now
id: chat.id,
updatedAt: chat.createdAt,
createdAt: chat.createdAt,
})
});
}
catch (err) {
console.log(err)
}
return titles;
}
export async function getChat(id_chat: string) {
const chat_ret = db.chats.where("id").equals(id_chat).first().then((res) => {
return res;
})
}
export const db = new ChatDatabase();