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
}