todo/internal/todo/service/service.go

82 lines
1.5 KiB
Go

package service
import "gitea.michaelthomson.dev/mthomson/habits/internal/todo/repository"
type Todo struct {
Id int64
Name string
Done bool
}
func NewTodo(name string, done bool) Todo {
return Todo{Name: name, Done: done}
}
func TodoFromTodoRow(todoRow repository.TodoRow) Todo {
return Todo{Id: todoRow.Id, Name: todoRow.Name, Done: todoRow.Done}
}
func TodoRowFromTodo(todo Todo) repository.TodoRow {
return repository.TodoRow{Id: todo.Id, Name: todo.Name, Done: todo.Done}
}
type TodoGetter interface {
GetTodo(id int64) (Todo, error)
}
type TodoCreater interface {
CreateTodo(todo Todo) (Todo, error)
}
type TodoDeleter interface {
DeleteTodo(id int64) error
}
type TodoUpdater interface {
UpdateTodo(todo Todo) error
}
type TodoService struct {
repo repository.TodoRepository
}
func NewTodoService(todoRepo repository.TodoRepository) *TodoService {
return &TodoService{todoRepo}
}
func (s *TodoService) GetTodo(id int64) (Todo, error) {
todo, err := s.repo.GetById(id)
if err != nil {
return Todo{}, err
}
return TodoFromTodoRow(todo), err
}
func (s *TodoService) CreateTodo(todo Todo) (Todo, error) {
todoRow := TodoRowFromTodo(todo)
newTodoRow, err := s.repo.Create(todoRow)
if err != nil {
return Todo{}, err
}
return TodoFromTodoRow(newTodoRow), err
}
func (s *TodoService) DeleteTodo(id int64) error {
err := s.repo.Delete(id);
return err
}
func (s *TodoService) UpdateTodo(todo Todo) error {
todoRow := TodoRowFromTodo(todo)
err := s.repo.Update(todoRow)
return err
}