first commit
This commit is contained in:
79
backend/models/project.go
Normal file
79
backend/models/project.go
Normal file
@@ -0,0 +1,79 @@
|
||||
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 ""
|
||||
}
|
Reference in New Issue
Block a user