Rewrites the internal/api comment blocks to rule 32: task, milestone and rule ids gone, the stories behind them restated as the constraint they left, stale references corrected (the stream secret is wired from config, the timezone handler already refreshes the scheduler, the Android app is the native client, the design docs cited are not in the repo). Also rewraps comment lines over 80 columns left by the earlier batches. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
53 lines
1.5 KiB
Go
53 lines
1.5 KiB
Go
package api
|
|
|
|
import (
|
|
"errors"
|
|
"net/http"
|
|
|
|
"github.com/jackc/pgx/v5"
|
|
|
|
"git.fabledsword.com/bvandeusen/minstrel/internal/apierror"
|
|
"git.fabledsword.com/bvandeusen/minstrel/internal/db/dbq"
|
|
)
|
|
|
|
// systemPlaylistsStatusResp is the wire shape for the home page's placeholder
|
|
// state lookup. Fields are nullable to distinguish "no row exists yet" (all
|
|
// nulls) from "row exists with these values".
|
|
type systemPlaylistsStatusResp struct {
|
|
InFlight bool `json:"in_flight"`
|
|
LastRunAt *string `json:"last_run_at"`
|
|
LastError *string `json:"last_error"`
|
|
}
|
|
|
|
// handleGetSystemPlaylistsStatus implements GET
|
|
// /api/me/system-playlists-status. Returns the caller's system_playlist_runs
|
|
// row, or zero-values when no row exists yet (i.e. the user has never had a
|
|
// build attempted).
|
|
func (h *handlers) handleGetSystemPlaylistsStatus(w http.ResponseWriter, r *http.Request) {
|
|
caller, ok := requireUser(w, r)
|
|
if !ok {
|
|
return
|
|
}
|
|
|
|
row, err := dbq.New(h.pool).GetSystemPlaylistRun(r.Context(), caller.ID)
|
|
if err != nil {
|
|
if errors.Is(err, pgx.ErrNoRows) {
|
|
writeJSON(w, http.StatusOK, systemPlaylistsStatusResp{})
|
|
return
|
|
}
|
|
h.logger.Error("api: get system playlists status", "err", err)
|
|
writeErr(w, apierror.InternalMsg("lookup failed", err))
|
|
return
|
|
}
|
|
|
|
resp := systemPlaylistsStatusResp{InFlight: row.InFlight}
|
|
if row.LastRunAt.Valid {
|
|
s := row.LastRunAt.Time.Format("2006-01-02T15:04:05Z07:00")
|
|
resp.LastRunAt = &s
|
|
}
|
|
if row.LastError != nil {
|
|
resp.LastError = row.LastError
|
|
}
|
|
writeJSON(w, http.StatusOK, resp)
|
|
}
|