2024-06-03 14:40:50 +07:00

90 lines
2.2 KiB
Go

package site
import (
"context"
"furtuna-be/internal/common/logger"
"furtuna-be/internal/common/mycontext"
"furtuna-be/internal/entity"
"furtuna-be/internal/repository"
"go.uber.org/zap"
)
type SiteService struct {
repo repository.SiteRepository
}
func NewSiteService(repo repository.SiteRepository) *SiteService {
return &SiteService{
repo: repo,
}
}
func (s *SiteService) Create(ctx mycontext.Context, siteReq *entity.Site) (*entity.Site, error) {
siteDB := siteReq
siteDB.CreatedBy = ctx.RequestedBy()
siteDB, err := s.repo.Upsert(ctx, siteDB)
if err != nil {
logger.ContextLogger(ctx).Error("error when creating site", zap.Error(err))
return nil, err
}
return siteDB, nil
}
func (s *SiteService) Update(ctx mycontext.Context, id int64, siteReq *entity.Site) (*entity.Site, error) {
existingSite, err := s.repo.GetByID(ctx, id)
if err != nil {
return nil, err
}
existingSite.ToUpdatedSite(ctx.RequestedBy(), *siteReq)
updatedSiteDB, err := s.repo.Update(ctx, existingSite.ToSiteDB())
if err != nil {
logger.ContextLogger(ctx).Error("error when updating site", zap.Error(err))
return nil, err
}
return updatedSiteDB.ToSite(), nil
}
func (s *SiteService) GetByID(ctx context.Context, id int64) (*entity.Site, error) {
siteDB, err := s.repo.GetByID(ctx, id)
if err != nil {
logger.ContextLogger(ctx).Error("error when getting site by ID", zap.Error(err))
return nil, err
}
return siteDB.ToSite(), nil
}
func (s *SiteService) GetAll(ctx context.Context, search entity.SiteSearch) ([]*entity.Site, int, error) {
sites, total, err := s.repo.GetAll(ctx, search)
if err != nil {
logger.ContextLogger(ctx).Error("error when getting all sites", zap.Error(err))
return nil, 0, err
}
return sites.ToSiteList(), total, nil
}
func (s *SiteService) Delete(ctx mycontext.Context, id int64) error {
siteDB, err := s.repo.GetByID(ctx, id)
if err != nil {
logger.ContextLogger(ctx).Error("error when getting site by ID", zap.Error(err))
return err
}
siteDB.SetDeleted(ctx.RequestedBy())
_, err = s.repo.Update(ctx, siteDB)
if err != nil {
logger.ContextLogger(ctx).Error("error when updating site", zap.Error(err))
return err
}
return nil
}