db, handlers, and interfaces
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

This commit is contained in:
2024-06-15 21:33:14 -04:00
parent 3d29dadaf3
commit 09a957ca4b
12 changed files with 160 additions and 95 deletions

View File

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

View File

@@ -0,0 +1,3 @@
package services
type DbMock struct {}