You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

101 lines
2.1 KiB
Go

3 years ago
package implementations
import (
"errors"
"dymatrix.de/jspahl/todo/internal/types"
3 years ago
)
type Item struct {
id int
message string
deleted bool
}
func (item Item) GetId() int {
return item.id
}
func (item Item) GetMessage() string {
return item.message
}
3 years ago
type MemoryProvider struct {
index int
items []Item
itemsByUsers [][]*Item
}
func (prov MemoryProvider) CreateItem(item types.IItem) error {
storedItem := Item{id: prov.index, message: item.GetMessage(), deleted: false}
3 years ago
prov.items = append(prov.items, storedItem)
prov.index++
3 years ago
return nil
}
func (prov MemoryProvider) UpdateItem(item types.IItem) error {
3 years ago
storedItem, err := prov.GetItemPtr(item.GetId())
if err != nil {
return err
}
storedItem.message = item.GetMessage()
return nil
}
func (prov MemoryProvider) GetItemPtr(id int) (*Item, error) {
for i, item := range prov.items {
if item.id == id && !item.deleted {
return &prov.items[i], nil
}
}
return nil, errors.New("Item not found")
}
func (prov MemoryProvider) GetItem(id int) (types.IItem, error) {
item, err := prov.GetItemPtr(id)
return *item, err
}
func (prov MemoryProvider) GetItemByUser(user types.IUser) ([]types.IItem, error) {
var items []types.IItem
for i := range prov.itemsByUsers[user.GetId()] {
items = append(items, *prov.itemsByUsers[user.GetId()][i])
}
if len(items) == 0 {
return items, errors.New("no items for user ")
}
return items, nil
}
func (prov MemoryProvider) GetAllItems() ([]types.IItem, error) {
var items []types.IItem
for _, item := range prov.items {
if !item.deleted {
items = append(items, item)
}
}
return items, nil
}
func (prov MemoryProvider) Link(user types.IUser, item types.IItem) error {
storedItem, err := prov.GetItemPtr(item.GetId())
if err != nil {
return err
}
prov.itemsByUsers[user.GetId()] = append(prov.itemsByUsers[user.GetId()], storedItem)
return nil
}
func (prov MemoryProvider) DeleteItem(item types.IItem) error {
storedItem, err := prov.GetItemPtr(item.GetId())
if err != nil {
return err
}
storedItem.deleted = true
return nil
}
3 years ago
func (prov MemoryProvider) CreateUser(user types.IUser) (int, error) {
return prov.index, nil
}