mirror of
https://github.com/docmost/docmost.git
synced 2026-05-18 23:44:24 +08:00
803f1f0b81
* user session management * WIP * cleanup * license * cleanup * don't cache index * rename current device property * fix
46 lines
1.4 KiB
TypeScript
46 lines
1.4 KiB
TypeScript
import { Kysely, sql } from 'kysely';
|
|
|
|
export async function up(db: Kysely<any>): Promise<void> {
|
|
await db.schema
|
|
.createTable('user_sessions')
|
|
.addColumn('id', 'uuid', (col) =>
|
|
col.primaryKey().defaultTo(sql`gen_uuid_v7()`),
|
|
)
|
|
.addColumn('user_id', 'uuid', (col) =>
|
|
col.notNull().references('users.id').onDelete('cascade'),
|
|
)
|
|
.addColumn('workspace_id', 'uuid', (col) =>
|
|
col.notNull().references('workspaces.id').onDelete('cascade'),
|
|
)
|
|
.addColumn('device_name', 'varchar')
|
|
.addColumn('user_agent', 'text')
|
|
.addColumn('ip_address', sql`inet`)
|
|
.addColumn('geo_location', 'varchar')
|
|
.addColumn('last_active_at', 'timestamptz', (col) =>
|
|
col.notNull().defaultTo(sql`now()`),
|
|
)
|
|
.addColumn('expires_at', 'timestamptz', (col) => col.notNull())
|
|
.addColumn('metadata', 'jsonb')
|
|
.addColumn('revoked_at', 'timestamptz')
|
|
.addColumn('created_at', 'timestamptz', (col) =>
|
|
col.notNull().defaultTo(sql`now()`),
|
|
)
|
|
.execute();
|
|
|
|
await sql`
|
|
CREATE INDEX idx_user_sessions_active
|
|
ON user_sessions (user_id, workspace_id, last_active_at DESC)
|
|
WHERE revoked_at IS NULL
|
|
`.execute(db);
|
|
|
|
await sql`
|
|
CREATE INDEX idx_user_sessions_revoked
|
|
ON user_sessions (expires_at)
|
|
WHERE revoked_at IS NOT NULL
|
|
`.execute(db);
|
|
}
|
|
|
|
export async function down(db: Kysely<any>): Promise<void> {
|
|
await db.schema.dropTable('user_sessions').execute();
|
|
}
|