gte/internal/process/send.go

53 lines
973 B
Go
Raw Normal View History

2021-09-03 09:19:36 +02:00
package process
import (
"errors"
"fmt"
2024-03-08 09:20:40 +01:00
"code.ewintr.nl/gte/internal/storage"
"code.ewintr.nl/gte/internal/task"
2021-09-03 09:19:36 +02:00
)
var (
ErrSendTasks = errors.New("could not send tasks")
)
// Send sends local tasks that need to be dispatched
type Send struct {
local storage.LocalRepository
disp *storage.Dispatcher
}
func NewSend(local storage.LocalRepository, disp *storage.Dispatcher) *Send {
return &Send{
local: local,
disp: disp,
}
}
2021-09-03 09:31:41 +02:00
func (s *Send) Process() (int, error) {
2021-09-03 09:19:36 +02:00
tasks, err := s.local.FindAll()
if err != nil {
2021-09-03 09:31:41 +02:00
return 0, fmt.Errorf("%w: %v", ErrSendTasks, err)
2021-09-03 09:19:36 +02:00
}
2021-09-03 09:31:41 +02:00
var count int
2021-09-03 09:19:36 +02:00
for _, t := range tasks {
if t.LocalStatus != task.STATUS_UPDATED {
continue
}
t.ApplyUpdate()
if err := s.disp.Dispatch(&t.Task); err != nil {
2021-09-03 09:31:41 +02:00
return 0, fmt.Errorf("%w: %v", ErrSendTasks, err)
2021-09-03 09:19:36 +02:00
}
if err := s.local.MarkDispatched(t.LocalId); err != nil {
2021-09-03 09:31:41 +02:00
return 0, fmt.Errorf("%w: %v", ErrSendTasks, err)
2021-09-03 09:19:36 +02:00
}
2021-09-03 09:31:41 +02:00
count++
2021-09-03 09:19:36 +02:00
}
2021-09-03 09:31:41 +02:00
return count, nil
2021-09-03 09:19:36 +02:00
}