diff options
| author | Paul Buetow <paul@buetow.org> | 2026-04-30 10:42:32 +0300 |
|---|---|---|
| committer | Paul Buetow <paul@buetow.org> | 2026-04-30 10:42:32 +0300 |
| commit | 0d7063e5c91efeb219a4be5b93525b0837c8d3be (patch) | |
| tree | aba069224950e8e0d00fadd82dc4b00e4a7c4117 /internal/repository/user.go | |
| parent | e971128cdc64aa81bba134faa65dc53bc2680d60 (diff) | |
fix(ca): translate sql.ErrNoRows to nil,nil for optional lookups
Repository methods that perform single-row queries now return (nil,nil)
instead of leaking sql.ErrNoRows when a row is missing. This aligns with
service-layer expectations (e.g. GetMediaDetail, ValidateSession,
UpdateProgress, AssignTag, access checks) so normal missing data does
not break app flows.
Files changed:
- internal/repository/media.go, user.go, set.go, set_permission.go,
tag.go, note.go, playback_progress.go, playback_accumulator.go,
session.go, share.go
- internal/repository/sqlite_test.go (updated assertions)
- internal/repository/sqlite_no_rows_test.go (new focused repository tests)
- internal/service/no_rows_test.go (new focused service tests)
Diffstat (limited to 'internal/repository/user.go')
| -rw-r--r-- | internal/repository/user.go | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/internal/repository/user.go b/internal/repository/user.go index 7f366c2..073f61d 100644 --- a/internal/repository/user.go +++ b/internal/repository/user.go @@ -8,6 +8,7 @@ import ( "github.com/paul/kiss-media-player/internal/model" ) + // CreateUser inserts a new user and returns the generated ID. func (s *SQLite) CreateUser(ctx context.Context, user *model.User) (int64, error) { res, err := s.db.ExecContext(ctx, @@ -24,6 +25,9 @@ func scanUser(row sqlScanner) (*model.User, error) { var u model.User var admin int err := row.Scan(&u.ID, &u.Username, &u.PasswordHash, &admin, &u.CreatedAt) + if err == sql.ErrNoRows { + return nil, nil + } if err != nil { return nil, err } |
