refatorando a arquitetura
This commit is contained in:
@@ -0,0 +1,91 @@
|
||||
package service
|
||||
|
||||
import (
|
||||
"controle-de-estoque/internal/model"
|
||||
"controle-de-estoque/internal/repository"
|
||||
"errors"
|
||||
"strconv"
|
||||
"strings"
|
||||
)
|
||||
|
||||
type InventorySevice struct {
|
||||
repo repository.InventoryRepository
|
||||
}
|
||||
|
||||
func NewInventoryService(repo repository.InventoryRepository) *InventorySevice {
|
||||
return &InventorySevice{repo: repo}
|
||||
}
|
||||
|
||||
func (s *InventorySevice) CreateProduct(
|
||||
name string,
|
||||
category string,
|
||||
price float64,
|
||||
quantity int) (*model.Product, error) {
|
||||
if name == "" {
|
||||
return nil, errors.New("O nome é obrigatório")
|
||||
}
|
||||
|
||||
if quantity < 0 {
|
||||
return nil, errors.New("A quantidade não pode ser negativa!")
|
||||
}
|
||||
|
||||
productInput := &model.ProductInput{
|
||||
Name: name,
|
||||
Category: category,
|
||||
Price: price,
|
||||
Quantity: quantity,
|
||||
}
|
||||
|
||||
product := s.repo.Create(productInput)
|
||||
|
||||
return product, nil
|
||||
}
|
||||
|
||||
func (s *InventorySevice) ListProducts() map[int]*model.Product {
|
||||
return s.repo.FindAll()
|
||||
}
|
||||
|
||||
func (s *InventorySevice) GetProduct(id int) (*model.Product, error) {
|
||||
return s.repo.FindByID(id)
|
||||
}
|
||||
|
||||
func (s *InventorySevice) UpdateProduct(id int, field, value string) (*model.Product, error) {
|
||||
product, err := s.repo.FindByID(id)
|
||||
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
switch strings.ToLower(field) {
|
||||
case "nome", "name":
|
||||
product.Name = value
|
||||
case "categoria", "category":
|
||||
product.Category = value
|
||||
case "preco", "preço", "price":
|
||||
price, err := strconv.ParseFloat(value, 64)
|
||||
if err != nil {
|
||||
return nil, errors.New("Preço inválido")
|
||||
}
|
||||
product.Price = price
|
||||
case "quantidade", "quantity":
|
||||
quantity, err := strconv.Atoi(value)
|
||||
if err != nil {
|
||||
return nil, errors.New("Quantidade inválida")
|
||||
}
|
||||
product.Quantity = quantity
|
||||
default:
|
||||
return nil, errors.New("Campo inválido")
|
||||
}
|
||||
|
||||
err = s.repo.Update(product)
|
||||
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return product, nil
|
||||
}
|
||||
|
||||
func (s *InventorySevice) DeleteProduct(id int) error {
|
||||
return s.repo.Delete(id)
|
||||
}
|
||||
Reference in New Issue
Block a user