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.
73 lines
1.8 KiB
73 lines
1.8 KiB
package models
|
|
|
|
import (
|
|
"context"
|
|
"time"
|
|
)
|
|
|
|
type Goal struct {
|
|
ID string `json:"id" db:"goal_id"`
|
|
UserID string `json:"-" db:"user_id"`
|
|
GroupID string `json:"groupId" db:"group_id"`
|
|
StartTime time.Time `json:"startTime" db:"start_time"`
|
|
EndTime time.Time `json:"endTime" db:"end_time"`
|
|
Amount int `json:"amount" db:"amount"`
|
|
Name string `json:"name" db:"name"`
|
|
Description string `json:"description" db:"description"`
|
|
}
|
|
|
|
func (goal *Goal) Update(update GoalUpdate) {
|
|
if update.Amount != nil {
|
|
goal.Amount = *update.Amount
|
|
}
|
|
if update.StartTime != nil {
|
|
goal.StartTime = *update.StartTime
|
|
}
|
|
if update.EndTime != nil {
|
|
goal.EndTime = *update.EndTime
|
|
}
|
|
if update.Name != nil {
|
|
goal.Name = *update.Name
|
|
}
|
|
if update.Description != nil {
|
|
goal.Description = *update.Description
|
|
}
|
|
}
|
|
|
|
type GoalUpdate struct {
|
|
StartTime *time.Time `json:"startTime"`
|
|
EndTime *time.Time `json:"endTime"`
|
|
Amount *int `json:"amount"`
|
|
Name *string `json:"name"`
|
|
Description *string `json:"description"`
|
|
}
|
|
|
|
type GoalResult struct {
|
|
Goal
|
|
Group *Group `json:"group"`
|
|
Items []*GoalResultItem `json:"items"`
|
|
Logs []*LogResult `json:"logs"`
|
|
CompletedAmount int `json:"completedAmount"`
|
|
}
|
|
|
|
type GoalResultItem struct {
|
|
Item
|
|
CompletedAmount int `json:"completedAmount"`
|
|
}
|
|
|
|
type GoalFilter struct {
|
|
UserID string
|
|
GroupIDs []string
|
|
IncludesTime *time.Time
|
|
MinTime *time.Time
|
|
MaxTime *time.Time
|
|
IDs []string
|
|
}
|
|
|
|
type GoalRepository interface {
|
|
Find(ctx context.Context, id string) (*Goal, error)
|
|
List(ctx context.Context, filter GoalFilter) ([]*Goal, error)
|
|
Insert(ctx context.Context, goal Goal) error
|
|
Update(ctx context.Context, goal Goal) error
|
|
Delete(ctx context.Context, goal Goal) error
|
|
}
|