Files
clean-architecture-go-v2/usecase/book/service.go
T
2020-10-12 07:35:29 -03:00

86 lines
1.6 KiB
Go

package book
import (
"strings"
"time"
"github.com/eminetto/clean-architecture-go-v2/entity"
)
//Service book usecase
type Service struct {
repo Repository
}
//NewService create new service
func NewService(r Repository) *Service {
return &Service{
repo: r,
}
}
//CreateBook create a book
func (s *Service) CreateBook(title string, author string, pages int, quantity int) (entity.ID, error) {
b, err := entity.NewBook(title, author, pages, quantity)
if err != nil {
return b.ID, err
}
return s.repo.Create(b)
}
//GetBook get a book
func (s *Service) GetBook(id entity.ID) (*entity.Book, error) {
b, err := s.repo.Get(id)
if b == nil {
return nil, entity.ErrNotFound
}
if err != nil {
return nil, err
}
return b, nil
}
//SearchBooks search books
func (s *Service) SearchBooks(query string) ([]*entity.Book, error) {
books, err := s.repo.Search(strings.ToLower(query))
if err != nil {
return nil, err
}
if len(books) == 0 {
return nil, entity.ErrNotFound
}
return books, nil
}
//ListBooks list books
func (s *Service) ListBooks() ([]*entity.Book, error) {
books, err := s.repo.List()
if err != nil {
return nil, err
}
if len(books) == 0 {
return nil, entity.ErrNotFound
}
return books, nil
}
//DeleteBook Delete a book
func (s *Service) DeleteBook(id entity.ID) error {
_, err := s.GetBook(id)
if err != nil {
return err
}
return s.repo.Delete(id)
}
//UpdateBook Update a book
func (s *Service) UpdateBook(e *entity.Book) error {
err := e.Validate()
if err != nil {
return err
}
e.UpdatedAt = time.Now()
return s.repo.Update(e)
}