Files
soft_usite/pkg/models/user.go
T
2025-04-24 02:07:47 +00:00

106 lines
2.8 KiB
Go
Executable File

package models
import (
"fmt"
"strconv"
"time"
"github.com/sujit-baniya/fiber-boilerplate/config"
"github.com/sujit-baniya/fiber-boilerplate/app"
"gorm.io/gorm"
)
type User struct {
ID uint `gorm:"primarykey"`
CreatedAt time.Time
UpdatedAt time.Time
DeletedAt gorm.DeletedAt `gorm:"index"`
FirstName string `json:"first_name" gorm:"first_name"` //nolint:gofmt
LastName string `json:"last_name" gorm:"last_name"` //nolint:gofmt
Email string `json:"email" gorm:"email"`
Password string `json:"-" gorm:"password"`
EmailVerified bool `json:"email_verified" gorm:"email_verified"`
IsAdmin bool `json:"is_admin" gorm:"is_admin"`
Balance float32 `json:"balance" gorm:"balance"`
UserSetting UserSetting `json:"user_setting" gorm:"-"`
RoleID uint `json:"role_id" gorm:"role_id"`
Role Roles `gorm:"foreignKey:RoleID"` // Establecer relación con Roles
}
type Role struct {
ID uint `gorm:"primarykey"`
Name string `json:"name" gorm:"name"` //nolint:gofmt
Description string `json:"description" gorm:"description"` //nolint:gofmt
CreatedAt time.Time
UpdatedAt time.Time
DeletedAt gorm.DeletedAt `gorm:"index"`
}
func GetUserByEmail(email string) (*Users, error) {
var user Users
if err := app.Http.Database.Where(&Users{Email: email}).First(&user).Error; err != nil {
return nil, err
}
return &user, nil //nolint:wsl
}
func GetVerifiedUserByEmail(usuario string) (*Users, error) {
var user Users
if err := app.Http.Database.Where(&Users{NombreUsuario: usuario}).First(&user).Error; err != nil {
return nil, err
}
return &user, nil //nolint:wsl
}
func GetUserById(id interface{}) (*Users, error) {
var user Users
if err := app.Http.Database.Where("id = ? ", id).First(&user).Error; err != nil {
return nil, err
}
return &user, nil
}
func (u *User) Update() error {
if u.ID != 0 {
if err := app.Http.Database.Updates(&u).Error; err != nil {
return err
}
} else {
if err := app.Http.Database.Where(&User{Email: u.Email}).Updates(&u).Error; err != nil {
return err
}
}
app.Http.Database.First(&u)
u.Settings()
return nil
}
func (u *User) AddAmount(amount string, AlreadyAdded bool) {
if AlreadyAdded {
return
}
value, err := strconv.ParseFloat(amount, 32)
if err != nil {
// do something sensible
}
u.Balance += float32(value)
app.Http.Database.Updates(&u)
}
func (u *User) Settings() (UserSetting, error) {
userSettings := UserSetting{UserID: u.ID}
err := userSettings.Get()
if err != nil {
return UserSetting{}, err
}
u.UserSetting = userSettings
return userSettings, nil
}
func (u *User) Can(permission string) bool {
return app.Http.Auth.Casbin.Can(fmt.Sprintf("%d", u.ID), permission, config.MatchAll)
}