api/internal/api/user/repository.go
2025-09-15 14:19:31 +03:00

54 lines
1.1 KiB
Go

package user
import (
"gorm.io/gorm"
"time"
)
type repo struct {
db *gorm.DB
}
func newRepo(db *gorm.DB) *repo {
return &repo{db: db}
}
type userRepo interface {
userCrud
userAuth
}
type userCrud interface {
register(user User) error
getByUuid(userUuid string) (User, error)
update(user map[string]any) error
delete(userUuid string) error
}
type userAuth interface {
getUserByEmail(email string) (User, error)
}
// user CRUD methods
func (r *repo) register(user User) error {
return r.db.Create(&user).Error
}
func (r *repo) getByUuid(userUuid string) (user User, err error) {
err = r.db.Where("uuid = ?", userUuid).First(&user).Error
return user, err
}
func (r *repo) update(user map[string]any) error {
return r.db.Where("uuid = ?", user["uuid"]).Updates(&user).Error
}
func (r *repo) delete(userUuid string) error {
return r.db.Model(&User{}).Where("uuid = ?", userUuid).Update("deleted_at", time.Now().UTC()).Error
}
// methods for auth
func (r *repo) getUserByEmail(email string) (user User, err error) {
err = r.db.Where("email = ?", email).First(&user).Error
return user, err
}