package implementations import ( "errors" "dymatrix.de/jspahl/todo/internal/types" ) 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 } type User struct { id int } 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} prov.items = append(prov.items, storedItem) prov.index++ return nil } func (prov MemoryProvider) UpdateItem(item types.IItem) error { 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 }