feat(medusa:) Convert PaymentProvider + PaymentProviderInterface to TS + (#1773)

* feat(payments): Refactor core Payment related

* fix(medusa): typings

* test(unit): fix suite

* test(unit): fix suite

* feat(medusa): Improve payment provider container typings

* fix(medusa): typings

* styles(medusa): renove comments

* feat(medusa): cleanup

* feat(medusa): Add uniq constraint on payment session and idem key on create-payment-session end point

* fix(medusa): migration

* fix(medusa): create payment session

* feat(medusa): cleanup
This commit is contained in:
Adrien de Peretti authored and GitHub committed 2022-08-10 17:26:16 +02:00
1 parent 987ce2ab6d
commit bd031ef7ad
26 files changed
+1106 -512

No files matched your search

+1
View File
@@ -9,3 +9,4 @@ export * from "./price-selection-strategy"
export * from "./models/base-entity"
export * from "./models/soft-deletable-entity"
export * from "./search-service"
export * from "./payment-service"
@@ -0,0 +1,116 @@
import { TransactionBaseService } from "./transaction-base-service"
import {
Cart,
Customer,
Payment,
PaymentSession,
PaymentSessionStatus,
} from "../models"
import { PaymentService } from "medusa-interfaces"
export type Data = Record<string, unknown>
export type PaymentData = Data
export type PaymentSessionData = Data
export interface PaymentService<T extends TransactionBaseService<never>>
extends TransactionBaseService<T> {
getIdentifier(): string
getPaymentData(paymentSession: PaymentSession): Promise<PaymentData>
updatePaymentData(
paymentSessionData: PaymentSessionData,
data: Data
): Promise<PaymentSessionData>
createPayment(cart: Cart): Promise<PaymentSessionData>
retrievePayment(paymentData: PaymentData): Promise<Data>
updatePayment(
paymentSessionData: PaymentSessionData,
cart: Cart
): Promise<PaymentSessionData>
authorizePayment(
paymentSession: PaymentSession,
context: Data
): Promise<{ data: PaymentSessionData; status: PaymentSessionStatus }>
capturePayment(payment: Payment): Promise<PaymentData>
refundPayment(payment: Payment, refundAmount: number): Promise<PaymentData>
cancelPayment(payment: Payment): Promise<PaymentData>
deletePayment(paymentSession: PaymentSession): Promise<void>
retrieveSavedMethods(customer: Customer): Promise<Data[]>
getStatus(data: Data): Promise<PaymentSessionStatus>
}
export abstract class AbstractPaymentService<
T extends TransactionBaseService<never>
>
extends TransactionBaseService<T>
implements PaymentService<T>
{
protected constructor(container: unknown, config?: Record<string, unknown>) {
super(container, config)
}
protected static identifier: string
public getIdentifier(): string {
if (!(<typeof AbstractPaymentService>this.constructor).identifier) {
throw new Error('Missing static property "identifier".')
}
return (<typeof AbstractPaymentService>this.constructor).identifier
}
public abstract getPaymentData(
paymentSession: PaymentSession
): Promise<PaymentData>
public abstract updatePaymentData(
paymentSessionData: PaymentSessionData,
data: Data
): Promise<PaymentSessionData>
public abstract createPayment(cart: Cart): Promise<PaymentSessionData>
public abstract retrievePayment(paymentData: PaymentData): Promise<Data>
public abstract updatePayment(
paymentSessionData: PaymentSessionData,
cart: Cart
): Promise<PaymentSessionData>
public abstract authorizePayment(
paymentSession: PaymentSession,
context: Data
): Promise<{ data: PaymentSessionData; status: PaymentSessionStatus }>
public abstract capturePayment(payment: Payment): Promise<PaymentData>
public abstract refundPayment(
payment: Payment,
refundAmount: number
): Promise<PaymentData>
public abstract cancelPayment(payment: Payment): Promise<PaymentData>
public abstract deletePayment(paymentSession: PaymentSession): Promise<void>
// eslint-disable-next-line @typescript-eslint/no-unused-vars
public retrieveSavedMethods(customer: Customer): Promise<Data[]> {
return Promise.resolve([])
}
public abstract getStatus(data: Data): Promise<PaymentSessionStatus>
}
export function isPaymentService(obj: unknown): boolean {
return obj instanceof AbstractPaymentService || obj instanceof PaymentService
}