commit 5793df9e357b0b622d0f87cfd27ee9b9efb23c2e
parent c5b40ca1750049fc833c714b02ef5f1410c4cdda
Author: brookjeynes <me@brookjeynes.dev>
Date: Tue, 12 May 2026 18:12:27 +1000
fix: clean up song form and artist roles
Signed-off-by: brookjeynes <me@brookjeynes.dev>
Diffstat:
4 files changed, 8 insertions(+), 4 deletions(-)
diff --git a/internal/db/db.go b/internal/db/db.go
@@ -125,7 +125,7 @@ func Make(ctx context.Context, dbPath string) (*DB, error) {
role text not null,
sort_order integer not null,
- unique(song_id, sort_order),
+ unique(song_id, sort_order, role),
foreign key (song_id) references songs(id) on delete cascade,
foreign key (artist_id) references artists(id) on delete cascade,
primary key (song_id, artist_id, role)
diff --git a/internal/server/ui/views/new-song/new-song.js b/internal/server/ui/views/new-song/new-song.js
@@ -1,7 +1,7 @@
// filter out unnecessary data from request
const form = document.querySelector("form");
form.addEventListener("htmx:config:request", function(evt) {
- if (!evt.detail.ctx.request.action.startsWith("/new")) return;
+ if (!evt.detail.ctx.request.action.startsWith("/song/new")) return;
evt.detail.ctx.request.body.delete("artist");
evt.detail.ctx.request.body.delete("album");
evt.detail.ctx.request.body.delete("featuring");
diff --git a/internal/server/ui/views/new-song/new-song.templ b/internal/server/ui/views/new-song/new-song.templ
@@ -11,7 +11,7 @@ templ NewSong(params NewSongParams) {
@base.Base(base.BaseParams{Title: "new song"}) {
<h1>Add a song</h1>
<form
- hx-post="/new"
+ hx-post="/song/new"
hx-swap="none"
hx-disable-elt="#add-song-btn"
>
@@ -109,7 +109,7 @@ templ NewSong(params NewSongParams) {
hx-swap="outerHTML"
name="album"
autocomplete="off"
- :required="!selected"
+ :required="!selected && id > 0"
/>
</label>
<p x-show="selected">
diff --git a/internal/server/ui/views/song/song.templ b/internal/server/ui/views/song/song.templ
@@ -2,6 +2,7 @@ package song
import (
"fmt"
+ "lyrics/internal/domain"
"lyrics/internal/server/ui/layouts/base"
"time"
)
@@ -26,6 +27,9 @@ templ Song(params SongParams) {
if artist.Artist.LatinName != nil {
<span>({ *artist.Artist.LatinName })</span>
}
+ if artist.Role == domain.RoleFeatured {
+ [featured]
+ }
</a>
</li>
}