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 }