package usecase import ( "context" "github.com/gofrs/uuid/v5" "github.com/saveinmed/backend-go/internal/domain" ) // GetPaymentGatewayConfig returns the configuration for a specific provider func (s *Service) GetPaymentGatewayConfig(ctx context.Context, provider string) (*domain.PaymentGatewayConfig, error) { return s.repo.GetPaymentGatewayConfig(ctx, provider) } // UpsertPaymentGatewayConfig updates global gateway configuration func (s *Service) UpsertPaymentGatewayConfig(ctx context.Context, config *domain.PaymentGatewayConfig) error { // Logic to encrypt credentials could go here return s.repo.UpsertPaymentGatewayConfig(ctx, config) } // GetSellerPaymentAccount returns a seller's connected account details func (s *Service) GetSellerPaymentAccount(ctx context.Context, sellerID uuid.UUID) (*domain.SellerPaymentAccount, error) { return s.repo.GetSellerPaymentAccount(ctx, sellerID) } // OnboardSeller initiates the onboarding process for a seller (e.g. Stripe Connect) func (s *Service) OnboardSeller(ctx context.Context, sellerID uuid.UUID, gateway string) (string, error) { // 1. Generate Connect Link (Mock for now or call gateway) // For MVP, just return a dummy link and create pending record // Real implementation would use s.pay.CreateConnectLink(...) // Ensure record exists account := &domain.SellerPaymentAccount{ SellerID: sellerID, Gateway: gateway, Status: "pending", AccountType: "standard", // default } if err := s.repo.UpsertSellerPaymentAccount(ctx, account); err != nil { return "", err } return "https://connect.stripe.com/oauth/authorize?response_type=code&client_id=ca_123&scope=read_write", nil }