add task and item filters to goals.
continuous-integration/drone/push Build is passing

This commit is contained in:
2021-01-19 22:12:10 +01:00
parent 99cc6fac3c
commit a187e91c3c
8 changed files with 122 additions and 21 deletions
+44 -2
View File
@@ -2,6 +2,7 @@ package models
import (
"context"
"strings"
"time"
)
@@ -17,6 +18,25 @@ type Goal struct {
Name string `json:"name" db:"name"`
Description string `json:"description" db:"description"`
CompositionMode string `json:"compositionMode" db:"composition_mode"`
TaskFilter *string `json:"taskFilter" db:"task_filter"`
ItemFilter *string `json:"itemFilter" db:"item_filter"`
}
func (goal *Goal) Accepts(item *Item, task *Task) bool {
if item.GroupID != goal.GroupID {
return false
}
if goal.ItemID != nil && item.ID != *goal.ItemID {
return false
}
if goal.TaskFilter != nil && !strings.Contains(strings.ToLower(task.Name), *goal.TaskFilter) {
return false
}
if goal.ItemFilter != nil && !strings.Contains(strings.ToLower(item.Name), *goal.ItemFilter) {
return false
}
return true
}
func (goal *Goal) Update(update GoalUpdate) {
@@ -47,6 +67,18 @@ func (goal *Goal) Update(update GoalUpdate) {
if update.ClearItemID {
goal.ItemID = nil
}
if update.TaskFilter != nil {
goal.TaskFilter = update.TaskFilter
}
if update.ClearTaskFilter {
goal.TaskFilter = nil
}
if update.ItemFilter != nil {
goal.ItemFilter = update.ItemFilter
}
if update.ClearItemFilter {
goal.ItemFilter = nil
}
}
type GoalUpdate struct {
@@ -56,19 +88,29 @@ type GoalUpdate struct {
Name *string `json:"name"`
Description *string `json:"description"`
ItemID *string `json:"itemId"`
ClearItemID bool `json:"clearItemID"`
Unweighted *bool `json:"unweighted"`
CompositionMode *string `json:"compositionMode"`
ClearItemID bool `json:"clearItemID"`
TaskFilter *string `json:"taskFilter"`
ClearTaskFilter bool `json:"clearTaskFilter"`
ItemFilter *string `json:"itemFilter"`
ClearItemFilter bool `json:"clearItemFilter"`
}
type GoalResult struct {
Goal
Group *Group `json:"group"`
Items []*GoalResultItem `json:"items"`
Logs []*LogResult `json:"logs"`
Logs []*GoalResultLog `json:"logs"`
CompletedAmount int `json:"completedAmount"`
}
type GoalResultLog struct {
LogResult
ItemCounted bool `json:"itemCounted"`
SecondaryItemCounted bool `json:"secondaryItemCounted"`
}
type GoalResultItem struct {
Item
CompletedAmount int `json:"completedAmount"`