Files
triggerssmith/internal/user/gorm_store.go
2025-12-19 14:26:28 +02:00

56 lines
1.1 KiB
Go

package user
import (
"fmt"
"gorm.io/gorm"
)
type GormUserStore struct {
db *gorm.DB
}
func NewGormUserStore(db *gorm.DB) (*GormUserStore, error) {
if db == nil {
return nil, fmt.Errorf("db is nil")
}
return &GormUserStore{
db: db,
}, nil
}
func (s *GormUserStore) Create(user *User) error {
return s.db.Create(user).Error
}
// Search returns a user by username or id or email
func (s *GormUserStore) GetBy(by, value string) (*User, error) {
if by != "username" && by != "id" && by != "email" {
return nil, fmt.Errorf("unsuppored field %s", by)
}
var user User
err := s.db.Where(fmt.Sprintf("%s = ?", by), value).First(&user).Error
if err != nil {
return nil, err
}
return &user, nil
}
func (s *GormUserStore) Update(user *User) error {
return s.db.Save(user).Error
}
func (s *GormUserStore) Delete(id int64) error {
return s.db.Delete(&User{}, id).Error
}
func (s *GormUserStore) init() error {
// AutoMigrate models
err := s.db.AutoMigrate(&User{})
if err != nil {
return fmt.Errorf("failed to migrate User model: %w", err)
}
return nil
}