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.
84 lines
2.3 KiB
84 lines
2.3 KiB
package models
|
|
|
|
import (
|
|
"context"
|
|
"time"
|
|
)
|
|
|
|
type Log struct {
|
|
ID string `json:"id" db:"log_id"`
|
|
UserID string `json:"-" db:"user_id"`
|
|
TaskID string `json:"taskId" db:"task_id"`
|
|
ItemID string `json:"itemId" db:"item_id"`
|
|
ItemAmount int `json:"itemAmount" db:"item_amount"`
|
|
SecondaryItemID *string `json:"secondaryItemId" db:"secondary_item_id"`
|
|
SecondaryItemAmount int `json:"secondaryItemAmount" db:"secondary_item_amount"`
|
|
LoggedTime time.Time `json:"loggedTime" db:"logged_time"`
|
|
Description string `json:"description" db:"description"`
|
|
}
|
|
|
|
func (log *Log) Amount(itemID string) int {
|
|
result := 0
|
|
|
|
if log.ItemID == itemID {
|
|
result += log.ItemAmount
|
|
}
|
|
if log.SecondaryItemID != nil && *log.SecondaryItemID == itemID {
|
|
result += log.SecondaryItemAmount
|
|
}
|
|
|
|
return result
|
|
}
|
|
|
|
func (log *Log) Update(update LogUpdate) {
|
|
if update.LoggedTime != nil {
|
|
log.LoggedTime = update.LoggedTime.UTC()
|
|
}
|
|
if update.Description != nil {
|
|
log.Description = *update.Description
|
|
}
|
|
if update.ItemAmount != nil {
|
|
log.ItemAmount = *update.ItemAmount
|
|
}
|
|
if update.SecondaryItemID != nil {
|
|
log.SecondaryItemID = update.SecondaryItemID
|
|
}
|
|
if update.ClearSecondaryItem {
|
|
log.SecondaryItemID = nil
|
|
}
|
|
if update.SecondaryItemAmount != nil {
|
|
log.SecondaryItemAmount = *update.SecondaryItemAmount
|
|
}
|
|
}
|
|
|
|
type LogUpdate struct {
|
|
LoggedTime *time.Time `json:"loggedTime"`
|
|
Description *string `json:"description"`
|
|
ItemAmount *int `json:"itemAmount"`
|
|
SecondaryItemID *string `json:"secondaryItemId"`
|
|
SecondaryItemAmount *int `json:"secondaryItemAmount"`
|
|
ClearSecondaryItem bool `json:"clearSecondaryItemId"`
|
|
}
|
|
|
|
type LogResult struct {
|
|
Log
|
|
Task *Task `json:"task"`
|
|
Item *Item `json:"item"`
|
|
SecondaryItem *Item `json:"secondaryItem"`
|
|
}
|
|
|
|
type LogFilter struct {
|
|
UserID string
|
|
TaskIDs []string
|
|
ItemIDs []string
|
|
MinTime *time.Time
|
|
MaxTime *time.Time
|
|
}
|
|
|
|
type LogRepository interface {
|
|
Find(ctx context.Context, id string) (*Log, error)
|
|
List(ctx context.Context, filter LogFilter) ([]*Log, error)
|
|
Insert(ctx context.Context, log Log) error
|
|
Update(ctx context.Context, log Log) error
|
|
Delete(ctx context.Context, log Log) error
|
|
}
|