113 lines
3.8 KiB
Go
113 lines
3.8 KiB
Go
package productsmodule
|
|
|
|
import (
|
|
productdto "api/application/products/dto"
|
|
"api/libs/logger"
|
|
"api/libs/postgres"
|
|
|
|
"api/models/api"
|
|
"api/models/products"
|
|
"context"
|
|
|
|
"github.com/gofiber/fiber/v2"
|
|
"github.com/jackc/pgx/v5"
|
|
)
|
|
|
|
type ProductsService interface {
|
|
CreateProduct(userId string, data *productdto.ProductDto) (*api.Response, int, error)
|
|
UpdateProduct(userId string, data *productdto.ProductDto) (*api.Response, int, error)
|
|
VerifyCode(data *productdto.ValidateCodeDto) (*api.Response, int, error)
|
|
GetProducts() (*api.Response, int, error)
|
|
DeleteProduct(data *productdto.DeleteProductDto) (*api.Response, int, error)
|
|
}
|
|
|
|
type productsService struct {
|
|
productsRepository *products.Queries
|
|
ctx context.Context
|
|
}
|
|
|
|
func newService() ProductsService {
|
|
return &productsService{
|
|
productsRepository: products.New(postgres.Pool),
|
|
ctx: context.Background(),
|
|
}
|
|
}
|
|
|
|
func (p *productsService) CreateProduct(userId string, data *productdto.ProductDto) (*api.Response, int, error) {
|
|
|
|
estoqueDisponivel := data.EstoqueTotal - data.EstoqueCorte
|
|
|
|
newProduct, err := p.productsRepository.CreateProduct(p.ctx, userId, products.CreateProductParams{
|
|
Nome: data.Nome,
|
|
Codigo: data.Codigo,
|
|
EstoqueTotal: data.EstoqueTotal,
|
|
EstoqueCorte: data.EstoqueCorte,
|
|
EstoqueDisponivel: estoqueDisponivel,
|
|
PrecoDe: data.PrecoDe,
|
|
PrecoPor: data.PrecoPor,
|
|
})
|
|
if err != nil {
|
|
logger.Production.Info(err.Error())
|
|
return &api.Response{Error: true, ErrorMessage: err.Error(), Payload: "error insert product"}, fiber.StatusInternalServerError, err
|
|
}
|
|
|
|
return &api.Response{Error: false, Payload: newProduct}, fiber.StatusOK, nil
|
|
}
|
|
|
|
func (p *productsService) VerifyCode(data *productdto.ValidateCodeDto) (*api.Response, int, error) {
|
|
|
|
_, err := p.productsRepository.GetProduct(p.ctx, data.Codigo)
|
|
if err != nil {
|
|
if err == pgx.ErrNoRows {
|
|
return &api.Response{Error: false, Payload: false}, fiber.StatusOK, nil
|
|
}
|
|
logger.Production.Info(err.Error())
|
|
return &api.Response{Error: true, ErrorMessage: err.Error(), Payload: "error verify code product"}, fiber.StatusInternalServerError, err
|
|
}
|
|
|
|
return &api.Response{Error: false, Payload: true}, fiber.StatusOK, nil
|
|
}
|
|
|
|
func (p *productsService) UpdateProduct(userId string, data *productdto.ProductDto) (*api.Response, int, error) {
|
|
|
|
estoqueDisponivel := data.EstoqueTotal - data.EstoqueCorte
|
|
|
|
err := p.productsRepository.UpdateProduct(p.ctx, userId, products.UpdateProductParams{
|
|
Nome: data.Nome,
|
|
Codigo: data.Codigo,
|
|
EstoqueTotal: data.EstoqueTotal,
|
|
EstoqueCorte: data.EstoqueCorte,
|
|
EstoqueDisponivel: estoqueDisponivel,
|
|
PrecoDe: data.PrecoDe,
|
|
PrecoPor: data.PrecoPor,
|
|
})
|
|
if err != nil {
|
|
logger.Production.Info(err.Error())
|
|
return &api.Response{Error: true, ErrorMessage: err.Error(), Payload: "error update product"}, fiber.StatusInternalServerError, err
|
|
}
|
|
|
|
return &api.Response{Error: false, Payload: nil}, fiber.StatusOK, nil
|
|
}
|
|
|
|
func (p *productsService) GetProducts() (*api.Response, int, error) {
|
|
|
|
products, err := p.productsRepository.ListProducts(p.ctx)
|
|
if err != nil {
|
|
logger.Production.Info(err.Error())
|
|
return &api.Response{Error: true, ErrorMessage: err.Error(), Payload: "error get products"}, fiber.StatusInternalServerError, err
|
|
}
|
|
|
|
return &api.Response{Error: false, Payload: products}, fiber.StatusOK, nil
|
|
}
|
|
|
|
func (p *productsService) DeleteProduct(data *productdto.DeleteProductDto) (*api.Response, int, error) {
|
|
|
|
err := p.productsRepository.DeleteProduct(p.ctx, data.Codigo)
|
|
if err != nil {
|
|
logger.Production.Info(err.Error())
|
|
return &api.Response{Error: true, ErrorMessage: err.Error(), Payload: "error delete product"}, fiber.StatusInternalServerError, err
|
|
}
|
|
|
|
return &api.Response{Error: false, Payload: nil}, fiber.StatusOK, nil
|
|
}
|