You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
85 lines
2.2 KiB
85 lines
2.2 KiB
package entities
|
|
|
|
import (
|
|
"git.aiterp.net/stufflog3/stufflog3/internal/genutils"
|
|
"git.aiterp.net/stufflog3/stufflog3/models"
|
|
"sort"
|
|
"strings"
|
|
"time"
|
|
)
|
|
|
|
type Item struct {
|
|
ID int `json:"id"`
|
|
ScopeID int `json:"scopeId"`
|
|
OwnerID string `json:"ownerId"`
|
|
ProjectID *int `json:"projectId,omitempty"`
|
|
RequirementID *int `json:"requirementId,omitempty"`
|
|
Name string `json:"name"`
|
|
Description string `json:"description"`
|
|
Tags []string `json:"tags"`
|
|
CreatedTime time.Time `json:"createdTime"`
|
|
AcquiredTime *time.Time `json:"acquiredTime"`
|
|
ScheduledDate *models.Date `json:"scheduledDate"`
|
|
}
|
|
|
|
type ItemStat struct {
|
|
ItemID int `json:"itemId"`
|
|
StatID int `json:"statId"`
|
|
Acquired int `json:"acquired"`
|
|
Required int `json:"required"`
|
|
}
|
|
|
|
func (item *Item) AcquiredOutside(fromTime, toTime time.Time) bool {
|
|
return item.AcquiredTime != nil && (item.AcquiredTime.Before(fromTime) || !item.AcquiredTime.Before(toTime))
|
|
}
|
|
|
|
func (item *Item) AcquiredBetween(fromTime, toTime time.Time) bool {
|
|
return item.AcquiredTime != nil && !item.AcquiredTime.Before(fromTime) && item.AcquiredTime.Before(toTime)
|
|
}
|
|
|
|
func (item *Item) HasTag(tag string) bool {
|
|
for _, tag2 := range item.Tags {
|
|
if strings.EqualFold(tag, tag2) {
|
|
return true
|
|
}
|
|
}
|
|
|
|
return false
|
|
}
|
|
|
|
func (item *Item) ApplyUpdate(update models.ItemUpdate) {
|
|
if update.RequirementID != nil {
|
|
if *update.RequirementID <= 0 {
|
|
item.RequirementID = nil
|
|
} else {
|
|
item.RequirementID = update.RequirementID
|
|
}
|
|
}
|
|
if update.OwnerID != nil {
|
|
item.OwnerID = *update.OwnerID
|
|
}
|
|
if update.Name != nil {
|
|
item.Name = *update.Name
|
|
}
|
|
if update.Description != nil {
|
|
item.Description = *update.Description
|
|
}
|
|
if update.AcquiredTime != nil {
|
|
item.AcquiredTime = update.AcquiredTime
|
|
}
|
|
if update.ScheduledDate != nil {
|
|
item.ScheduledDate = update.ScheduledDate
|
|
}
|
|
if update.ClearScheduledDate {
|
|
item.ScheduledDate = nil
|
|
}
|
|
if update.ClearAcquiredTime {
|
|
item.AcquiredTime = nil
|
|
}
|
|
|
|
if update.RemoveTags != nil || update.AddTags != nil {
|
|
item.Tags = genutils.SliceWithout(item.Tags, update.RemoveTags)
|
|
item.Tags = genutils.SliceWithUniques(item.Tags, update.AddTags)
|
|
sort.Strings(item.Tags)
|
|
}
|
|
}
|