59 lines
1.6 KiB
Go
59 lines
1.6 KiB
Go
package entities
|
|
|
|
import (
|
|
"github.com/Caknoooo/go-gin-clean-starter/pkg/helpers"
|
|
"github.com/google/uuid"
|
|
"gorm.io/gorm"
|
|
)
|
|
|
|
type User struct {
|
|
ID uuid.UUID `gorm:"type:uuid;primary_key;default:uuid_generate_v4()" json:"id"`
|
|
Name string `gorm:"type:varchar(100);not null" json:"name"`
|
|
Email string `gorm:"type:varchar(255);uniqueIndex;not null" json:"email"`
|
|
TelpNumber string `gorm:"type:varchar(20);index" json:"telp_number"`
|
|
Password string `gorm:"type:varchar(255);not null" json:"password"`
|
|
Role string `gorm:"type:varchar(50);not null;default:'user'" json:"role"`
|
|
ImageUrl string `gorm:"type:varchar(255)" json:"image_url"`
|
|
IsVerified bool `gorm:"default:false" json:"is_verified"`
|
|
|
|
TenantID uuid.UUID `gorm:"type:uuid;null;index" json:"tenant_id"`
|
|
Tenant Tenant `gorm:"foreignKey:TenantID;constraint:OnUpdate:CASCADE,OnDelete:SET NULL;" json:"tenant"`
|
|
|
|
Timestamp
|
|
}
|
|
|
|
// BeforeCreate hook to hash password and set defaults
|
|
func (u *User) BeforeCreate(_ *gorm.DB) (err error) {
|
|
// Hash password
|
|
if u.Password != "" {
|
|
u.Password, err = helpers.HashPassword(u.Password)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
}
|
|
|
|
// Ensure UUID is set
|
|
if u.ID == uuid.Nil {
|
|
u.ID = uuid.New()
|
|
}
|
|
|
|
// Set default role if not specified
|
|
if u.Role == "" {
|
|
u.Role = "user"
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
// BeforeUpdate hook to handle password updates
|
|
func (u *User) BeforeUpdate(_ *gorm.DB) (err error) {
|
|
// Only hash password if it has been changed
|
|
if u.Password != "" {
|
|
u.Password, err = helpers.HashPassword(u.Password)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
}
|
|
return nil
|
|
}
|