feat: ( payment ) create payment microservice

This commit is contained in:
Abubeker Yasin
2026-06-11 15:25:24 +03:00
parent 3235567b41
commit 2b430f8e76
54 changed files with 2809 additions and 0 deletions

View File

@@ -0,0 +1,46 @@
import { Module } from "@nestjs/common";
import { HttpModule } from "@nestjs/axios";
import {
CardProvider,
CbeBirrProvider,
DMoneyProvider,
EBirrProvider,
PaymentProvider,
TelebirrProvider,
WaafiProvider,
} from "@edr/payment-providers";
import { ProviderMethod } from "@edr/types";
/** Injection token for the Map<ProviderMethod, PaymentProvider> used to select a gateway. */
export const PAYMENT_PROVIDER_MAP = Symbol("PAYMENT_PROVIDER_MAP");
export type PaymentProviderMap = Map<ProviderMethod, PaymentProvider>;
const providerClasses = [
TelebirrProvider,
CbeBirrProvider,
EBirrProvider,
CardProvider,
WaafiProvider,
DMoneyProvider,
];
/**
* Thin DI wiring around @edr/payment-providers — the exact provider set the passenger app
* used to construct, relocated here. After cutover this service is the only consumer of the
* provider SDK and of the provider secrets (config/{waafi,telebirr,…}.config.ts).
*/
@Module({
imports: [HttpModule.register({ timeout: 10_000 })],
providers: [
...providerClasses,
{
provide: PAYMENT_PROVIDER_MAP,
useFactory: (...providers: PaymentProvider[]): PaymentProviderMap =>
new Map(providers.map((provider) => [provider.method, provider])),
inject: providerClasses,
},
],
exports: [PAYMENT_PROVIDER_MAP, ...providerClasses],
})
export class ProvidersModule {}