gte/internal/task/repo.go

62 lines
995 B
Go
Raw Normal View History

2021-01-29 12:29:23 +01:00
package task
import (
"errors"
"fmt"
"git.sr.ht/~ewintr/gte/pkg/mstore"
)
var (
ErrMStoreError = errors.New("mstore gave error response")
)
type TaskRepo struct {
mstore mstore.MStorer
}
func NewRepository(ms mstore.MStorer) *TaskRepo {
return &TaskRepo{
mstore: ms,
}
}
func (tr *TaskRepo) FindAll(folder string) ([]*Task, error) {
msgs, err := tr.mstore.Messages(folder)
if err != nil {
return []*Task{}, err
}
tasks := []*Task{}
for _, msg := range msgs {
if msg.Valid() {
2021-01-29 17:22:07 +01:00
tasks = append(tasks, New(msg))
2021-01-29 12:29:23 +01:00
}
}
return tasks, nil
}
func (tr *TaskRepo) Update(t *Task) error {
if !t.Current {
return ErrOutdatedTask
}
2021-01-29 17:22:07 +01:00
if !t.Dirty {
2021-01-29 12:29:23 +01:00
return nil
}
// add new
2021-01-29 17:22:07 +01:00
if err := tr.mstore.Add(t.Folder, t.FormatSubject(), t.FormatBody()); err != nil {
2021-01-29 12:29:23 +01:00
return fmt.Errorf("%w: %s", ErrMStoreError, err)
}
// remove old
if err := tr.mstore.Remove(t.Message); err != nil {
return fmt.Errorf("%w: %s", ErrMStoreError, err)
}
t.Current = false
return nil
}