mirror of
https://github.com/kataras/iris.git
synced 2025-12-20 11:27:06 +00:00
47 lines
841 B
Go
47 lines
841 B
Go
package todo
|
|
|
|
import (
|
|
"sync"
|
|
)
|
|
|
|
type Service interface {
|
|
Get(owner string) []Item
|
|
Save(owner string, newItems []Item) error
|
|
}
|
|
|
|
type MemoryService struct {
|
|
// key = session id, value the list of todo items that this session id has.
|
|
items map[string][]Item
|
|
// protected by locker for concurrent access.
|
|
mu sync.RWMutex
|
|
}
|
|
|
|
func NewMemoryService() *MemoryService {
|
|
return &MemoryService{
|
|
items: make(map[string][]Item),
|
|
}
|
|
}
|
|
|
|
func (s *MemoryService) Get(sessionOwner string) []Item {
|
|
s.mu.RLock()
|
|
items := s.items[sessionOwner]
|
|
s.mu.RUnlock()
|
|
|
|
return items
|
|
}
|
|
|
|
func (s *MemoryService) Save(sessionOwner string, newItems []Item) error {
|
|
var prevID int64
|
|
for i := range newItems {
|
|
if newItems[i].ID == 0 {
|
|
newItems[i].ID = prevID
|
|
prevID++
|
|
}
|
|
}
|
|
|
|
s.mu.Lock()
|
|
s.items[sessionOwner] = newItems
|
|
s.mu.Unlock()
|
|
return nil
|
|
}
|