payment-method.entity.ts 1.1 KB

12345678910111213141516171819202122232425262728293031
  1. import { Column, Entity } from 'typeorm';
  2. import { ConfigArg } from '../../../../shared/generated-types';
  3. import { DeepPartial } from '../../../../shared/shared-types';
  4. import { UserInputError } from '../../common/error/errors';
  5. import { getConfig } from '../../config/config-helpers';
  6. import { VendureEntity } from '../base/base.entity';
  7. import { Order } from '../order/order.entity';
  8. import { Payment, PaymentMetadata } from '../payment/payment.entity';
  9. @Entity()
  10. export class PaymentMethod extends VendureEntity {
  11. constructor(input?: DeepPartial<PaymentMethod>) {
  12. super(input);
  13. }
  14. @Column() code: string;
  15. @Column() enabled: boolean;
  16. @Column('simple-json') configArgs: ConfigArg[];
  17. async createPayment(order: Order, metadata: PaymentMetadata) {
  18. const handler = getConfig().paymentOptions.paymentMethodHandlers.find(h => h.code === this.code);
  19. if (!handler) {
  20. throw new UserInputError(`error.no-payment-handler-with-code`, { code: this.code });
  21. }
  22. const result = await handler.createPayment(order, this.configArgs, metadata || {});
  23. return new Payment(result);
  24. }
  25. }