project.go
go
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
}
No comments yet.