package command import ( "fmt" "strings" "time" "github.com/google/uuid" "go-mod.ewintr.nl/planner/item" ) func NewAdd(main []string, fields map[string]string) (Command, error) { if len(main) == 0 || main[0] != "add" { return nil, ErrWrongCommand } main = main[1:] if len(main) == 0 { return nil, fmt.Errorf("%w: title is required for add", ErrInvalidArg) } tsk := item.Task{ ID: uuid.New().String(), TaskBody: item.TaskBody{ Title: strings.Join(main, ","), }, } if val, ok := fields[FieldDate]; ok { d := item.NewDateFromString(val) if d.IsZero() { return nil, fmt.Errorf("%w: could not parse date", ErrInvalidArg) } tsk.Date = d } if val, ok := fields[FieldTime]; ok { t := item.NewTimeFromString(val) if t.IsZero() { return nil, fmt.Errorf("%w: could not parse time", ErrInvalidArg) } tsk.Time = t } if val, ok := fields[FieldDuration]; ok { d, err := time.ParseDuration(val) if err != nil { return nil, fmt.Errorf("%w: could not parse duration", ErrInvalidArg) } tsk.Duration = d } if val, ok := fields[FieldRecurrer]; ok { rec := item.NewRecurrer(val) if rec == nil { return nil, fmt.Errorf("%w: could not parse recurrer", ErrInvalidArg) } tsk.Recurrer = rec tsk.RecurNext = tsk.Recurrer.First() } return &Store{ task: tsk, }, nil }