feat: move entity and usecase to root folder
This commit is contained in:
@@ -0,0 +1,85 @@
|
||||
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)
|
||||
}
|
||||
Reference in New Issue
Block a user