db, handlers, and interfaces
This commit is contained in:
@@ -4,58 +4,41 @@ import (
|
||||
"fmt"
|
||||
|
||||
"github.com/google/uuid"
|
||||
"michaelthomson.dev/mthomson/go-todos-app/db"
|
||||
"michaelthomson.dev/mthomson/go-todos-app/models"
|
||||
)
|
||||
|
||||
type Db interface {
|
||||
List() (todo []models.Todo, err error)
|
||||
Get(id uuid.UUID) (todo models.Todo, err error)
|
||||
Add(todo models.Todo) (addedTodo models.Todo, err error)
|
||||
Delete(id uuid.UUID) (err error)
|
||||
}
|
||||
|
||||
type TodoService struct {
|
||||
store *db.TodosStore
|
||||
db Db
|
||||
}
|
||||
|
||||
func NewTodoService(store *db.TodosStore) *TodoService {
|
||||
func NewTodoService(db Db) *TodoService {
|
||||
return &TodoService{
|
||||
store: store,
|
||||
db: db,
|
||||
}
|
||||
}
|
||||
|
||||
func (ts *TodoService) AddTodo(name string) (todo db.Todo, err error) {
|
||||
addedTodo := db.Todo{
|
||||
Id: uuid.New(),
|
||||
Name: name,
|
||||
Done: false,
|
||||
func (ts *TodoService) AddTodo(name string) (todo models.Todo, err error) {
|
||||
if name == "" {
|
||||
return models.Todo{}, fmt.Errorf("Must provide a name")
|
||||
}
|
||||
|
||||
ts.store.Todos = append(ts.store.Todos, addedTodo)
|
||||
|
||||
return addedTodo, nil
|
||||
return ts.db.Add(models.NewTodo(name, false))
|
||||
}
|
||||
|
||||
func (ts *TodoService) GetTodos() (todos []db.Todo, err error) {
|
||||
return ts.store.Todos, nil
|
||||
func (ts *TodoService) GetTodos() (todos []models.Todo, err error) {
|
||||
return ts.db.List()
|
||||
}
|
||||
|
||||
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) GetTodoById(id uuid.UUID) (todo models.Todo, err error) {
|
||||
return ts.db.Get(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
|
||||
return ts.db.Delete(id)
|
||||
}
|
||||
|
||||
3
services/todoService_test.go
Normal file
3
services/todoService_test.go
Normal file
@@ -0,0 +1,3 @@
|
||||
package services
|
||||
|
||||
type DbMock struct {}
|
||||
Reference in New Issue
Block a user