feat: Region PaymentProvider link (#6577)

**What**

- Introduce link between Region and PaymentProvider
- Introduce API endpoint `GET /store/regions/:id/payment-providers` for retrieving providers by region
- Add tests for both
This commit is contained in:
Oli Juhl
2024-03-05 10:40:25 +01:00
committed by GitHub
parent 82db53c99e
commit 7d69e6068e
14 changed files with 371 additions and 43 deletions
+19 -19
View File
@@ -3,16 +3,18 @@ import {
Context,
CreateCaptureDTO,
CreatePaymentCollectionDTO,
CreatePaymentProviderDTO,
CreatePaymentSessionDTO,
CreateRefundDTO,
DAL,
FilterablePaymentProviderProps,
FindConfig,
InternalModuleDeclaration,
IPaymentModuleService,
ModuleJoinerConfig,
ModulesSdkTypes,
PaymentCollectionDTO,
PaymentDTO,
PaymentProviderDTO,
PaymentSessionDTO,
PaymentSessionStatus,
ProviderWebhookPayload,
@@ -590,25 +592,23 @@ export default class PaymentModuleService<
}
}
async createProvidersOnLoad() {
const providersToLoad = this.__container__["payment_providers"]
@InjectManager("baseRepository_")
async listPaymentProviders(
filters: FilterablePaymentProviderProps = {},
config: FindConfig<PaymentProviderDTO> = {},
@MedusaContext() sharedContext?: Context
): Promise<PaymentProviderDTO[]> {
const providers = await this.paymentProviderService_.list(
filters,
config,
sharedContext
)
const providers = await this.paymentProviderService_.list({
// @ts-ignore TODO
id: providersToLoad,
})
const loadedProvidersMap = new Map(providers.map((p) => [p.id, p]))
const providersToCreate: CreatePaymentProviderDTO[] = []
for (const id of providersToLoad) {
if (loadedProvidersMap.has(id)) {
continue
return await this.baseRepository_.serialize<PaymentProviderDTO[]>(
providers,
{
populate: true,
}
providersToCreate.push({ id })
}
await this.paymentProviderService_.create(providersToCreate)
)
}
}
@@ -3,10 +3,13 @@ import {
CreatePaymentProviderDTO,
CreatePaymentProviderSession,
DAL,
FilterablePaymentProviderProps,
FindConfig,
InternalModuleDeclaration,
IPaymentProvider,
PaymentProviderAuthorizeResponse,
PaymentProviderDataInput,
PaymentProviderDTO,
PaymentProviderError,
PaymentProviderSessionResponse,
PaymentSessionStatus,
@@ -19,6 +22,7 @@ import {
InjectTransactionManager,
isPaymentProviderError,
MedusaContext,
ModulesSdkUtils,
} from "@medusajs/utils"
import { PaymentProvider } from "@models"
import { MedusaError } from "medusa-core-utils"
@@ -52,9 +56,19 @@ export default class PaymentProviderService {
@InjectManager("paymentProviderRepository_")
async list(
filters: FilterablePaymentProviderProps,
config: FindConfig<PaymentProviderDTO>,
@MedusaContext() sharedContext?: Context
): Promise<PaymentProvider[]> {
return await this.paymentProviderRepository_.find(undefined, sharedContext)
const queryOptions = ModulesSdkUtils.buildQuery<PaymentProvider>(
filters,
config
)
return await this.paymentProviderRepository_.find(
queryOptions,
sharedContext
)
}
retrieveProvider(providerId: string): IPaymentProvider {