package services import ( "fmt" "github.com/google/uuid" "michaelthomson.dev/mthomson/go-todos-app/db" ) type TodoService struct { store *db.TodosStore } func NewTodoService(store *db.TodosStore) *TodoService { return &TodoService{ store: store, } } func (ts *TodoService) AddTodo(name string) (todo db.Todo, err error) { addedTodo := db.Todo{ Id: uuid.New(), Name: name, Done: false, } ts.store.Todos = append(ts.store.Todos, addedTodo) return addedTodo, nil } func (ts *TodoService) GetTodos() (todos []db.Todo, err error) { return ts.store.Todos, nil } func (ts *TodoService) GetTodoById(id uuid.UUID) (todo db.Todo, err error) { for _, todo := range ts.store.Todos { if id == todo.Id { return todo, nil } } return db.Todo{}, fmt.Errorf("Could not find todo by id %q", id) } func (ts *TodoService) DeleteTodoById(id uuid.UUID) (err error) { index := -1 for i, todo := range ts.store.Todos { if id == todo.Id { index = i } } if index == -1 { return fmt.Errorf("Could not find todo by id %q", id) } ts.store.Todos = append(ts.store.Todos[:index], ts.store.Todos[index + 1:]...) return nil }