Files
go-cart-actor/pkg/order/passthrough.go
T
mats 716a66562e
Build and Publish / BuildAndDeployArm64 (push) Failing after 6s
Build and Publish / BuildAndDeployAmd64 (push) Has been cancelled
update orderflow
2026-06-21 23:26:37 +02:00

61 lines
2.0 KiB
Go

package order
import (
"context"
"fmt"
)
// PassthroughProvider records an already-settled authorization and capture without
// calling an external provider. It is the bridge between the checkout grain's
// externally-processed payments (Klarna, Adyen) and the order grain's event log:
// the payment was already settled by the provider, so the order grain just needs
// to record the facts.
//
// Create one per order with the exact provider name, reference and amount the
// external processor returned. Refund returns an error — use the external
// processor's own refund API for that. Void is a no-op.
type PassthroughProvider struct {
name string
reference string
amount int64
}
// NewPassthroughProvider returns a provider that records provider/ref/amount
// for both authorize and capture. amount is in minor currency units (öre).
func NewPassthroughProvider(providerName, reference string, amount int64) *PassthroughProvider {
return &PassthroughProvider{
name: providerName,
reference: reference,
amount: amount,
}
}
var _ PaymentProvider = (*PassthroughProvider)(nil)
func (p *PassthroughProvider) Name() string { return p.name }
func (p *PassthroughProvider) Authorize(_ context.Context, _ string, _ int64, _ string) (Authorization, error) {
return Authorization{
Provider: p.name,
Reference: p.reference,
Amount: p.amount,
}, nil
}
func (p *PassthroughProvider) Capture(_ context.Context, _ string, _ int64) (Capture, error) {
if p.reference == "" {
return Capture{}, fmt.Errorf("passthrough: capture requires a processor reference")
}
return Capture{
Provider: p.name,
Reference: p.reference,
Amount: p.amount,
}, nil
}
func (p *PassthroughProvider) Refund(_ context.Context, _ string, _ int64) (RefundResult, error) {
return RefundResult{}, fmt.Errorf("passthrough: refund not implemented — use the external provider directly")
}
func (p *PassthroughProvider) Void(_ context.Context, _ string) error { return nil }