79 lines
2.5 KiB
Go
79 lines
2.5 KiB
Go
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 <NewStatusService>", errors.ErrInvalidArgs)
|
|
}
|
|
|
|
if deps.PaymentRepository == nil {
|
|
return nil, errors.NewWithMessage("PaymentRepository is nil on <NewStatusService>", 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 <SetStatusCanceled> of <StatusService>", 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 <SetStatusSuccess> of <StatusService>", 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 <SetStatusWaiting> of <StatusService>", 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 <SetStatusRefund> of <StatusService>", zap.Error(err))
|
|
return nil, err
|
|
}
|
|
|
|
return payment, nil
|
|
}
|