From 1f3028c25b27df158b1e01f3898b9ced91f091a6 Mon Sep 17 00:00:00 2001 From: imbytecat Date: Mon, 30 Mar 2026 21:27:58 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=B7=BB=E5=8A=A0=E4=B9=A6=E7=AD=BE?= =?UTF-8?q?=E6=A8=A1=E5=9D=97=20schema=20=E5=92=8C=E5=85=B3=E8=81=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/server/src/modules/bookmarks/schema.ts | 29 +++++++++++++++++++++ apps/server/src/server/db/relations.ts | 24 ++++++++++++++++- apps/server/src/server/db/schema/index.ts | 3 ++- 3 files changed, 54 insertions(+), 2 deletions(-) create mode 100644 apps/server/src/modules/bookmarks/schema.ts diff --git a/apps/server/src/modules/bookmarks/schema.ts b/apps/server/src/modules/bookmarks/schema.ts new file mode 100644 index 0000000..127ea71 --- /dev/null +++ b/apps/server/src/modules/bookmarks/schema.ts @@ -0,0 +1,29 @@ +import { boolean, integer, pgTable, text, uuid } from 'drizzle-orm/pg-core' +import { userTable } from '../../server/auth/schema' +import { generatedFields } from '../../server/db/fields' + +export const categoryTable = pgTable('category', { + ...generatedFields, + name: text('name').notNull(), + isPinned: boolean('is_pinned').notNull().default(false), + isPublic: boolean('is_public').notNull().default(true), + orderId: integer('order_id').notNull().default(0), + userId: text('user_id') + .notNull() + .references(() => userTable.id, { onDelete: 'cascade' }), +}) + +export const bookmarkTable = pgTable('bookmark', { + ...generatedFields, + name: text('name').notNull(), + url: text('url').notNull(), + icon: text('icon'), + categoryId: uuid('category_id') + .notNull() + .references(() => categoryTable.id, { onDelete: 'cascade' }), + isPublic: boolean('is_public').notNull().default(true), + orderId: integer('order_id').notNull().default(0), + userId: text('user_id') + .notNull() + .references(() => userTable.id, { onDelete: 'cascade' }), +}) diff --git a/apps/server/src/server/db/relations.ts b/apps/server/src/server/db/relations.ts index 77b9f38..ba27439 100644 --- a/apps/server/src/server/db/relations.ts +++ b/apps/server/src/server/db/relations.ts @@ -1,4 +1,26 @@ import { defineRelations } from 'drizzle-orm' import * as schema from './schema' -export const relations = defineRelations(schema, (_r) => ({})) +export const relations = defineRelations(schema, (r) => ({ + userTable: { + categories: r.many.categoryTable(), + bookmarks: r.many.bookmarkTable(), + }, + categoryTable: { + user: r.one.userTable({ + from: r.categoryTable.userId, + to: r.userTable.id, + }), + bookmarks: r.many.bookmarkTable(), + }, + bookmarkTable: { + user: r.one.userTable({ + from: r.bookmarkTable.userId, + to: r.userTable.id, + }), + category: r.one.categoryTable({ + from: r.bookmarkTable.categoryId, + to: r.categoryTable.id, + }), + }, +})) diff --git a/apps/server/src/server/db/schema/index.ts b/apps/server/src/server/db/schema/index.ts index a1cad6c..b56a0c0 100644 --- a/apps/server/src/server/db/schema/index.ts +++ b/apps/server/src/server/db/schema/index.ts @@ -1 +1,2 @@ -export * from './todo' +export * from '../../../modules/bookmarks/schema' +export * from '../../auth/schema'