generated from PenaSide/GolangTemplate
75 lines
2.3 KiB
Go
75 lines
2.3 KiB
Go
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 <NewPaymentController>")
|
|
}
|
|
|
|
if deps.PaymentCallbackService == nil {
|
|
log.Panicln("PaymentCallbackService is nil on <NewPaymentController>")
|
|
}
|
|
|
|
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 <OnSuccess> of <PaymentController>", 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 <OnFailure> of <PaymentController>", zap.Error(err))
|
|
return nil, errors.GRPC("failed to send failure event", err)
|
|
}
|
|
|
|
return &emptypb.Empty{}, nil
|
|
}
|