package partner 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 PartnerService struct { repo repository.PartnerRepository } func NewPartnerService(repo repository.PartnerRepository) *PartnerService { return &PartnerService{ repo: repo, } } func (s *PartnerService) Create(ctx mycontext.Context, PartnerReq *entity.Partner) (*entity.Partner, error) { PartnerDB := PartnerReq.ToPartnerDB() PartnerDB.CreatedBy = ctx.RequestedBy() PartnerDB, err := s.repo.Create(ctx, PartnerDB) if err != nil { logger.ContextLogger(ctx).Error("error when create Partner", zap.Error(err)) return nil, err } return PartnerDB.ToPartner(), nil } func (s *PartnerService) Update(ctx mycontext.Context, id int64, PartnerReq *entity.Partner) (*entity.Partner, error) { existingPartner, err := s.repo.GetByID(ctx, id) if err != nil { return nil, err } existingPartner.ToUpdatedPartner(ctx.RequestedBy(), *PartnerReq) updatedPartnerDB, err := s.repo.Update(ctx, existingPartner.ToPartnerDB()) if err != nil { logger.ContextLogger(ctx).Error("error when update Partner", zap.Error(err)) return nil, err } return updatedPartnerDB.ToPartner(), nil } func (s *PartnerService) GetByID(ctx context.Context, id int64) (*entity.Partner, error) { PartnerDB, err := s.repo.GetByID(ctx, id) if err != nil { logger.ContextLogger(ctx).Error("error when get Partner by id", zap.Error(err)) return nil, err } return PartnerDB.ToPartner(), nil } func (s *PartnerService) GetAll(ctx context.Context, search entity.PartnerSearch) ([]*entity.Partner, int, error) { Partneres, total, err := s.repo.GetAll(ctx, search) if err != nil { logger.ContextLogger(ctx).Error("error when get all Partneres", zap.Error(err)) return nil, 0, err } return Partneres.ToPartnerList(), total, nil } func (s *PartnerService) Delete(ctx mycontext.Context, id int64) error { PartnerDB, err := s.repo.GetByID(ctx, id) if err != nil { logger.ContextLogger(ctx).Error("error when get Partner by id", zap.Error(err)) return err } PartnerDB.SetDeleted(ctx.RequestedBy()) _, err = s.repo.Update(ctx, PartnerDB) if err != nil { logger.ContextLogger(ctx).Error("error when update Partner", zap.Error(err)) return err } return nil }