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) }