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 }