"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(); }