package status import ( "context" "go.uber.org/zap" "penahub.gitlab.yandexcloud.net/external/treasurer/internal/errors" "penahub.gitlab.yandexcloud.net/external/treasurer/internal/models" ) type PaymentRepository interface { SetPaymentStatus(ctx context.Context, paymentID string, status models.PaymentStatus) (*models.Payment, errors.Error) } type Deps struct { Logger *zap.Logger PaymentRepository PaymentRepository } type Service struct { logger *zap.Logger paymentRepository PaymentRepository } func New(deps Deps) (*Service, errors.Error) { if deps.Logger == nil { return nil, errors.NewWithMessage("logger is nil on ", errors.ErrInvalidArgs) } if deps.PaymentRepository == nil { return nil, errors.NewWithMessage("PaymentRepository is nil on ", errors.ErrInvalidArgs) } return &Service{ logger: deps.Logger, paymentRepository: deps.PaymentRepository, }, nil } func (receiver *Service) SetStatusCanceled(ctx context.Context, paymentID string) (*models.Payment, errors.Error) { payment, err := receiver.paymentRepository.SetPaymentStatus(ctx, paymentID, models.PaymentStatusCanceled) if err != nil { receiver.logger.Error("failed to set payment status on of ", zap.Error(err)) return nil, err } return payment, nil } func (receiver *Service) SetStatusSuccess(ctx context.Context, paymentID string) (*models.Payment, errors.Error) { payment, err := receiver.paymentRepository.SetPaymentStatus(ctx, paymentID, models.PaymentStatusSuccessfully) if err != nil { receiver.logger.Error("failed to set payment status on of ", zap.Error(err)) return nil, err } return payment, nil } func (receiver *Service) SetStatusWaiting(ctx context.Context, paymentID string) (*models.Payment, errors.Error) { payment, err := receiver.paymentRepository.SetPaymentStatus(ctx, paymentID, models.PaymentStatusWaiting) if err != nil { receiver.logger.Error("failed to set payment status on of ", zap.Error(err)) return nil, err } return payment, nil } func (receiver *Service) SetStatusRefund(ctx context.Context, paymentID string) (*models.Payment, errors.Error) { payment, err := receiver.paymentRepository.SetPaymentStatus(ctx, paymentID, models.PaymentStatusRefund) if err != nil { receiver.logger.Error("failed to set payment status on of ", zap.Error(err)) return nil, err } return payment, nil }