Files
browser-helper/src/db/schema.ts

83 lines
2.5 KiB
TypeScript

import { sqliteTable, text, integer, index } from 'drizzle-orm/sqlite-core';
import { randomUUID } from 'node:crypto';
export const cache = sqliteTable('cache', {
key: text('key').primaryKey(),
value: text('value').notNull(),
expireAt: integer('expire_at').notNull(),
createdAt: integer('created_at').notNull(),
});
export const xhsNote = sqliteTable('xhs_note', {
id: text('id').primaryKey(),
title: text('title'),
summary: text('summary'),
description: text('description'),
link: text('link'),
data: text('data'),
tags: text('tags'),
status: text('status'), // 正常笔记,归档,禁止用户,删除,不相关
authorUrl: text('author_url'),
cover: text('cover'),
syncStatus: integer('sync_status').notNull(),
syncAt: integer('sync_at').notNull(),
star: integer('star'),
userId: text('user_id'),
pushedAt: integer('pushed_at'),
createdAt: integer('created_at').notNull(),
updatedAt: integer('updated_at').notNull(),
deletedAt: integer('deleted_at'),
}, (table) => ([
index('idx_xhs_note_user_id').on(table.userId),
index('idx_xhs_note_tags').on(table.tags),
]));
export const xhsUser = sqliteTable('xhs_user', {
id: text('id').primaryKey(),
xsec_token: text('xsec_token'),
username: text('username'),
nickname: text('nickname'),
avatar: text('avatar'),
title: text('title'),
summary: text('summary'),
description: text('description'),
link: text('link'),
data: text('data'),
tags: text('tags'),
bunTags: text('bun_tags'),
followersCount: integer('followers_count'),
followingCount: integer('following_count'),
status: text('status'), // 笔记用户(从笔记中添加,没有获取具体详情) 正常用户,封禁,已删除
syncStatus: integer('sync_status').default(0).notNull(),
syncAt: integer('sync_at').default(0).notNull(),
star: integer('star'), // 标记
createdAt: integer('created_at').default(Date.now()).notNull(),
updatedAt: integer('updated_at').default(Date.now()).notNull(),
deletedAt: integer('deleted_at'),
}, (table) => ([
index('idx_xhs_user_id').on(table.id),
index('idx_xhs_user_tags').on(table.tags),
index('idx_xhs_user_bun_tags').on(table.bunTags),
]));
export const xhsTags = sqliteTable('xhs_tags', {
id: text('id').primaryKey().default(randomUUID()),
title: text('title').notNull(),
description: text('description'),
createdAt: integer('created_at').default(Date.now()).notNull(),
updatedAt: integer('updated_at').default(Date.now()).notNull(),
}, (table) => ([
index('idx_xhs_tags_title').on(table.title),
]));