forked from phc/website
feat: add backend for auth with better-auth
This commit is contained in:
@@ -0,0 +1,57 @@
|
||||
import { sqliteTable, text, integer } from 'drizzle-orm/sqlite-core'
|
||||
|
||||
export const user = sqliteTable('user', {
|
||||
id: text('id').primaryKey(),
|
||||
name: text('name').notNull(),
|
||||
email: text('email').notNull().unique(),
|
||||
emailVerified: integer('email_verified', { mode: 'boolean' })
|
||||
.$defaultFn(() => false)
|
||||
.notNull(),
|
||||
image: text('image'),
|
||||
createdAt: integer('created_at', { mode: 'timestamp' })
|
||||
.$defaultFn(() => /* @__PURE__ */ new Date())
|
||||
.notNull(),
|
||||
updatedAt: integer('updated_at', { mode: 'timestamp' })
|
||||
.$defaultFn(() => /* @__PURE__ */ new Date())
|
||||
.notNull(),
|
||||
})
|
||||
|
||||
export const session = sqliteTable('session', {
|
||||
id: text('id').primaryKey(),
|
||||
expiresAt: integer('expires_at', { mode: 'timestamp' }).notNull(),
|
||||
token: text('token').notNull().unique(),
|
||||
createdAt: integer('created_at', { mode: 'timestamp' }).notNull(),
|
||||
updatedAt: integer('updated_at', { mode: 'timestamp' }).notNull(),
|
||||
ipAddress: text('ip_address'),
|
||||
userAgent: text('user_agent'),
|
||||
userId: text('user_id')
|
||||
.notNull()
|
||||
.references(() => user.id, { onDelete: 'cascade' }),
|
||||
})
|
||||
|
||||
export const account = sqliteTable('account', {
|
||||
id: text('id').primaryKey(),
|
||||
accountId: text('account_id').notNull(),
|
||||
providerId: text('provider_id').notNull(),
|
||||
userId: text('user_id')
|
||||
.notNull()
|
||||
.references(() => user.id, { onDelete: 'cascade' }),
|
||||
accessToken: text('access_token'),
|
||||
refreshToken: text('refresh_token'),
|
||||
idToken: text('id_token'),
|
||||
accessTokenExpiresAt: integer('access_token_expires_at', { mode: 'timestamp' }),
|
||||
refreshTokenExpiresAt: integer('refresh_token_expires_at', { mode: 'timestamp' }),
|
||||
scope: text('scope'),
|
||||
password: text('password'),
|
||||
createdAt: integer('created_at', { mode: 'timestamp' }).notNull(),
|
||||
updatedAt: integer('updated_at', { mode: 'timestamp' }).notNull(),
|
||||
})
|
||||
|
||||
export const verification = sqliteTable('verification', {
|
||||
id: text('id').primaryKey(),
|
||||
identifier: text('identifier').notNull(),
|
||||
value: text('value').notNull(),
|
||||
expiresAt: integer('expires_at', { mode: 'timestamp' }).notNull(),
|
||||
createdAt: integer('created_at', { mode: 'timestamp' }).$defaultFn(() => /* @__PURE__ */ new Date()),
|
||||
updatedAt: integer('updated_at', { mode: 'timestamp' }).$defaultFn(() => /* @__PURE__ */ new Date()),
|
||||
})
|
||||
@@ -0,0 +1,4 @@
|
||||
import 'dotenv/config'
|
||||
import { drizzle } from 'drizzle-orm/libsql'
|
||||
|
||||
export default drizzle(process.env.DB_FILE_NAME!)
|
||||
@@ -0,0 +1,33 @@
|
||||
import { sqliteTable, text } from 'drizzle-orm/sqlite-core'
|
||||
export * from './auth-schema'
|
||||
|
||||
import { user } from './auth-schema'
|
||||
|
||||
export const usersTable = sqliteTable('users', {
|
||||
id: text('id').references(() => user.id),
|
||||
username: text('username').notNull(),
|
||||
fullName: text('full_name'),
|
||||
email: text('email'),
|
||||
})
|
||||
|
||||
export const accountsTable = sqliteTable('accounts', {
|
||||
userId: text('user_id').references(() => user.id),
|
||||
provider: text('provider').notNull(),
|
||||
username: text('username').notNull(),
|
||||
})
|
||||
|
||||
export const poissonRequestsTable = sqliteTable('poisson_requests', {
|
||||
userId: text('user_id').references(() => usersTable.id),
|
||||
requestType: text('request_type').notNull(), // "link" or "create"
|
||||
comments: text('comments'), // contains username suggestions
|
||||
})
|
||||
|
||||
export const appuntiTable = sqliteTable('appunti', {
|
||||
userId: text('user_id').references(() => usersTable.id),
|
||||
hash: text('hash').notNull(),
|
||||
link: text('link'),
|
||||
visibility: text('visibility').notNull(), // "public", "internal", "private"
|
||||
title: text('title').notNull(),
|
||||
description: text('description'),
|
||||
tags: text('tags').notNull(), // Array of strings, e.g. ["#geometria-2", "#511aa", "#2017-18", "#frigerio"]
|
||||
})
|
||||
Reference in New Issue
Block a user