108 lines
2.6 KiB
Go
108 lines
2.6 KiB
Go
|
|
package service
|
||
|
|
|
||
|
|
import (
|
||
|
|
"errors"
|
||
|
|
"jaecoo-be/app/module/products/mapper"
|
||
|
|
"jaecoo-be/app/module/products/repository"
|
||
|
|
"jaecoo-be/app/module/products/request"
|
||
|
|
"jaecoo-be/app/module/products/response"
|
||
|
|
"jaecoo-be/config/config"
|
||
|
|
"jaecoo-be/utils/paginator"
|
||
|
|
|
||
|
|
"github.com/rs/zerolog"
|
||
|
|
)
|
||
|
|
|
||
|
|
type productsService struct {
|
||
|
|
Repo repository.ProductsRepository
|
||
|
|
Log zerolog.Logger
|
||
|
|
Cfg *config.Config
|
||
|
|
}
|
||
|
|
|
||
|
|
type ProductsService interface {
|
||
|
|
GetAll(req request.ProductsQueryRequest) (products []*response.ProductsResponse, paging paginator.Pagination, err error)
|
||
|
|
GetOne(id uint) (product *response.ProductsResponse, err error)
|
||
|
|
Create(req request.ProductsCreateRequest) (product *response.ProductsResponse, err error)
|
||
|
|
Update(id uint, req request.ProductsUpdateRequest) (product *response.ProductsResponse, err error)
|
||
|
|
Delete(id uint) (err error)
|
||
|
|
}
|
||
|
|
|
||
|
|
func NewProductsService(repo repository.ProductsRepository, log zerolog.Logger, cfg *config.Config) ProductsService {
|
||
|
|
return &productsService{
|
||
|
|
Repo: repo,
|
||
|
|
Log: log,
|
||
|
|
Cfg: cfg,
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
func (_i *productsService) GetAll(req request.ProductsQueryRequest) (products []*response.ProductsResponse, paging paginator.Pagination, err error) {
|
||
|
|
productsEntity, paging, err := _i.Repo.GetAll(req)
|
||
|
|
if err != nil {
|
||
|
|
return
|
||
|
|
}
|
||
|
|
|
||
|
|
host := _i.Cfg.App.Domain
|
||
|
|
|
||
|
|
for _, product := range productsEntity {
|
||
|
|
products = append(products, mapper.ProductsResponseMapper(product, host))
|
||
|
|
}
|
||
|
|
|
||
|
|
return
|
||
|
|
}
|
||
|
|
|
||
|
|
func (_i *productsService) GetOne(id uint) (product *response.ProductsResponse, err error) {
|
||
|
|
productEntity, err := _i.Repo.FindOne(id)
|
||
|
|
if err != nil {
|
||
|
|
return
|
||
|
|
}
|
||
|
|
|
||
|
|
if productEntity == nil {
|
||
|
|
err = errors.New("product not found")
|
||
|
|
return
|
||
|
|
}
|
||
|
|
|
||
|
|
host := _i.Cfg.App.Domain
|
||
|
|
|
||
|
|
product = mapper.ProductsResponseMapper(productEntity, host)
|
||
|
|
return
|
||
|
|
}
|
||
|
|
|
||
|
|
func (_i *productsService) Create(req request.ProductsCreateRequest) (product *response.ProductsResponse, err error) {
|
||
|
|
productEntity := req.ToEntity()
|
||
|
|
isActive := true
|
||
|
|
productEntity.IsActive = &isActive
|
||
|
|
|
||
|
|
productEntity, err = _i.Repo.Create(productEntity)
|
||
|
|
if err != nil {
|
||
|
|
return
|
||
|
|
}
|
||
|
|
|
||
|
|
host := _i.Cfg.App.Domain
|
||
|
|
|
||
|
|
product = mapper.ProductsResponseMapper(productEntity, host)
|
||
|
|
return
|
||
|
|
}
|
||
|
|
|
||
|
|
func (_i *productsService) Update(id uint, req request.ProductsUpdateRequest) (product *response.ProductsResponse, err error) {
|
||
|
|
productEntity := req.ToEntity()
|
||
|
|
|
||
|
|
err = _i.Repo.Update(id, productEntity)
|
||
|
|
if err != nil {
|
||
|
|
return
|
||
|
|
}
|
||
|
|
|
||
|
|
productEntity, err = _i.Repo.FindOne(id)
|
||
|
|
if err != nil {
|
||
|
|
return
|
||
|
|
}
|
||
|
|
|
||
|
|
host := _i.Cfg.App.Domain
|
||
|
|
|
||
|
|
product = mapper.ProductsResponseMapper(productEntity, host)
|
||
|
|
return
|
||
|
|
}
|
||
|
|
|
||
|
|
func (_i *productsService) Delete(id uint) (err error) {
|
||
|
|
err = _i.Repo.Delete(id)
|
||
|
|
return
|
||
|
|
}
|