48 lines
1.5 KiB
TypeScript
48 lines
1.5 KiB
TypeScript
import { sqliteTable, text, integer, index } from 'drizzle-orm/sqlite-core';
|
|
|
|
export const files = sqliteTable(
|
|
'files',
|
|
{
|
|
id: text('id').primaryKey(),
|
|
backendId: text('backend_id'),
|
|
name: text('name').notNull(),
|
|
mimeType: text('mime_type').notNull(),
|
|
size: integer('size').notNull(),
|
|
source: text('source').notNull().default('cloud'),
|
|
localUri: text('local_uri'),
|
|
syncStatus: text('sync_status').notNull().default('cloud'),
|
|
parentFileId: text('parent_file_id'),
|
|
isFolder: integer('is_folder').notNull().default(0),
|
|
ocrText: text('ocr_text'),
|
|
thumbnailUrl: text('thumbnail_url'),
|
|
createdAt: text('created_at').notNull(),
|
|
updatedAt: text('updated_at').notNull(),
|
|
lastSyncedAt: text('last_synced_at'),
|
|
},
|
|
(t) => [
|
|
index('idx_files_backend_id').on(t.backendId),
|
|
index('idx_files_parent_id').on(t.parentFileId),
|
|
index('idx_files_source').on(t.source),
|
|
index('idx_files_is_folder').on(t.isFolder),
|
|
index('idx_files_sync_status').on(t.syncStatus),
|
|
],
|
|
);
|
|
|
|
export const fileTags = sqliteTable(
|
|
'file_tags',
|
|
{
|
|
id: text('id').primaryKey(),
|
|
fileId: text('file_id')
|
|
.notNull()
|
|
.references(() => files.id, { onDelete: 'cascade' }),
|
|
tagName: text('tag_name').notNull(),
|
|
tagType: text('tag_type').notNull().default('none'),
|
|
},
|
|
(t) => [index('idx_file_tags_file_id').on(t.fileId)],
|
|
);
|
|
|
|
export const deletedFiles = sqliteTable('deleted_files', {
|
|
id: text('id').primaryKey(),
|
|
deletedAt: text('deleted_at').notNull(),
|
|
});
|