68 lines
1.3 KiB
Go
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() (todos []models.Todo, err error) {
|
|
return ts.db.List()
|
|
}
|
|
|
|
func (ts *TodoService) GetTodoById(id uuid.UUID) (todo models.Todo, err error) {
|
|
return ts.db.Get(id)
|
|
}
|
|
|
|
func (ts *TodoService) DeleteTodoById(id uuid.UUID) (err error) {
|
|
return ts.db.Delete(id)
|
|
}
|