2024-06-03 14:40:50 +07:00
|
|
|
package site
|
|
|
|
|
|
|
|
|
|
import (
|
|
|
|
|
"context"
|
|
|
|
|
"furtuna-be/internal/common/logger"
|
|
|
|
|
"furtuna-be/internal/common/mycontext"
|
2024-08-02 18:35:42 +07:00
|
|
|
"furtuna-be/internal/constants/role"
|
2024-06-03 14:40:50 +07:00
|
|
|
"furtuna-be/internal/entity"
|
|
|
|
|
"furtuna-be/internal/repository"
|
|
|
|
|
"go.uber.org/zap"
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
type SiteService struct {
|
|
|
|
|
repo repository.SiteRepository
|
2024-08-22 23:34:35 +07:00
|
|
|
user repository.User
|
2024-06-03 14:40:50 +07:00
|
|
|
}
|
|
|
|
|
|
2024-08-22 23:34:35 +07:00
|
|
|
func NewSiteService(repo repository.SiteRepository, user repository.User) *SiteService {
|
2024-06-03 14:40:50 +07:00
|
|
|
return &SiteService{
|
|
|
|
|
repo: repo,
|
2024-08-22 23:34:35 +07:00
|
|
|
user: user,
|
2024-06-03 14:40:50 +07:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
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
|
|
|
|
|
}
|
2024-07-27 15:26:00 +07:00
|
|
|
|
|
|
|
|
func (s *SiteService) Count(ctx mycontext.Context, req entity.SiteSearch) (*entity.SiteCount, error) {
|
2024-08-02 18:35:42 +07:00
|
|
|
if req.SiteID != nil {
|
|
|
|
|
total, err := s.user.CountUsersByRoleAndSiteOrPartner(ctx, int(role.Casheer), req.SiteID)
|
|
|
|
|
if err != nil {
|
|
|
|
|
logger.ContextLogger(ctx).Error("error when getting count user", zap.Error(err))
|
|
|
|
|
return nil, err
|
|
|
|
|
}
|
|
|
|
|
return &entity.SiteCount{
|
|
|
|
|
Count: total,
|
|
|
|
|
}, nil
|
|
|
|
|
}
|
|
|
|
|
|
2024-07-27 15:26:00 +07:00
|
|
|
count, err := s.repo.Count(ctx, req)
|
|
|
|
|
if err != nil {
|
|
|
|
|
logger.ContextLogger(ctx).Error("error when getting all sites", zap.Error(err))
|
|
|
|
|
return nil, err
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return count.ToSiteCount(), nil
|
2024-08-02 18:35:42 +07:00
|
|
|
}
|