62 lines
1.2 KiB
Go
62 lines
1.2 KiB
Go
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
|
|
}
|