package service import ( "amocrm/internal/models" "amocrm/pkg/amoClient" pena_social_auth "amocrm/pkg/pena-social-auth" "context" "encoding/json" "github.com/twmb/franz-go/pkg/kgo" "go.uber.org/zap" "penahub.gitlab.yandexcloud.net/backend/quiz/common.git/dal" ) type Deps struct { Repository *dal.AmoDal Logger *zap.Logger SocialAuthClient *pena_social_auth.Client AmoClient *amoClient.Amo KafkaClient *kgo.Client } type Service struct { repository *dal.AmoDal logger *zap.Logger socialAuthClient *pena_social_auth.Client amoClient *amoClient.Amo kafkaClient *kgo.Client } func NewService(deps Deps) *Service { return &Service{ repository: deps.Repository, logger: deps.Logger, socialAuthClient: deps.SocialAuthClient, amoClient: deps.AmoClient, kafkaClient: deps.KafkaClient, } } func (s *Service) ToKafkaUpdate(ctx context.Context, message models.KafkaMessage) error { bytes, err := json.Marshal(message) if err != nil { s.logger.Error("error marshal message to kafka", zap.Error(err)) return err } responses := s.kafkaClient.ProduceSync(ctx, &kgo.Record{Value: bytes}) for _, response := range responses { if response.Err != nil { s.logger.Error("failed to send message on update kafka", zap.Error(response.Err)) return response.Err } } return nil }