61 lines
1.9 KiB
Go
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"
|
|
}
|