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) } }