package payment import ( "context" "log" "go.uber.org/zap" "google.golang.org/protobuf/types/known/emptypb" "penahub.gitlab.yandexcloud.net/pena-services/customer/internal/errors" "penahub.gitlab.yandexcloud.net/pena-services/customer/internal/models" "penahub.gitlab.yandexcloud.net/pena-services/customer/internal/proto/payment_callback" ) type paymentCallbackService interface { SuccessEvent(context.Context, *models.PaymentEvent) errors.Error FailureEvent(context.Context, *models.PaymentEvent) errors.Error } type Deps struct { Logger *zap.Logger PaymentCallbackService paymentCallbackService } type Controller struct { logger *zap.Logger paymentCallbackService paymentCallbackService } func New(deps Deps) *Controller { if deps.Logger == nil { log.Panicln("logger is nil on ") } if deps.PaymentCallbackService == nil { log.Panicln("PaymentCallbackService is nil on ") } return &Controller{ logger: deps.Logger, paymentCallbackService: deps.PaymentCallbackService, } } func (receiver *Controller) OnSuccess(ctx context.Context, in *payment_callback.Event) (*emptypb.Empty, error) { if err := receiver.paymentCallbackService.SuccessEvent(ctx, &models.PaymentEvent{ Key: in.Key, Message: in.Message, PaymentID: in.Payment.PaymentID, Currency: in.Payment.Currency, Amount: in.Payment.Amount, UserID: in.Payment.UserID, }); err != nil { receiver.logger.Error("failed to send success event on of ", zap.Error(err)) return nil, errors.GRPC("failed to send success event", err) } return &emptypb.Empty{}, nil } func (receiver *Controller) OnFailure(ctx context.Context, in *payment_callback.Event) (*emptypb.Empty, error) { if err := receiver.paymentCallbackService.FailureEvent(ctx, &models.PaymentEvent{ Key: in.Key, Message: in.Message, PaymentID: in.Payment.PaymentID, Currency: in.Payment.Currency, Amount: in.Payment.Amount, UserID: in.Payment.UserID, }); err != nil { receiver.logger.Error("failed to send failure event on of ", zap.Error(err)) return nil, errors.GRPC("failed to send failure event", err) } return &emptypb.Empty{}, nil }