add project groups to backend.

This commit is contained in:
2021-07-17 17:16:15 +02:00
parent ba4384b41d
commit 388ec4f687
14 changed files with 442 additions and 7 deletions
+10
View File
@@ -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
View File
@@ -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)