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

80 lines
2.3 KiB
Go

package models
import (
"time"
"gorm.io/gorm"
)
type Project 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"`
Name string `json:"name" gorm:"not null"`
Description string `json:"description"`
Status string `json:"status" gorm:"default:'active'"` // active, completed, archived, on_hold
StartDate *time.Time `json:"start_date"`
EndDate *time.Time `json:"end_date"`
Color string `json:"color" gorm:"default:'#3b82f6'"` // Hex color for UI
// Foreign Keys
OwnerID uint `json:"owner_id" gorm:"not null"`
// Relationships
Owner User `json:"owner" gorm:"foreignKey:OwnerID"`
Members []User `json:"members" gorm:"many2many:project_members"`
Tasks []Task `json:"tasks" gorm:"foreignKey:ProjectID"`
Files []FileUpload `json:"files" gorm:"foreignKey:ProjectID"`
}
type ProjectMember 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"`
ProjectID uint `json:"project_id" gorm:"not null"`
UserID uint `json:"user_id" gorm:"not null"`
Role string `json:"role" gorm:"default:'member'"` // owner, manager, member
// Relationships
Project Project `json:"project" gorm:"foreignKey:ProjectID"`
User User `json:"user" gorm:"foreignKey:UserID"`
}
// IsOwner checks if the given user is the owner of this project
func (p *Project) IsOwner(userID uint) bool {
return p.OwnerID == userID
}
// HasMember checks if the given user is a member of this project
func (p *Project) HasMember(userID uint) bool {
for _, member := range p.Members {
if member.ID == userID {
return true
}
}
return false
}
// GetMemberRole returns the role of a member in this project
func (p *Project) GetMemberRole(userID uint) string {
if p.OwnerID == userID {
return "owner"
}
for _, member := range p.Members {
if member.ID == userID {
// Get role from ProjectMember table
var pm ProjectMember
if err := db.Where("project_id = ? AND user_id = ?", p.ID, userID).First(&pm).Error; err == nil {
return pm.Role
}
return "member"
}
}
return ""
}