package model import ( "html" "kng_feed_api/database" "strings" "golang.org/x/crypto/bcrypt" "gorm.io/gorm" ) type User struct { gorm.Model Username string `gorm:"size:225;not null;unique" json:"username"` Password string `gorm:"size:225;not null" json:"-"` } func (user *User) Save() (*User, error) { err := database.Database.Create(&user).Error if err != nil { return &User{}, err } return user, nil } func (user *User) BeforeSave(*gorm.DB) error { passwordHash, err := bcrypt.GenerateFromPassword([]byte(user.Password), bcrypt.DefaultCost) if err != nil { return err } user.Password = string(passwordHash) user.Username = html.EscapeString(strings.TrimSpace(user.Username)) return nil } func (user *User) ValidatePassword(password string) error { return bcrypt.CompareHashAndPassword([]byte(user.Password), []byte(password)) } func FindUserByUsername(username string) (User, error) { var user User err := database.Database.Where("username=?", username).Find(&user).Error if err != nil { return User{}, err } return user, nil } func FindUserById(id uint) (User, error) { var user User err := database.Database.Where("ID=?", id).Find(&user).Error if err != nil { return User{}, err } return user, nil }