add project groups to backend.
This commit is contained in:
@@ -8,6 +8,7 @@ import (
|
||||
type Project struct {
|
||||
ID string `json:"id" db:"project_id"`
|
||||
UserID string `json:"-" db:"user_id"`
|
||||
GroupID *string `json:"groupId" db:"project_group_id"`
|
||||
Name string `json:"name" db:"name"`
|
||||
Description string `json:"description" db:"description"`
|
||||
Icon string `json:"icon" db:"icon"`
|
||||
@@ -22,6 +23,12 @@ type Project struct {
|
||||
}
|
||||
|
||||
func (project *Project) Update(update ProjectUpdate) {
|
||||
if update.GroupID != nil {
|
||||
project.GroupID = update.GroupID
|
||||
if *project.GroupID == "" {
|
||||
project.GroupID = nil
|
||||
}
|
||||
}
|
||||
if update.Name != nil {
|
||||
project.Name = *update.Name
|
||||
}
|
||||
@@ -73,6 +80,7 @@ func (project *Project) Update(update ProjectUpdate) {
|
||||
}
|
||||
|
||||
type ProjectUpdate struct {
|
||||
GroupID *string `json:"groupId"`
|
||||
Name *string `json:"name"`
|
||||
Description *string `json:"description"`
|
||||
Icon *string `json:"icon"`
|
||||
@@ -95,11 +103,13 @@ type ProjectResult struct {
|
||||
|
||||
type ProjectFilter struct {
|
||||
UserID string
|
||||
ProjectGroupIDs []string
|
||||
Active *bool
|
||||
Favorite *bool
|
||||
Expiring bool
|
||||
IncludeSemiActive bool
|
||||
IDs []string
|
||||
Ungrouped bool
|
||||
}
|
||||
|
||||
type ProjectRepository interface {
|
||||
|
||||
+60
-5
@@ -3,24 +3,79 @@ package models
|
||||
import "context"
|
||||
|
||||
type ProjectGroup struct {
|
||||
ID string `json:"id" db:"id"`
|
||||
ID string `json:"id" db:"project_group_id"`
|
||||
UserID string `json:"-" db:"user_id"`
|
||||
Name string `json:"name" db:"name"`
|
||||
Description string `json:"description" db:"description"`
|
||||
Abbreviation string `json:"abbreviation" db:"abbreviation"`
|
||||
CategoryNames map[string]string `json:"categoryNames" db:"category_names"`
|
||||
}
|
||||
|
||||
func (group *ProjectGroup) Update(update ProjectGroupUpdate) {
|
||||
for key, value := range update.SetCategoryNames {
|
||||
if value == "" {
|
||||
delete(group.CategoryNames, key)
|
||||
} else {
|
||||
group.CategoryNames[key] = value
|
||||
}
|
||||
}
|
||||
|
||||
if update.Name != nil && *update.Name != "" {
|
||||
group.Name = *update.Name
|
||||
}
|
||||
if update.Abbreviation != nil && *update.Abbreviation != "" {
|
||||
group.Abbreviation = *update.Abbreviation
|
||||
}
|
||||
if update.Description != nil {
|
||||
group.Description = *update.Description
|
||||
}
|
||||
}
|
||||
|
||||
type ProjectGroupUpdate struct {
|
||||
Name *string `json:"name"`
|
||||
Abbreviation *string `json:"abbreviation"`
|
||||
SetCategoryNames map[string]string `json:"setCategoryNames"`
|
||||
ResetCategoryName *string `json:"resetCategoryName"`
|
||||
Name *string `json:"name"`
|
||||
Abbreviation *string `json:"abbreviation"`
|
||||
Description *string `json:"description"`
|
||||
SetCategoryNames map[string]string `json:"setCategoryNames"`
|
||||
}
|
||||
|
||||
type ProjectGroupFilter struct {
|
||||
UserID string `json:"userId"`
|
||||
}
|
||||
|
||||
type ProjectGroupResult struct {
|
||||
ProjectGroup
|
||||
|
||||
Projects []*ProjectResult `json:"projects"`
|
||||
ProjectCounts map[string]int `json:"projectCounts"`
|
||||
TaskCounts map[string]int `json:"taskCounts"`
|
||||
}
|
||||
|
||||
func (r *ProjectGroupResult) RecountTasks() {
|
||||
r.ProjectCounts = make(map[string]int)
|
||||
r.TaskCounts = make(map[string]int)
|
||||
|
||||
r.ProjectCounts["total"] = 0
|
||||
r.TaskCounts["total"] = 0
|
||||
|
||||
for _, project := range r.Projects {
|
||||
r.ProjectCounts["total"] += 1
|
||||
if project.StatusTag == nil {
|
||||
r.ProjectCounts["active"] += 1
|
||||
} else {
|
||||
r.ProjectCounts[*project.StatusTag] += 1
|
||||
}
|
||||
|
||||
for _, task := range project.Tasks {
|
||||
r.TaskCounts["total"] += 1
|
||||
if task.StatusTag == nil {
|
||||
r.TaskCounts["active"] += 1
|
||||
} else {
|
||||
r.TaskCounts[*task.StatusTag] += 1
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
type ProjectGroupRepository interface {
|
||||
Find(ctx context.Context, id string) (*ProjectGroup, error)
|
||||
List(ctx context.Context, filter ProjectGroupFilter) ([]*ProjectGroup, error)
|
||||
|
||||
Reference in New Issue
Block a user