refac: missing user or article is reported with a domain not-found error instead of a raw GORM error, and the API answers 404 for it

This commit is contained in:
fsylvain committed 2026-09-23 18:55:05 +02:00
1 parent 7c57173497
commit 8460a078e3
13 files changed
+426 -32

No files matched your search

+3
View File
@@ -1,9 +1,12 @@
package user
import (
"errors"
"time"
)
var ErrUserNotFound = errors.New("user not found")
type User struct {
ID uint32 `json:"id"`
Username string `json:"username"`
@@ -38,7 +38,7 @@ func (a *ArticleRepository) Get(id uint32) (domain.Article, error) {
var article entity.Article
err := a.db.Model(&entity.Article{}).Preload("Images").First(&article, id).Error
if err != nil {
return domain.Article{}, err
return domain.Article{}, mapNotFoundErr(err, domain.ErrArticleNotFound)
}
return mappers.ArticleToDomain(article), nil
@@ -48,7 +48,7 @@ func (a *ArticleRepository) GetByName(name string) (domain.Article, error) {
var article entity.Article
err := a.db.Model(&entity.Article{}).Where("title = ?", name).First(&article).Error
if err != nil {
return domain.Article{}, err
return domain.Article{}, mapNotFoundErr(err, domain.ErrArticleNotFound)
}
return mappers.ArticleToDomain(article), nil
@@ -0,0 +1,14 @@
package persistence
import (
"errors"
"gorm.io/gorm"
)
func mapNotFoundErr(err error, sentinel error) error {
if errors.Is(err, gorm.ErrRecordNotFound) {
return sentinel
}
return err
}
@@ -21,7 +21,7 @@ func (u *UserRepository) Get(id uint32) (domainUser.User, error) {
var localUser entity.User
err := u.db.Model(&entity.User{}).First(&localUser, id).Error
if err != nil {
return domainUser.User{}, err
return domainUser.User{}, mapNotFoundErr(err, domainUser.ErrUserNotFound)
}
return mappers.UserToDomain(localUser), nil
@@ -69,7 +69,7 @@ func (u *UserRepository) GetByUsername(username string) (domainUser.User, error)
var localUser entity.User
err := u.db.Model(&entity.User{}).Where("username = ?", username).First(&localUser).Error
if err != nil {
return domainUser.User{}, err
return domainUser.User{}, mapNotFoundErr(err, domainUser.ErrUserNotFound)
}
return mappers.UserToDomain(localUser), nil
@@ -79,7 +79,7 @@ func (u *UserRepository) GetByEmail(email string) (domainUser.User, error) {
var localUser entity.User
err := u.db.Model(&entity.User{}).Where("email = ?", email).First(&localUser).Error
if err != nil {
return domainUser.User{}, err
return domainUser.User{}, mapNotFoundErr(err, domainUser.ErrUserNotFound)
}
return mappers.UserToDomain(localUser), nil