Skip to content

Instantly share code, notes, and snippets.

@bensonmacharia
Created May 12, 2023 14:52
Show Gist options
  • Save bensonmacharia/c8151277d7a0a1c3bb5b43e971cb90e9 to your computer and use it in GitHub Desktop.
Save bensonmacharia/c8151277d7a0a1c3bb5b43e971cb90e9 to your computer and use it in GitHub Desktop.
package model
import (
"bmacharia/jwt-go-rbac/database"
"html"
"strings"
"golang.org/x/crypto/bcrypt"
"gorm.io/gorm"
)
// User model
type User struct {
gorm.Model
ID uint `gorm:"primary_key"`
RoleID uint `gorm:"not null;DEFAULT:3" json:"role_id"`
Username string `gorm:"size:255;not null;unique" json:"username"`
Email string `gorm:"size:255;not null;unique" json:"email"`
Password string `gorm:"size:255;not null" json:"-"`
Role Role `gorm:"constraint:OnUpdate:CASCADE,OnDelete:CASCADE;" json:"-"`
}
// Save user details
func (user *User) Save() (*User, error) {
err := database.Db.Create(&user).Error
if err != nil {
return &User{}, err
}
return user, nil
}
// Generate encrypted password
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
}
// Get all users
func GetUsers(User *[]User) (err error) {
err = database.Db.Find(User).Error
if err != nil {
return err
}
return nil
}
// Get user by username
func GetUserByUsername(username string) (User, error) {
var user User
err := database.Db.Where("username=?", username).Find(&user).Error
if err != nil {
return User{}, err
}
return user, nil
}
// Validate user password
func (user *User) ValidateUserPassword(password string) error {
return bcrypt.CompareHashAndPassword([]byte(user.Password), []byte(password))
}
// Get user by id
func GetUserById(id uint) (User, error) {
var user User
err := database.Db.Where("id=?", id).Find(&user).Error
if err != nil {
return User{}, err
}
return user, nil
}
// Get user by id
func GetUser(User *User, id int) (err error) {
err = database.Db.Where("id = ?", id).First(User).Error
if err != nil {
return err
}
return nil
}
// Update user
func UpdateUser(User *User) (err error) {
err = database.Db.Omit("password").Updates(User).Error
if err != nil {
return err
}
return nil
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment