Skip to content

[Tech Debt] Remove dead payment integrations: PayPal and Adyen #276

@sonikro

Description

@sonikro

Problem

Both the PayPal and Adyen payment integrations are fully implemented but are never used in production. Neither payment processor is actually connected to the running application. Removing them cleans up significant dead code and an unused npm dependency.

Note: This issue is largely superseded by #277 (remove entire credits system), which covers a broader scope including these payment services.

Scope of Dead Code

Providers layer

  • packages/providers/src/services/AdyenPaymentService.ts — full Adyen checkout implementation using @adyen/api-library
  • packages/providers/src/services/PaypalPaymentService.ts — full PayPal order + webhook validation implementation
  • packages/providers/src/services/PaypalPaymentServiceTypes.ts — PayPal type definitions
  • packages/providers/src/services/AdyenPaymentService.test.ts — tests for dead code
  • packages/providers/src/services/PaypalPaymentService.test.ts — tests for dead code
  • Exports in packages/providers/src/services/index.ts
  • @adyen/api-library npm dependency in packages/providers/package.json

Entrypoints layer

  • packages/entrypoints/src/http/middlewares/adyenMiddleware.tsregisterAdyenMiddleware is defined but never called
  • packages/entrypoints/src/http/middlewares/paypalMiddleware.tsregisterPaypalMiddleware is defined but never called
  • packages/entrypoints/src/http/middlewares/PayPalOrderApprovedWebhookPayload.ts — PayPal webhook types
  • Instantiation of both services in packages/entrypoints/src/discordBot.ts (lines 113–123):
    const paypalPaymentService = new PaypalPaymentService({ ... });
    const adyenPaymentService = new AdyenPaymentService({ ... });
  • adyenPaymentService is passed to CreateCreditsPurchaseOrder (line 197) which is also part of the dead BuyCredits flow (see [Tech Debt] Remove dead code: BuyCredits command #267)

Core layer (to evaluate)

The following core interfaces and use cases were introduced solely to support these payment providers. They should be removed only if no other active payment service is planned:

  • packages/core/src/services/PaymentService.ts (interface)
  • packages/core/src/usecase/CreateCreditsPurchaseOrder.ts + its test
  • packages/core/src/usecase/HandleOrderPaid.ts + its test
  • packages/core/src/repository/CreditOrdersRepository.ts
  • packages/core/src/domain/CreditOrder.ts
  • packages/core/src/domain/CreditOrderRequest.ts
  • packages/providers/src/repository/SQliteCreditOrdersRepository.ts

Migrations

⚠️ Migrations are append-only — never delete existing migration files.
The credit_orders table created by migrations/20250411154322_purchase_order_table.ts should be dropped by creating a new migration file (e.g. migrations/YYYYMMDDHHMMSS_drop_credit_orders.ts).

Fix

  1. Delete all PayPal and Adyen provider files listed above
  2. Remove @adyen/api-library from packages/providers/package.json
  3. Delete the two webhook middleware files from entrypoints
  4. Remove the PayPalOrderApprovedWebhookPayload.ts type file
  5. Remove PayPal/Adyen instantiation and imports from discordBot.ts
  6. Evaluate and remove core payment interfaces/use cases if no replacement payment provider is planned
  7. Create a new migration to drop the credit_orders table (do NOT delete the old migration)
  8. Run npm install to update lockfile after package removal

Metadata

Metadata

Assignees

No one assigned

    Labels

    tech-debtTechnical debt items

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions