55 lines
929 B
Go
55 lines
929 B
Go
package memory
|
|
|
|
import (
|
|
"sync"
|
|
|
|
"go-mod.ewintr.nl/planner/item"
|
|
"go-mod.ewintr.nl/planner/plan/storage"
|
|
)
|
|
|
|
type Schedule struct {
|
|
scheds map[string]item.Schedule
|
|
mutex sync.RWMutex
|
|
}
|
|
|
|
func NewSchedule() *Schedule {
|
|
return &Schedule{
|
|
scheds: make(map[string]item.Schedule),
|
|
}
|
|
}
|
|
|
|
func (s *Schedule) Store(sched item.Schedule) error {
|
|
s.mutex.Lock()
|
|
defer s.mutex.Unlock()
|
|
|
|
s.scheds[sched.ID] = sched
|
|
return nil
|
|
}
|
|
|
|
func (s *Schedule) Find(start, end item.Date) ([]item.Schedule, error) {
|
|
s.mutex.RLock()
|
|
defer s.mutex.RUnlock()
|
|
|
|
res := make([]item.Schedule, 0)
|
|
for _, sched := range s.scheds {
|
|
if start.After(sched.Date) || sched.Date.After(end) {
|
|
continue
|
|
}
|
|
res = append(res, sched)
|
|
}
|
|
|
|
return res, nil
|
|
}
|
|
|
|
func (s *Schedule) Delete(id string) error {
|
|
s.mutex.Lock()
|
|
defer s.mutex.Unlock()
|
|
|
|
if _, exists := s.scheds[id]; !exists {
|
|
return storage.ErrNotFound
|
|
}
|
|
delete(s.scheds, id)
|
|
|
|
return nil
|
|
}
|