Skip to content

Commit

Permalink
feat(database): Improve error returned to user
Browse files Browse the repository at this point in the history
Signed-off-by: Jo Vandeginste <Jo.Vandeginste@kuleuven.be>
  • Loading branch information
jovandeginste committed Feb 13, 2025
1 parent 4717f77 commit 58c7431
Show file tree
Hide file tree
Showing 3 changed files with 25 additions and 3 deletions.
3 changes: 2 additions & 1 deletion pkg/database/gorm.go
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,8 @@ func Connect(driver, dsn string, debug bool, logger *slog.Logger) (*gorm.DB, err
}

db, err := gorm.Open(d, &gorm.Config{
Logger: gormLogger,
Logger: gormLogger,
TranslateError: true,
})
if err != nil {
return nil, err
Expand Down
2 changes: 1 addition & 1 deletion pkg/database/user_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -220,7 +220,7 @@ func TestDatabaseUserCreateDoubleUsername(t *testing.T) {

err := defaultUser().Create(db)
require.Error(t, err)
require.Contains(t, err.Error(), "UNIQUE constraint failed")
assert.ErrorIs(t, err, gorm.ErrDuplicatedKey)

users, err := GetUsers(db)
require.NoError(t, err)
Expand Down
23 changes: 22 additions & 1 deletion pkg/database/workouts.go
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,10 @@ import (
"gorm.io/gorm/clause"
)

var ErrInvalidData = errors.New("could not convert data to a GPX structure")
var (
ErrInvalidData = errors.New("could not convert data to a GPX structure")
ErrWorkoutAlreadyExists = errors.New("user already has workout with exact start time")
)

type Workout struct {
Model
Expand Down Expand Up @@ -471,6 +474,15 @@ func (w *Workout) Delete(db *gorm.DB) error {
}

func (w *Workout) Create(db *gorm.DB) error {
err := w.create(db)
if errors.Is(err, gorm.ErrDuplicatedKey) {
return ErrWorkoutAlreadyExists
}

return err
}

func (w *Workout) create(db *gorm.DB) error {
if w.Data == nil {
return ErrInvalidData
}
Expand All @@ -479,6 +491,15 @@ func (w *Workout) Create(db *gorm.DB) error {
}

func (w *Workout) Save(db *gorm.DB) error {
err := w.save(db)
if errors.Is(err, gorm.ErrDuplicatedKey) {
return ErrWorkoutAlreadyExists
}

return err
}

func (w *Workout) save(db *gorm.DB) error {
if w.Data == nil {
return ErrInvalidData
}
Expand Down

0 comments on commit 58c7431

Please sign in to comment.