go-todos-app/services/todoService.go
Michael Thomson 3d29dadaf3
All checks were successful
ci/woodpecker/push/build Pipeline was successful
ci/woodpecker/push/dryrun Pipeline was successful
ci/woodpecker/push/publish-tag Pipeline was successful
ci/woodpecker/push/publish-latest Pipeline was successful
update: service, handlers, and db separation
2024-06-14 17:49:56 -04:00

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
}