Something went wrong. Try again.
Scratch space for learning atproto app development
Something went wrong. Try again.
2.2 kB · 94 lines
TypeScript
at main
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495import SqliteDb from 'better-sqlite3'import { Kysely, Migrator, SqliteDialect, Migration, MigrationProvider,} from 'kysely'
// Types
export type DatabaseSchema = { status: Status auth_session: AuthSession auth_state: AuthState}
export type Status = { uri: string authorDid: string status: string createdAt: string indexedAt: string}
export type AuthSession = { key: string session: AuthSessionJson}
export type AuthState = { key: string state: AuthStateJson}
type AuthStateJson = string
type AuthSessionJson = string
// Migrations
const migrations: Record<string, Migration> = {}
const migrationProvider: MigrationProvider = { async getMigrations() { return migrations },}
migrations['001'] = { async up(db: Kysely<unknown>) { await db.schema .createTable('status') .addColumn('uri', 'varchar', (col) => col.primaryKey()) .addColumn('authorDid', 'varchar', (col) => col.notNull()) .addColumn('status', 'varchar', (col) => col.notNull()) .addColumn('createdAt', 'varchar', (col) => col.notNull()) .addColumn('indexedAt', 'varchar', (col) => col.notNull()) .execute() await db.schema .createTable('auth_session') .addColumn('key', 'varchar', (col) => col.primaryKey()) .addColumn('session', 'varchar', (col) => col.notNull()) .execute() await db.schema .createTable('auth_state') .addColumn('key', 'varchar', (col) => col.primaryKey()) .addColumn('state', 'varchar', (col) => col.notNull()) .execute() }, async down(db: Kysely<unknown>) { await db.schema.dropTable('auth_state').execute() await db.schema.dropTable('auth_session').execute() await db.schema.dropTable('status').execute() },}
// APIs
export const createDb = (location: string): Database => { return new Kysely<DatabaseSchema>({ dialect: new SqliteDialect({ database: new SqliteDb(location), }), })}
export const migrateToLatest = async (db: Database) => { const migrator = new Migrator({ db, provider: migrationProvider }) const { error } = await migrator.migrateToLatest() if (error) throw error}
export type Database = Kysely<DatabaseSchema>