a post-component library for building user-interfaces on the web.
1import { SQLocal } from 'sqlocal'
2
3export let unwrap: (database: Database) => SQLocal
4
5export class Database {
6 #db: SQLocal
7 constructor() {
8 this.#db = new SQLocal('db')
9 this.#migrate()
10 }
11
12 static {
13 unwrap = database => database.#db
14 }
15
16 async #migrate() {
17 this.#db.sql`
18 create table if not exists boards (
19 id integer primary key autoincrement,
20 name text not null,
21 created_at datetime default current_timestamp
22 );
23
24 create table if not exists columns (
25 id integer primary key autoincrement,
26 board_id integer not null,
27 name text not null,
28 position integer not null,
29 created_at datetime default current_timestamp,
30 foreign key (board_id) references boards(id) on delete cascade
31 );
32
33 create table if not exists cards (
34 id integer primary key autoincrement,
35 column_id integer not null,
36 title text not null,
37 description text,
38 position integer not null,
39 created_at datetime default current_timestamp,
40 foreign key (column_id) references columns(id) on delete cascade
41 );
42
43 `
44 }
45
46 async close() {
47 await this.#db.destroy()
48 }
49}