82 lines
3.6 KiB
JavaScript
82 lines
3.6 KiB
JavaScript
"use strict";
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
exports.up = up;
|
|
exports.down = down;
|
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
async function up(db) {
|
|
await db.schema
|
|
.createTable('users')
|
|
.ifNotExists()
|
|
.addColumn('id', 'text', (col) => col.primaryKey())
|
|
.addColumn('email', 'text', (col) => col.notNull().unique())
|
|
.addColumn('name', 'text', (col) => col.notNull())
|
|
.addColumn('password_hash', 'text', (col) => col.notNull())
|
|
.addColumn('role', 'text', (col) => col.notNull().defaultTo('member'))
|
|
.addColumn('org_id', 'text')
|
|
.addColumn('created_at', 'integer', (col) => col.notNull())
|
|
.addColumn('updated_at', 'integer', (col) => col.notNull())
|
|
.execute();
|
|
await db.schema
|
|
.createTable('organizations')
|
|
.ifNotExists()
|
|
.addColumn('id', 'text', (col) => col.primaryKey())
|
|
.addColumn('name', 'text', (col) => col.notNull())
|
|
.addColumn('slug', 'text', (col) => col.notNull().unique())
|
|
.addColumn('created_at', 'integer', (col) => col.notNull())
|
|
.execute();
|
|
await db.schema
|
|
.createTable('org_members')
|
|
.ifNotExists()
|
|
.addColumn('id', 'text', (col) => col.primaryKey())
|
|
.addColumn('org_id', 'text', (col) => col.notNull().references('organizations.id'))
|
|
.addColumn('user_id', 'text', (col) => col.notNull().references('users.id'))
|
|
.addColumn('role', 'text', (col) => col.notNull().defaultTo('member'))
|
|
.addColumn('joined_at', 'integer', (col) => col.notNull())
|
|
.execute();
|
|
await db.schema
|
|
.createTable('api_keys')
|
|
.ifNotExists()
|
|
.addColumn('id', 'text', (col) => col.primaryKey())
|
|
.addColumn('user_id', 'text', (col) => col.notNull().references('users.id'))
|
|
.addColumn('org_id', 'text', (col) => col.notNull())
|
|
.addColumn('name', 'text', (col) => col.notNull())
|
|
.addColumn('key_hash', 'text', (col) => col.notNull().unique())
|
|
.addColumn('key_prefix', 'text', (col) => col.notNull())
|
|
.addColumn('permissions', 'text', (col) => col.notNull().defaultTo('["member"]'))
|
|
.addColumn('expires_at', 'integer')
|
|
.addColumn('last_used_at', 'integer')
|
|
.addColumn('created_at', 'integer', (col) => col.notNull())
|
|
.execute();
|
|
await db.schema
|
|
.createTable('auth_sessions')
|
|
.ifNotExists()
|
|
.addColumn('id', 'text', (col) => col.primaryKey())
|
|
.addColumn('user_id', 'text', (col) => col.notNull().references('users.id'))
|
|
.addColumn('token', 'text', (col) => col.notNull().unique())
|
|
.addColumn('expires_at', 'integer', (col) => col.notNull())
|
|
.addColumn('created_at', 'integer', (col) => col.notNull())
|
|
.execute();
|
|
await db.schema
|
|
.createIndex('idx_auth_sessions_token')
|
|
.ifNotExists()
|
|
.on('auth_sessions')
|
|
.columns(['token'])
|
|
.execute();
|
|
await db.schema
|
|
.createIndex('idx_users_email')
|
|
.ifNotExists()
|
|
.on('users')
|
|
.columns(['email'])
|
|
.execute();
|
|
}
|
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
async function down(db) {
|
|
await db.schema.dropIndex('idx_users_email').ifExists().execute();
|
|
await db.schema.dropIndex('idx_auth_sessions_token').ifExists().execute();
|
|
await db.schema.dropTable('auth_sessions').ifExists().execute();
|
|
await db.schema.dropTable('api_keys').ifExists().execute();
|
|
await db.schema.dropTable('org_members').ifExists().execute();
|
|
await db.schema.dropTable('organizations').ifExists().execute();
|
|
await db.schema.dropTable('users').ifExists().execute();
|
|
}
|