diff --git a/server/src/db.ts b/server/src/db.ts index bc2ffdd..439a8f6 100644 --- a/server/src/db.ts +++ b/server/src/db.ts @@ -95,18 +95,24 @@ function setSchemaVersion(db: DB, version: number): void { export function migrateUpgrades(db: DB): void { const version = getSchemaVersion(db) if (version < 2) { - db.exec(` - ALTER TABLE digital_albums ADD COLUMN last_played_at TEXT; - CREATE TABLE IF NOT EXISTS loans ( + const hasColumn = (db.prepare('PRAGMA table_info(digital_albums)').all() as { name: string }[]).some( + (c) => c.name === 'last_played_at' + ) + const apply = db.transaction(() => { + if (!hasColumn) { + db.exec('ALTER TABLE digital_albums ADD COLUMN last_played_at TEXT') + } + db.exec(`CREATE TABLE IF NOT EXISTS loans ( id INTEGER PRIMARY KEY AUTOINCREMENT, user_id INTEGER NOT NULL REFERENCES users(id) ON DELETE CASCADE, item_id INTEGER NOT NULL REFERENCES collection_items(id) ON DELETE CASCADE, borrower TEXT NOT NULL, lent_at TEXT NOT NULL DEFAULT (datetime('now')), returned_at TEXT - ); - `) - setSchemaVersion(db, 2) + );`) + setSchemaVersion(db, 2) + }) + apply() } } diff --git a/web/src/pages/ItemPage.tsx b/web/src/pages/ItemPage.tsx index 731181c..8bc2a4d 100644 --- a/web/src/pages/ItemPage.tsx +++ b/web/src/pages/ItemPage.tsx @@ -1,6 +1,6 @@ import { useCallback, useEffect, useState } from 'react' import { Link, useNavigate, useParams } from 'react-router-dom' -import { api } from '../api.js' +import { api, ApiError } from '../api.js' import { usePlayer } from '../player/PlayerContext.js' import type { DigitalAlbum, Item, ItemDetail } from '../types.js' import Cover from '../components/Cover.js' @@ -249,7 +249,18 @@ export default function ItemPage() {
- {user?.isAdmin && ( -{state.album.title}
{state.album.artist}
-