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:
1 parent
987ce2ab6d
commit
bd031ef7ad
26 files changed
+1106
-512
No files matched your search
@@ -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
|
||||
}
|
||||
Reference in new issue
Block a user