lobe-chat
1import { DBModel } from '@/database/client/core/types/db';2import { DB_File, DB_FileSchema } from '@/database/client/schemas/files';3import { nanoid } from '@/utils/uuid';4
5import { BaseModel } from '../core';6
7class _FileModel extends BaseModel<'files'> {8constructor() {9super('files', DB_FileSchema);10}11
12async create(file: DB_File) {13const id = nanoid();14
15return this._addWithSync(file, `file-${id}`);16}17
18async findById(id: string): Promise<DBModel<DB_File> | undefined> {19const item = await this.table.get(id);20if (!item) return;21
22// arrayBuffer to url23const base64 = Buffer.from(item.data!).toString('base64');24
25return { ...item, url: `data:${item.fileType};base64,${base64}` };26}27
28async delete(id: string) {29return this.table.delete(id);30}31
32async clear() {33return this.table.clear();34}35}
36
37export const FileModel = new _FileModel();38