From 5b7ccf0b671e2999b62befc729a3e517a0433728 Mon Sep 17 00:00:00 2001 From: Bertrand Yuan Date: Mon, 15 Dec 2025 23:48:10 +0800 Subject: initial commit -- the front-end prototype The initial code is base on Anirudh's work. More to see at: https://github.com/techwithanirudh/shadcn-blog Therefore, the code in this commit is under MIT license. --- src/server/db/schema/auth.ts | 55 ++++++++++++++++++++++++++++++++++++++++ src/server/db/schema/comments.ts | 43 +++++++++++++++++++++++++++++++ src/server/db/schema/index.ts | 2 ++ 3 files changed, 100 insertions(+) create mode 100644 src/server/db/schema/auth.ts create mode 100644 src/server/db/schema/comments.ts create mode 100644 src/server/db/schema/index.ts (limited to 'src/server/db/schema') diff --git a/src/server/db/schema/auth.ts b/src/server/db/schema/auth.ts new file mode 100644 index 0000000..5843fdb --- /dev/null +++ b/src/server/db/schema/auth.ts @@ -0,0 +1,55 @@ +import { boolean, text, timestamp } from 'drizzle-orm/pg-core'; +import { pgTableCreator } from 'drizzle-orm/pg-core'; + +const createTable = pgTableCreator((name) => `blog_${name}`); + +export const users = createTable('users', { + id: text('id').primaryKey(), + name: text('name').notNull(), + email: text('email').notNull().unique(), + emailVerified: boolean('email_verified').notNull(), + image: text('image'), + createdAt: timestamp('created_at').notNull(), + updatedAt: timestamp('updated_at').notNull(), + role: text('role').notNull(), +}); + +export const sessions = createTable('sessions', { + id: text('id').primaryKey(), + expiresAt: timestamp('expires_at').notNull(), + token: text('token').notNull().unique(), + createdAt: timestamp('created_at').notNull(), + updatedAt: timestamp('updated_at').notNull(), + ipAddress: text('ip_address'), + userAgent: text('user_agent'), + userId: text('user_id') + .notNull() + .references(() => users.id, { onDelete: 'cascade' }), +}); + +export const accounts = createTable('accounts', { + id: text('id').primaryKey(), + accountId: text('account_id').notNull(), + providerId: text('provider_id').notNull(), + userId: text('user_id') + .notNull() + .references(() => users.id, { onDelete: 'cascade' }), + accessToken: text('access_token'), + refreshToken: text('refresh_token'), + idToken: text('id_token'), + accessTokenExpiresAt: timestamp('access_token_expires_at'), + refreshTokenExpiresAt: timestamp('refresh_token_expires_at'), + scope: text('scope'), + password: text('password'), + createdAt: timestamp('created_at').notNull(), + updatedAt: timestamp('updated_at').notNull(), +}); + +export const verifications = createTable('verifications', { + id: text('id').primaryKey(), + identifier: text('identifier').notNull(), + value: text('value').notNull(), + expiresAt: timestamp('expires_at').notNull(), + createdAt: timestamp('created_at'), + updatedAt: timestamp('updated_at'), +}); diff --git a/src/server/db/schema/comments.ts b/src/server/db/schema/comments.ts new file mode 100644 index 0000000..9c0626b --- /dev/null +++ b/src/server/db/schema/comments.ts @@ -0,0 +1,43 @@ +import { + boolean, + index, + integer, + json, + primaryKey, + serial, + timestamp, + varchar, +} from 'drizzle-orm/pg-core'; +import { pgTableCreator } from 'drizzle-orm/pg-core'; + +const createTable = pgTableCreator((name) => `blog_${name}`); + +export const roles = createTable('roles', { + userId: varchar('userId', { length: 256 }).primaryKey(), + name: varchar('name', { length: 256 }).notNull(), + canDelete: boolean('canDelete').notNull(), +}); + +export const comments = createTable('comments', { + id: serial('id').primaryKey().notNull(), + page: varchar('page', { length: 256 }).notNull(), + thread: integer('thread'), + author: varchar('author', { length: 256 }).notNull(), + content: json('content').notNull(), + timestamp: timestamp('timestamp', { withTimezone: true }) + .defaultNow() + .notNull(), +}); + +export const rates = createTable( + 'rates', + { + userId: varchar('userId', { length: 256 }).notNull(), + commentId: integer('commentId').notNull(), + like: boolean('like').notNull(), + }, + (table) => [ + primaryKey({ columns: [table.userId, table.commentId] }), + index('comment_idx').on(table.commentId), + ], +); diff --git a/src/server/db/schema/index.ts b/src/server/db/schema/index.ts new file mode 100644 index 0000000..def18aa --- /dev/null +++ b/src/server/db/schema/index.ts @@ -0,0 +1,2 @@ +export * from './auth'; +export * from './comments'; -- cgit v1.2.3