summaryrefslogtreecommitdiff
path: root/app/lib/db.server.ts
diff options
context:
space:
mode:
Diffstat (limited to 'app/lib/db.server.ts')
-rw-r--r--app/lib/db.server.ts25
1 files changed, 21 insertions, 4 deletions
diff --git a/app/lib/db.server.ts b/app/lib/db.server.ts
index dd9184d..bf63e70 100644
--- a/app/lib/db.server.ts
+++ b/app/lib/db.server.ts
@@ -74,6 +74,13 @@ function initSchema(db: Database.Database) {
);
CREATE INDEX IF NOT EXISTS idx_band_links_band_id ON band_links(band_id);
+ `);
+
+ // migrations
+ try { db.exec("ALTER TABLE bands ADD COLUMN description TEXT"); } catch { /* already exists */ }
+ try { db.exec("ALTER TABLE bands ADD COLUMN status TEXT NOT NULL DEFAULT 'active'"); } catch { /* already exists */ }
+
+ db.exec(`
CREATE INDEX IF NOT EXISTS idx_artist_links_artist_id ON artist_links(artist_id);
CREATE INDEX IF NOT EXISTS idx_band_artists_band_id ON band_artists(band_id);
CREATE INDEX IF NOT EXISTS idx_band_artists_artist_id ON band_artists(artist_id);
@@ -87,6 +94,8 @@ export interface Band {
slug: string;
name: string;
area: string | null;
+ description: string | null;
+ status: string;
created_at: string;
}
@@ -208,6 +217,8 @@ export interface CreateBandInput {
slug: string;
name: string;
area: string | null;
+ description: string | null;
+ status: string;
links: { label: string; url: string }[];
artists: { id: string; role: string | null }[];
message: string;
@@ -217,8 +228,8 @@ export interface CreateBandInput {
export function createBand(input: CreateBandInput): Band {
const db = getDb();
return db.transaction(() => {
- db.prepare("INSERT INTO bands (id, slug, name, area) VALUES (?, ?, ?, ?)").run(
- input.id, input.slug, input.name, input.area
+ db.prepare("INSERT INTO bands (id, slug, name, area, description, status) VALUES (?, ?, ?, ?, ?, ?)").run(
+ input.id, input.slug, input.name, input.area, input.description, input.status
);
input.links.forEach((link, i) => {
db.prepare(
@@ -236,6 +247,8 @@ export function createBand(input: CreateBandInput): Band {
const snapshot = JSON.stringify({
name: band.name,
area: band.area,
+ description: band.description,
+ status: band.status,
links: links.map((l) => ({ label: l.label, url: l.url })),
artists: artists.map((a) => ({ id: a.artist_id, name: a.artist_name, role: a.role })),
});
@@ -250,6 +263,8 @@ export interface UpdateBandInput {
slug: string;
name: string;
area: string | null;
+ description: string | null;
+ status: string;
links: { label: string; url: string }[];
artists: { id: string; role: string | null }[];
message: string;
@@ -259,8 +274,8 @@ export interface UpdateBandInput {
export function updateBand(id: string, input: UpdateBandInput): void {
const db = getDb();
db.transaction(() => {
- db.prepare("UPDATE bands SET slug = ?, name = ?, area = ? WHERE id = ?").run(
- input.slug, input.name, input.area, id
+ db.prepare("UPDATE bands SET slug = ?, name = ?, area = ?, description = ?, status = ? WHERE id = ?").run(
+ input.slug, input.name, input.area, input.description, input.status, id
);
db.prepare("DELETE FROM band_links WHERE band_id = ?").run(id);
input.links.forEach((link, i) => {
@@ -280,6 +295,8 @@ export function updateBand(id: string, input: UpdateBandInput): void {
const snapshot = JSON.stringify({
name: band.name,
area: band.area,
+ description: band.description,
+ status: band.status,
links: links.map((l) => ({ label: l.label, url: l.url })),
artists: artists.map((a) => ({ id: a.artist_id, name: a.artist_name, role: a.role })),
});