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 }