jaecoo-be/app/module/banners/service/banners.service.go

108 lines
2.5 KiB
Go

package service
import (
"errors"
"jaecoo-be/app/module/banners/mapper"
"jaecoo-be/app/module/banners/repository"
"jaecoo-be/app/module/banners/request"
"jaecoo-be/app/module/banners/response"
"jaecoo-be/config/config"
"jaecoo-be/utils/paginator"
"github.com/rs/zerolog"
)
type bannersService struct {
Repo repository.BannersRepository
Log zerolog.Logger
Cfg *config.Config
}
type BannersService interface {
GetAll(req request.BannersQueryRequest) (banners []*response.BannersResponse, paging paginator.Pagination, err error)
GetOne(id uint) (banner *response.BannersResponse, err error)
Create(req request.BannersCreateRequest) (banner *response.BannersResponse, err error)
Update(id uint, req request.BannersUpdateRequest) (banner *response.BannersResponse, err error)
Delete(id uint) (err error)
}
func NewBannersService(repo repository.BannersRepository, log zerolog.Logger, cfg *config.Config) BannersService {
return &bannersService{
Repo: repo,
Log: log,
Cfg: cfg,
}
}
func (_i *bannersService) GetAll(req request.BannersQueryRequest) (banners []*response.BannersResponse, paging paginator.Pagination, err error) {
bannersEntity, paging, err := _i.Repo.GetAll(req)
if err != nil {
return
}
host := _i.Cfg.App.Domain
for _, banner := range bannersEntity {
banners = append(banners, mapper.BannersResponseMapper(banner, host))
}
return
}
func (_i *bannersService) GetOne(id uint) (banner *response.BannersResponse, err error) {
bannerEntity, err := _i.Repo.FindOne(id)
if err != nil {
return
}
if bannerEntity == nil {
err = errors.New("banner not found")
return
}
host := _i.Cfg.App.Domain
banner = mapper.BannersResponseMapper(bannerEntity, host)
return
}
func (_i *bannersService) Create(req request.BannersCreateRequest) (banner *response.BannersResponse, err error) {
bannerEntity := req.ToEntity()
isActive := true
bannerEntity.IsActive = &isActive
bannerEntity, err = _i.Repo.Create(bannerEntity)
if err != nil {
return
}
host := _i.Cfg.App.Domain
banner = mapper.BannersResponseMapper(bannerEntity, host)
return
}
func (_i *bannersService) Update(id uint, req request.BannersUpdateRequest) (banner *response.BannersResponse, err error) {
bannerEntity := req.ToEntity()
err = _i.Repo.Update(id, bannerEntity)
if err != nil {
return
}
bannerEntity, err = _i.Repo.FindOne(id)
if err != nil {
return
}
host := _i.Cfg.App.Domain
banner = mapper.BannersResponseMapper(bannerEntity, host)
return
}
func (_i *bannersService) Delete(id uint) (err error) {
err = _i.Repo.Delete(id)
return
}