package repositories import ( "fmt" "github.com/gofrs/uuid/v5" "michaelthomson.dev/mthomson/go-todos-app/models" ) type InMemoryTodoRepository struct { Todos []models.Todo } func (ts *InMemoryTodoRepository) List() (todo []models.Todo, err error) { return ts.Todos, nil } func (ts *InMemoryTodoRepository) Get(id uuid.UUID) (todo models.Todo, err error) { index := -1 for i, todo := range ts.Todos { if id == todo.Id { index = i } } if index == -1 { return models.Todo{}, fmt.Errorf("Could not find todo by id %q", id) } ts.Todos = append(ts.Todos[:index], ts.Todos[index + 1:]...) return ts.Todos[index], nil } func (ts *InMemoryTodoRepository) Add(todo models.Todo) (addedTodo models.Todo, err error) { ts.Todos = append(ts.Todos, todo) return todo, nil } func (ts *InMemoryTodoRepository) Delete(id uuid.UUID) (err error) { index := -1 for i, todo := range ts.Todos { if id == todo.Id { index = i } } if index == -1 { return fmt.Errorf("Could not find todo by id %q", id) } ts.Todos = append(ts.Todos[:index], ts.Todos[index + 1:]...) return nil } func NewInMemoryTodoRepository() InMemoryTodoRepository { return InMemoryTodoRepository{ Todos: []models.Todo{}, } }