package models
import (
"theskyscape.com/repo/skykit"
)
// Project represents a software project
type Project struct {
skykit.Model
Name string
Description string
}
// CreateProject creates a new project in the database
func CreateProject(name, description string) (*Project, error) {
return Projects.Insert(&Project{
Name: name,
Description: description,
})
}
// GetAllProjects retrieves all projects
func GetAllProjects() ([]*Project, error) {
return Projects.Search("ORDER By CreatedAt DESC")
}
// GetProjectByID retrieves a single project by ID
func GetProjectByID(id string) (*Project, error) {
// TODO
return Projects.Get(id)
}
// GetTasks retrieves all tasks for this project
func (p *Project) GetTasks() ([]*Task, error) {
return Tasks.Search(`
WHERE ProjectID = ?
`, p.ID)
}
// GetTaskStats returns task statistics for the project
func (p *Project) GetTaskStats() (todo, inProgress, done int, err error) {
tasks, err := p.GetTasks()
if err != nil {
return 0, 0, 0, err
}
for _, task := range tasks {
switch task.Status {
case "todo":
todo++
case "in_progress":
inProgress++
case "done":
done++
}
}
return todo, inProgress, done, nil
}