2023-01-28 10:51:46 +01:00
|
|
|
import { resolve } from 'path'
|
|
|
|
|
import sqlite from 'sqlite3'
|
2023-02-10 14:33:04 +01:00
|
|
|
import { asyncLocalStorage } from '../logger'
|
2023-01-28 10:51:46 +01:00
|
|
|
import { CREATE_TABLE_reservations } from './sql'
|
|
|
|
|
|
|
|
|
|
export const run = async (sql: string, params?: unknown) => {
|
|
|
|
|
const db = new sqlite.Database(resolve('autobaan_db'))
|
|
|
|
|
await new Promise<void>((res, rej) => {
|
2023-02-10 14:33:04 +01:00
|
|
|
asyncLocalStorage.getStore()?.debug(`<database> run ${sql} (${params})`)
|
2023-01-28 10:51:46 +01:00
|
|
|
db.run(sql, params, (err) => {
|
|
|
|
|
if (err) rej(err)
|
|
|
|
|
res()
|
2022-10-23 11:55:47 +02:00
|
|
|
})
|
2023-01-28 10:51:46 +01:00
|
|
|
})
|
|
|
|
|
db.close()
|
2022-10-23 11:55:47 +02:00
|
|
|
}
|
|
|
|
|
|
2023-01-28 10:51:46 +01:00
|
|
|
export const all = async <T>(sql: string, params?: unknown) => {
|
|
|
|
|
const db = new sqlite.Database(resolve('autobaan_db'))
|
2023-02-10 14:33:04 +01:00
|
|
|
const rows = await new Promise<T[]>((res, rej) => {
|
|
|
|
|
asyncLocalStorage.getStore()?.debug(`<database> all ${sql} (${params})`)
|
2023-01-28 10:51:46 +01:00
|
|
|
db.all(sql, params, (err, rows) => {
|
|
|
|
|
if (err) rej(err)
|
|
|
|
|
res(rows)
|
2022-10-23 11:55:47 +02:00
|
|
|
})
|
2023-02-10 14:33:04 +01:00
|
|
|
}
|
2022-10-23 11:55:47 +02:00
|
|
|
)
|
2023-01-28 10:51:46 +01:00
|
|
|
db.close()
|
|
|
|
|
return rows
|
2022-10-23 11:55:47 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
export const init = async () => {
|
|
|
|
|
try {
|
2023-01-28 10:51:46 +01:00
|
|
|
await run(CREATE_TABLE_reservations)
|
|
|
|
|
} catch (err: unknown) {
|
2022-10-23 11:55:47 +02:00
|
|
|
console.error(err)
|
|
|
|
|
}
|
|
|
|
|
}
|
2022-11-21 18:50:59 +01:00
|
|
|
|
|
|
|
|
export class DatabaseError extends Error {}
|
|
|
|
|
export class DatabaseEnvironmentError extends DatabaseError {}
|