package user import ( "time" "zee/internal/resource/role" ) // User đại diện cho một người dùng trong hệ thống type User struct { ID string `json:"id" gorm:"type:uuid;primaryKey;default:uuid_generate_v4()"` Username string `json:"username" gorm:"size:50;uniqueIndex;not null"` Email string `json:"email" gorm:"size:100;uniqueIndex;not null"` PasswordHash string `json:"-" gorm:"not null"` FullName string `json:"full_name" gorm:"size:100"` AvatarURL string `json:"avatar_url,omitempty" gorm:"size:255"` IsActive bool `json:"is_active" gorm:"default:true"` LastLoginAt *time.Time `json:"last_login_at,omitempty"` CreatedAt time.Time `json:"created_at" gorm:"autoCreateTime"` UpdatedAt time.Time `json:"updated_at" gorm:"autoUpdateTime"` DeletedAt *time.Time `json:"-" gorm:"index"` Roles []*role.Role `json:"roles,omitempty" gorm:"many2many:user_roles;"` } // TableName specifies the table name for the User model func (User) TableName() string { return "users" } // HasRole kiểm tra xem user có vai trò được chỉ định không func (u *User) HasRole(roleName string) bool { for _, r := range u.Roles { if r.Name == roleName { return true } } return false } // HasAnyRole kiểm tra xem user có bất kỳ vai trò nào trong danh sách không func (u *User) HasAnyRole(roles ...string) bool { for _, r := range u.Roles { for _, roleName := range roles { if r.Name == roleName { return true } } } return false }