summaryrefslogtreecommitdiff
path: root/app/lib
diff options
context:
space:
mode:
authoryyamashita <yyamashita@hetzner.yyamashita.com>2026-08-15 20:12:25 +0900
committeryyamashita <yyamashita@hetzner.yyamashita.com>2026-08-15 20:12:25 +0900
commitb9e06d9a139e6d9a6d509f500beee97d0d071602 (patch)
tree1e131cac0c65471da6b17ca1abff258412f8816f /app/lib
parent1777cdbf812959e39a2b2abc142afc2fe8932938 (diff)
Add site-wide search for bands and artists
Adds a nav search box and /search route backed by a LIKE-based searchAll() query over band name/area/description and artist name.
Diffstat (limited to 'app/lib')
-rw-r--r--app/lib/db.server.ts19
1 files changed, 19 insertions, 0 deletions
diff --git a/app/lib/db.server.ts b/app/lib/db.server.ts
index 37d819b..e554d75 100644
--- a/app/lib/db.server.ts
+++ b/app/lib/db.server.ts
@@ -481,6 +481,25 @@ function buildSnapshot(band: Band, links: BandLink[], members: BandMemberRow[]):
});
}
+// ── Search ────────────────────────────────────────────────────────────────────
+
+export interface SearchResults {
+ bands: Band[];
+ artists: Artist[];
+}
+
+export function searchAll(query: string): SearchResults {
+ const db = getDb();
+ const q = `%${query}%`;
+ const bands = db
+ .prepare("SELECT * FROM bands WHERE name LIKE ? OR area LIKE ? OR description LIKE ? ORDER BY name LIMIT 50")
+ .all(q, q, q) as Band[];
+ const artists = db
+ .prepare("SELECT * FROM artists WHERE name LIKE ? ORDER BY name LIMIT 50")
+ .all(q) as Artist[];
+ return { bands, artists };
+}
+
// ── Artist queries ────────────────────────────────────────────────────────────
export function listArtists(): Artist[] {