Files
payments/internal/api/services/payment_initiations_create.go
Paul NicolasandGitHub 2fd811b43a feat(*): add events for payment initiations (#390)
* feat(*): add events for payment initiations

* more e2e tests

* address nitpicking comments from coderabbit
2025-03-31 14:59:19 +02:00

47 lines
1.6 KiB
Go

package services
import (
"context"
"github.com/formancehq/payments/internal/models"
)
func (s *Service) PaymentInitiationsCreate(ctx context.Context, paymentInitiation models.PaymentInitiation, sendToPSP bool, waitResult bool) (models.Task, error) {
waitingForValidationAdjustment := models.PaymentInitiationAdjustment{
ID: models.PaymentInitiationAdjustmentID{
PaymentInitiationID: paymentInitiation.ID,
CreatedAt: paymentInitiation.CreatedAt,
Status: models.PAYMENT_INITIATION_ADJUSTMENT_STATUS_WAITING_FOR_VALIDATION,
},
CreatedAt: paymentInitiation.CreatedAt,
Amount: paymentInitiation.Amount,
Asset: &paymentInitiation.Asset,
Status: models.PAYMENT_INITIATION_ADJUSTMENT_STATUS_WAITING_FOR_VALIDATION,
}
if !sendToPSP {
return models.Task{}, handleEngineErrors(s.engine.CreateFormancePaymentInitiation(ctx, paymentInitiation, waitingForValidationAdjustment))
}
if err := s.engine.CreateFormancePaymentInitiation(ctx, paymentInitiation, waitingForValidationAdjustment); err != nil {
return models.Task{}, handleEngineErrors(err)
}
switch paymentInitiation.Type {
case models.PAYMENT_INITIATION_TYPE_TRANSFER:
task, err := s.engine.CreateTransfer(ctx, paymentInitiation.ID, 1, waitResult)
if err != nil {
return models.Task{}, handleEngineErrors(err)
}
return task, nil
case models.PAYMENT_INITIATION_TYPE_PAYOUT:
task, err := s.engine.CreatePayout(ctx, paymentInitiation.ID, 1, waitResult)
if err != nil {
return models.Task{}, handleEngineErrors(err)
}
return task, nil
}
return models.Task{}, nil
}