go-todos-app/services/todoService.go
Michael Thomson 8b1468fc1f
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
fix logging
2024-06-26 22:57:53 -04:00

68 lines
1.3 KiB
Go

package services
import (
"fmt"
"github.com/gofrs/uuid/v5"
"michaelthomson.dev/mthomson/go-todos-app/models"
)
type Db interface {
List() ([]models.Todo, error)
Get(id uuid.UUID) (models.Todo, error)
Add(todo models.Todo) error
Delete(id uuid.UUID) error
Update(id uuid.UUID, name string, done bool) error
}
type TodoService struct {
db Db
}
func NewTodoService(db Db) *TodoService {
return &TodoService{
db: db,
}
}
func (ts *TodoService) AddTodo(name string) (models.Todo, error) {
if name == "" {
return models.Todo{}, fmt.Errorf("Must provide a name")
}
id, err := uuid.NewV4()
if err != nil {
return models.Todo{}, err
}
err = ts.db.Add(models.NewTodo(id, name, false))
if err != nil {
return models.Todo{}, err
}
return ts.db.Get(id)
}
func (ts *TodoService) UpdateTodo(id uuid.UUID, name string, done bool) (models.Todo, error) {
err := ts.db.Update(id, name, done)
if err != nil {
return models.Todo{}, err
}
return ts.db.Get(id)
}
func (ts *TodoService) GetTodos() ([]models.Todo, error) {
return ts.db.List()
}
func (ts *TodoService) GetTodoById(id uuid.UUID) (models.Todo, error) {
return ts.db.Get(id)
}
func (ts *TodoService) DeleteTodoById(id uuid.UUID) error {
return ts.db.Delete(id)
}