planner/storage/memory.go

67 lines
1.2 KiB
Go
Raw Normal View History

2024-08-20 08:34:11 +02:00
package storage
2024-08-22 07:18:50 +02:00
import (
"time"
"code.ewintr.nl/planner/planner"
)
2024-08-16 14:25:06 +02:00
2024-08-23 10:52:17 +02:00
type deletedItem struct {
ID string
Timestamp time.Time
}
2024-08-16 14:25:06 +02:00
type Memory struct {
2024-08-23 10:52:17 +02:00
items map[string]planner.Syncable
deleted []deletedItem
2024-08-16 14:25:06 +02:00
}
func NewMemory() *Memory {
return &Memory{
2024-08-23 10:52:17 +02:00
items: make(map[string]planner.Syncable),
deleted: make([]deletedItem, 0),
2024-08-16 14:25:06 +02:00
}
}
2024-08-23 10:52:17 +02:00
func (m *Memory) Update(item planner.Syncable) error {
m.items[item.ID()] = item
return nil
}
func (m *Memory) Updated(timestamp time.Time) ([]planner.Syncable, error) {
2024-08-22 07:18:50 +02:00
result := make([]planner.Syncable, 0)
for _, i := range m.items {
2024-08-23 10:52:17 +02:00
if timestamp.IsZero() || i.Updated().Equal(timestamp) || i.Updated().After(timestamp) {
2024-08-22 07:18:50 +02:00
result = append(result, i)
}
}
return result, nil
}
2024-08-23 10:52:17 +02:00
func (m *Memory) Delete(id string) error {
if _, exists := m.items[id]; !exists {
2024-08-18 19:34:27 +02:00
return ErrNotFound
}
2024-08-23 10:52:17 +02:00
2024-08-21 16:35:44 +02:00
delete(m.items, id)
2024-08-23 10:52:17 +02:00
m.deleted = append(m.deleted, deletedItem{
ID: id,
Timestamp: time.Now(),
})
2024-08-18 19:34:27 +02:00
return nil
}
2024-08-23 10:52:17 +02:00
func (m *Memory) Deleted(t time.Time) ([]string, error) {
result := make([]string, 0)
for _, di := range m.deleted {
if di.Timestamp.Equal(t) || di.Timestamp.After(t) {
result = append(result, di.ID)
}
2024-08-16 14:25:06 +02:00
}
2024-08-23 10:52:17 +02:00
return result, nil
2024-08-16 14:25:06 +02:00
}