lyrics

lyrics
git clone git://brookjeynes.dev/bjeynes/lyrics.git
Log | Files | Refs

commit 95ef2977add2edf137f8cafda5bdb15c59247913
parent 005b97f07e4fe0da72cd00b13616b03dc74c7c24
Author: brookjeynes <me@brookjeynes.dev>
Date:   Sun,  3 May 2026 14:32:24 +1000

feat(db): save artist to db

Signed-off-by: brookjeynes <me@brookjeynes.dev>

Diffstat:
Ainternal/db/artist.go | 26++++++++++++++++++++++++++
Minternal/server/new-artist.go | 23++++++++++++++++++++++-
2 files changed, 48 insertions(+), 1 deletion(-)

diff --git a/internal/db/artist.go b/internal/db/artist.go @@ -0,0 +1,26 @@ +package db + +import ( + "fmt" + "lyrics/internal/domain" + "time" +) + +func UpsertArtist(e Execer, artist domain.Artist) error { + _, err := e.Exec(` + insert into artists ( + name, + bio, + created_at + ) + values (?, ?, ?) + on conflict(id) do update set + name = excluded.name, + bio = excluded.bio + `, artist.Name, artist.Bio, time.Now().Format(time.RFC3339)) + if err != nil { + return fmt.Errorf("failed to insert or update artist: %w", err) + } + + return nil +} diff --git a/internal/server/new-artist.go b/internal/server/new-artist.go @@ -2,6 +2,7 @@ package server import ( "fmt" + "lyrics/internal/db" "lyrics/internal/domain" "lyrics/internal/server/htmx" newartist "lyrics/internal/server/ui/views/new-artist" @@ -10,7 +11,7 @@ import ( type NewArtistForm struct { Name string `schema:"name"` - Bio string `schema:"bio"` + Bio string `schema:"biography"` } func parseNewArtistForm(form NewArtistForm) (domain.Artist, error) { @@ -63,6 +64,26 @@ func (ss *ServerState) NewArtist(w http.ResponseWriter, r *http.Request) { return } + tx, err := ss.db.Begin() + if err != nil { + logger.Error("failed to begin db transaction", "err", err) + htmx.HxError(w, http.StatusBadRequest, "Failed to add artist.") + return + } + + err = db.UpsertArtist(ss.db, newArtist) + if err != nil { + logger.Error("failed to save new artist into db", "err", err) + htmx.HxError(w, http.StatusBadRequest, "Failed to add artist.") + return + } + + if err := tx.Commit(); err != nil { + logger.Error("failed to commit db transaction", "err", err) + htmx.HxError(w, http.StatusBadRequest, "Failed to add artist.") + return + } + logger.Debug("added artist", "artist", newArtist) htmx.HxRedirect(w, "/")