Created
May 12, 2023 14:52
-
-
Save bensonmacharia/c8151277d7a0a1c3bb5b43e971cb90e9 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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