package service import ( "github.com/rs/zerolog" "go-humas-be/app/database/entity" "go-humas-be/app/module/advertisement/mapper" "go-humas-be/app/module/advertisement/repository" "go-humas-be/app/module/advertisement/request" "go-humas-be/app/module/advertisement/response" usersRepository "go-humas-be/app/module/users/repository" "go-humas-be/utils/paginator" ) // AdvertisementService type advertisementService struct { Repo repository.AdvertisementRepository UsersRepo usersRepository.UsersRepository Log zerolog.Logger } // AdvertisementService define interface of IAdvertisementService type AdvertisementService interface { All(req request.AdvertisementQueryRequest) (advertisement []*response.AdvertisementResponse, paging paginator.Pagination, err error) Show(id uint) (advertisement *response.AdvertisementResponse, err error) Save(req request.AdvertisementCreateRequest) (advertisement *entity.Advertisement, err error) Update(id uint, req request.AdvertisementUpdateRequest) (err error) Delete(id uint) error } // NewAdvertisementService init AdvertisementService func NewAdvertisementService(repo repository.AdvertisementRepository, log zerolog.Logger, usersRepo usersRepository.UsersRepository) AdvertisementService { return &advertisementService{ Repo: repo, Log: log, UsersRepo: usersRepo, } } // All implement interface of AdvertisementService func (_i *advertisementService) All(req request.AdvertisementQueryRequest) (advertisements []*response.AdvertisementResponse, paging paginator.Pagination, err error) { results, paging, err := _i.Repo.GetAll(req) if err != nil { return } for _, result := range results { advertisements = append(advertisements, mapper.AdvertisementResponseMapper(result)) } return } func (_i *advertisementService) Show(id uint) (advertisement *response.AdvertisementResponse, err error) { result, err := _i.Repo.FindOne(id) if err != nil { return nil, err } return mapper.AdvertisementResponseMapper(result), nil } func (_i *advertisementService) Save(req request.AdvertisementCreateRequest) (advertisement *entity.Advertisement, err error) { _i.Log.Info().Interface("data", req).Msg("") newReq := req.ToEntity() return _i.Repo.Create(newReq) } func (_i *advertisementService) Update(id uint, req request.AdvertisementUpdateRequest) (err error) { _i.Log.Info().Interface("data", req).Msg("") return _i.Repo.Update(id, req.ToEntity()) } func (_i *advertisementService) Delete(id uint) error { result, err := _i.Repo.FindOne(id) if err != nil { return err } result.IsActive = false return _i.Repo.Update(id, result) }