2023-06-13 13:22:51 +00:00
package payment
import (
"context"
"fmt"
2025-06-12 08:59:43 +00:00
"gitea.pena/PenaSide/treasurer/internal/repository"
2023-06-13 13:22:51 +00:00
2024-12-16 13:47:40 +00:00
"gitea.pena/PenaSide/treasurer/internal/errors"
"gitea.pena/PenaSide/treasurer/internal/models"
"gitea.pena/PenaSide/treasurer/internal/models/yandex"
"gitea.pena/PenaSide/treasurer/internal/utils"
2025-06-11 15:39:39 +00:00
"go.uber.org/zap"
2023-06-13 13:22:51 +00:00
)
type Deps struct {
Logger * zap . Logger
2025-06-12 08:59:43 +00:00
PaymentStrategyService * Yandex
PaymentRepository * repository . PaymentRepository
2023-06-13 13:22:51 +00:00
}
type Service struct {
logger * zap . Logger
2025-06-12 08:59:43 +00:00
paymentStrategyService * Yandex
paymentRepository * repository . PaymentRepository
2023-06-13 13:22:51 +00:00
}
func New ( deps Deps ) ( * Service , errors . Error ) {
if deps . Logger == nil {
return nil , errors . NewWithMessage ( "logger is nil on <NewCallbackClient>" , errors . ErrInvalidArgs )
}
if deps . PaymentStrategyService == nil {
return nil , errors . NewWithMessage ( "PaymentStrategyService is nil on <NewCallbackClient>" , errors . ErrInvalidArgs )
}
if deps . PaymentRepository == nil {
return nil , errors . NewWithMessage ( "PaymentRepository is nil on <NewCallbackClient>" , errors . ErrInvalidArgs )
}
return & Service {
logger : deps . Logger ,
paymentStrategyService : deps . PaymentStrategyService ,
paymentRepository : deps . PaymentRepository ,
} , nil
}
2025-06-11 15:39:39 +00:00
func ( s * Service ) CreatePaymentBankCard ( ctx context . Context , request * models . CreatePayment [ yandex . Receipt ] ) ( string , errors . Error ) {
s . logger . Info ( "f<CreatePaymentBankCard> of <YandexPaymentService>" , zap . Any ( "Customer" , request . Requisites . Customer ) , zap . Any ( "Items" , request . Requisites . Items ) )
2023-06-13 13:22:51 +00:00
paymentUUID , generateErr := utils . GenerateUUID ( )
if generateErr != nil {
2025-06-11 15:39:39 +00:00
s . logger . Error ( "failed to generate uuid on <CreatePaymentBankCard> of <PaymentService>" , zap . Error ( generateErr ) )
2023-06-13 13:22:51 +00:00
return "" , errors . NewWithError ( fmt . Errorf ( "failed to generate uuid: %w" , generateErr ) , errors . ErrInternalError )
}
2025-06-11 15:39:39 +00:00
response , err := s . paymentStrategyService . CreatePaymentBankCard ( ctx , paymentUUID , request )
2023-06-13 13:22:51 +00:00
if err != nil {
2025-06-11 15:39:39 +00:00
s . logger . Error ( "failed to create payment on <CreatePaymentBankCard> of <PaymentService>" , zap . Error ( err ) )
2023-06-13 13:22:51 +00:00
return "" , err
}
2025-06-11 15:39:39 +00:00
if _ , err := s . paymentRepository . Insert ( ctx , response . Payment ) ; err != nil {
s . logger . Error ( "failed to insert payment on <CreatePaymentBankCard> of <PaymentService>" , zap . Error ( err ) )
2023-06-13 13:22:51 +00:00
return "" , err
}
return response . RedirectURL , nil
}
2025-06-11 15:39:39 +00:00
func ( s * Service ) CreatePayment ( ctx context . Context , request * models . CreatePayment [ yandex . Receipt ] ) ( string , errors . Error ) {
2023-06-13 13:22:51 +00:00
paymentUUID , generateErr := utils . GenerateUUID ( )
if generateErr != nil {
2025-06-11 15:39:39 +00:00
s . logger . Error ( "failed to generate uuid on <CreatePayment> of <PaymentService>" , zap . Error ( generateErr ) )
2023-06-13 13:22:51 +00:00
return "" , errors . NewWithError ( fmt . Errorf ( "failed to generate uuid: %w" , generateErr ) , errors . ErrInternalError )
}
2025-06-11 15:39:39 +00:00
response , err := s . paymentStrategyService . CreatePayment ( ctx , paymentUUID , request )
2023-06-13 13:22:51 +00:00
if err != nil {
2025-06-11 15:39:39 +00:00
s . logger . Error ( "failed to create payment on <CreatePayment> of <PaymentService>" , zap . Error ( err ) )
2023-06-13 13:22:51 +00:00
return "" , err
}
2025-06-11 15:39:39 +00:00
if _ , err := s . paymentRepository . Insert ( ctx , response . Payment ) ; err != nil {
s . logger . Error ( "failed to insert payment on <CreatePayment> of <PaymentService>" , zap . Error ( err ) )
2023-06-13 13:22:51 +00:00
return "" , err
}
return response . RedirectURL , nil
}