Files
dumbassDashboard/backend/models/user.go
2025-09-12 12:38:11 +02:00

61 lines
1.9 KiB
Go

package models
import (
"time"
"golang.org/x/crypto/bcrypt"
"gorm.io/gorm"
)
type User struct {
ID uint `json:"id" gorm:"primaryKey"`
CreatedAt time.Time `json:"created_at"`
UpdatedAt time.Time `json:"updated_at"`
DeletedAt gorm.DeletedAt `json:"deleted_at" gorm:"index"`
Email string `json:"email" gorm:"uniqueIndex;not null"`
Password string `json:"-" gorm:"not null"` // Hidden from JSON
FirstName string `json:"first_name" gorm:"not null"`
LastName string `json:"last_name" gorm:"not null"`
Avatar string `json:"avatar"`
Role string `json:"role" gorm:"default:'member'"` // admin, manager, member
// Relationships
Projects []Project `json:"projects" gorm:"many2many:project_members"`
OwnedProjects []Project `json:"owned_projects" gorm:"foreignKey:OwnerID"`
Tasks []Task `json:"tasks" gorm:"foreignKey:AssignedToID"`
Comments []Comment `json:"comments" gorm:"foreignKey:UserID"`
FileUploads []FileUpload `json:"file_uploads" gorm:"foreignKey:UploadedByID"`
}
// HashPassword hashes the user's password
func (u *User) HashPassword(password string) error {
hashedPassword, err := bcrypt.GenerateFromPassword([]byte(password), bcrypt.DefaultCost)
if err != nil {
return err
}
u.Password = string(hashedPassword)
return nil
}
// CheckPassword checks if the provided password matches the user's password
func (u *User) CheckPassword(password string) bool {
err := bcrypt.CompareHashAndPassword([]byte(u.Password), []byte(password))
return err == nil
}
// GetFullName returns the user's full name
func (u *User) GetFullName() string {
return u.FirstName + " " + u.LastName
}
// IsAdmin checks if the user has admin role
func (u *User) IsAdmin() bool {
return u.Role == "admin"
}
// IsManager checks if the user has manager role or higher
func (u *User) IsManager() bool {
return u.Role == "manager" || u.Role == "admin"
}