# aniketkr112/nexupay architecture

> Architecture diagram of the GitHub repository aniketkr112/nexupay, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-28). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/aniketkr112/nexupay
- Repository: https://github.com/aniketkr112/nexupay

## Overview

Nexupay is a merchant-facing payment service: merchants create payment requests, initiate UPI attempts, and can query payment status; the service coordinates bank processing and records outcomes. Separate workflows manage merchant credentials, refunds, and payment webhooks, with scheduled recovery for uncertain payment/refund outcomes and webhook delivery. The graph reflects sampled service and transaction code plus subsystem names in the tree; the README is unreadable, and controller wiring not shown in sampled sources is not asserted.

Main entry points: [`payment-service/src/main/java/com/nexupay/payment/paymentattempt/service/transaction/PaymentAttemptTransactionService.java`](https://github.com/aniketkr112/nexupay/blob/main/payment-service/src/main/java/com/nexupay/payment/paymentattempt/service/transaction/PaymentAttemptTransactionService.java) (Attempt transaction), [`payment-service/src/main/java/com/nexupay/payment/payment/service/PaymentWebhookService.java`](https://github.com/aniketkr112/nexupay/blob/main/payment-service/src/main/java/com/nexupay/payment/payment/service/PaymentWebhookService.java) (Webhook delivery), [`payment-service/src/main/java/com/nexupay/payment/paymentattempt/service/PaymentRecoveryService.java`](https://github.com/aniketkr112/nexupay/blob/main/payment-service/src/main/java/com/nexupay/payment/paymentattempt/service/PaymentRecoveryService.java) (Payment recovery), [`payment-service/src/main/java/com/nexupay/payment/bank/service/BankService.java`](https://github.com/aniketkr112/nexupay/blob/main/payment-service/src/main/java/com/nexupay/payment/bank/service/BankService.java) (Bank service)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_identity["Merchant identity"]
  node_merchant_api["Merchant API"]
  node_merchant_service["Merchant service"]
  node_merchant_store[("Merchant repository")]
  node_credential_store[("Credential repository")]
  node_auth_filter["API authentication"]
  node_auth_cache["Redis auth cache"]
end

subgraph group_payments["Payment processing"]
  node_payment_api["Payment API"]
  node_payment_service["Payment service"]
  node_payment_store[("Payment repository")]
  node_checkout_api["Checkout API"]
  node_checkout_service["Checkout service"]
  node_attempt_api["Attempt API"]
  node_attempt_tx["Attempt transaction"]
  node_attempt_store[("Attempt repository")]
  node_recovery["Payment recovery"]
end

subgraph group_refunds["Refund processing"]
  node_refund_api["Refund API"]
  node_refund_service["Refund service"]
  node_refund_tx["Refund processing"]
  node_refund_store[("Refund repository")]
  node_refund_scheduler["Refund scheduler"]
end

subgraph group_delivery["Bank and delivery"]
  node_bank_service["Bank service<br/>[BankService.java]"]
  node_webhook_scheduler["Webhook scheduler"]
  node_webhook_service["Webhook delivery"]
  node_webhook_store[("Webhook repository")]
end

node_merchant(("Merchant"))
node_redis[("Redis")]
node_bank["Bank"]
node_merchant_endpoint(("Merchant webhook"))

node_merchant -->|"manages account"| node_merchant_api
node_merchant_service -->|"reads and writes"| node_merchant_store
node_merchant_service -->|"creates credentials"| node_credential_store
node_auth_filter -->|"checks cache"| node_auth_cache
node_auth_cache -->|"reads and writes"| node_redis
node_payment_service -->|"checks and saves"| node_payment_store
node_recovery -->|"loads attempts"| node_attempt_store
node_recovery -->|"checks status"| node_bank_service
node_recovery -->|"finalizes attempt"| node_attempt_tx
node_attempt_tx -->|"locks and reads"| node_payment_store
node_attempt_tx -->|"reads and saves"| node_attempt_store
node_attempt_tx -->|"loads merchant"| node_merchant_store
node_attempt_tx -->|"saves webhook"| node_webhook_store
node_refund_tx -->|"submits or looks up"| node_bank_service
node_refund_tx -->|"saves refund"| node_refund_store
node_bank_service -.->|"bank operations"| node_bank
node_webhook_scheduler -->|"dispatches delivery"| node_webhook_service
node_webhook_service -->|"loads payment"| node_payment_store
node_webhook_service -->|"saves delivery state"| node_webhook_store
node_webhook_service -->|"posts notification"| node_merchant_endpoint

click node_merchant_api "https://github.com/aniketkr112/nexupay/blob/main/payment-service/src/main/java/com/nexupay/payment/merchant/controller/MerchantController.java"
click node_merchant_service "https://github.com/aniketkr112/nexupay/blob/main/payment-service/src/main/java/com/nexupay/payment/merchant/service/MerchantService.java"
click node_merchant_store "https://github.com/aniketkr112/nexupay/blob/main/payment-service/src/main/java/com/nexupay/payment/merchant/repository/MerchantRepository.java"
click node_credential_store "https://github.com/aniketkr112/nexupay/blob/main/payment-service/src/main/java/com/nexupay/payment/credential/repository/ApiCredentialRepository.java"
click node_auth_filter "https://github.com/aniketkr112/nexupay/blob/main/payment-service/src/main/java/com/nexupay/payment/security/ApiAuthenticationFilter.java"
click node_auth_cache "https://github.com/aniketkr112/nexupay/blob/main/payment-service/src/main/java/com/nexupay/payment/security/cache/RedisAuthenticationCacheService.java"
click node_payment_api "https://github.com/aniketkr112/nexupay/blob/main/payment-service/src/main/java/com/nexupay/payment/payment/controller/PaymentController.java"
click node_payment_service "https://github.com/aniketkr112/nexupay/blob/main/payment-service/src/main/java/com/nexupay/payment/payment/service/PaymentService.java"
click node_payment_store "https://github.com/aniketkr112/nexupay/blob/main/payment-service/src/main/java/com/nexupay/payment/payment/repository/PaymentRepository.java"
click node_checkout_api "https://github.com/aniketkr112/nexupay/blob/main/payment-service/src/main/java/com/nexupay/payment/payment/controller/CheckoutController.java"
click node_checkout_service "https://github.com/aniketkr112/nexupay/blob/main/payment-service/src/main/java/com/nexupay/payment/payment/service/CheckoutServiceImpl.java"
click node_attempt_api "https://github.com/aniketkr112/nexupay/blob/main/payment-service/src/main/java/com/nexupay/payment/paymentattempt/controller/PaymentAttemptController.java"
click node_attempt_tx "https://github.com/aniketkr112/nexupay/blob/main/payment-service/src/main/java/com/nexupay/payment/paymentattempt/service/transaction/PaymentAttemptTransactionService.java"
click node_attempt_store "https://github.com/aniketkr112/nexupay/blob/main/payment-service/src/main/java/com/nexupay/payment/paymentattempt/repository/PaymentAttemptRepository.java"
click node_recovery "https://github.com/aniketkr112/nexupay/blob/main/payment-service/src/main/java/com/nexupay/payment/paymentattempt/service/PaymentRecoveryService.java"
click node_refund_api "https://github.com/aniketkr112/nexupay/blob/main/payment-service/src/main/java/com/nexupay/payment/refund/controller/RefundController.java"
click node_refund_service "https://github.com/aniketkr112/nexupay/blob/main/payment-service/src/main/java/com/nexupay/payment/refund/service/RefundServiceImpl.java"
click node_refund_tx "https://github.com/aniketkr112/nexupay/blob/main/payment-service/src/main/java/com/nexupay/payment/refund/service/transaction/RefundProcessingTransactionService.java"
click node_refund_store "https://github.com/aniketkr112/nexupay/blob/main/payment-service/src/main/java/com/nexupay/payment/refund/repository/RefundRepository.java"
click node_refund_scheduler "https://github.com/aniketkr112/nexupay/blob/main/payment-service/src/main/java/com/nexupay/payment/refund/scheduler/RefundScheduler.java"
click node_bank_service "https://github.com/aniketkr112/nexupay/blob/main/payment-service/src/main/java/com/nexupay/payment/bank/service/BankService.java"
click node_webhook_scheduler "https://github.com/aniketkr112/nexupay/blob/main/payment-service/src/main/java/com/nexupay/payment/payment/scheduler/PaymentWebhookScheduler.java"
click node_webhook_service "https://github.com/aniketkr112/nexupay/blob/main/payment-service/src/main/java/com/nexupay/payment/payment/service/PaymentWebhookService.java"
click node_webhook_store "https://github.com/aniketkr112/nexupay/blob/main/payment-service/src/main/java/com/nexupay/payment/payment/repository/PaymentWebhookRepository.java"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_merchant_api,node_merchant_service,node_merchant_store,node_credential_store,node_auth_filter,node_auth_cache toneBlue
class node_payment_api,node_payment_service,node_payment_store,node_checkout_api,node_checkout_service,node_attempt_api,node_attempt_tx,node_attempt_store,node_recovery,node_redis toneAmber
class node_refund_api,node_refund_service,node_refund_tx,node_refund_store,node_refund_scheduler,node_merchant_endpoint toneMint
class node_bank_service,node_webhook_scheduler,node_webhook_service,node_webhook_store toneRose
class node_merchant,node_bank toneIndigo
```

## Components

### Merchant identity

- [Merchant API](https://github.com/aniketkr112/nexupay/blob/main/payment-service/src/main/java/com/nexupay/payment/merchant/controller/MerchantController.java): `payment-service/src/main/java/com/nexupay/payment/merchant/controller/MerchantController.java`
- [Merchant service](https://github.com/aniketkr112/nexupay/blob/main/payment-service/src/main/java/com/nexupay/payment/merchant/service/MerchantService.java): `payment-service/src/main/java/com/nexupay/payment/merchant/service/MerchantService.java`
- [Merchant repository](https://github.com/aniketkr112/nexupay/blob/main/payment-service/src/main/java/com/nexupay/payment/merchant/repository/MerchantRepository.java): `payment-service/src/main/java/com/nexupay/payment/merchant/repository/MerchantRepository.java`
- [Credential repository](https://github.com/aniketkr112/nexupay/blob/main/payment-service/src/main/java/com/nexupay/payment/credential/repository/ApiCredentialRepository.java): `payment-service/src/main/java/com/nexupay/payment/credential/repository/ApiCredentialRepository.java`
- [API authentication](https://github.com/aniketkr112/nexupay/blob/main/payment-service/src/main/java/com/nexupay/payment/security/ApiAuthenticationFilter.java): `payment-service/src/main/java/com/nexupay/payment/security/ApiAuthenticationFilter.java`
- [Redis auth cache](https://github.com/aniketkr112/nexupay/blob/main/payment-service/src/main/java/com/nexupay/payment/security/cache/RedisAuthenticationCacheService.java): `payment-service/src/main/java/com/nexupay/payment/security/cache/RedisAuthenticationCacheService.java`

### Payment processing

- [Payment API](https://github.com/aniketkr112/nexupay/blob/main/payment-service/src/main/java/com/nexupay/payment/payment/controller/PaymentController.java): `payment-service/src/main/java/com/nexupay/payment/payment/controller/PaymentController.java`
- [Payment service](https://github.com/aniketkr112/nexupay/blob/main/payment-service/src/main/java/com/nexupay/payment/payment/service/PaymentService.java): `payment-service/src/main/java/com/nexupay/payment/payment/service/PaymentService.java`
- [Payment repository](https://github.com/aniketkr112/nexupay/blob/main/payment-service/src/main/java/com/nexupay/payment/payment/repository/PaymentRepository.java): `payment-service/src/main/java/com/nexupay/payment/payment/repository/PaymentRepository.java`
- [Checkout API](https://github.com/aniketkr112/nexupay/blob/main/payment-service/src/main/java/com/nexupay/payment/payment/controller/CheckoutController.java): `payment-service/src/main/java/com/nexupay/payment/payment/controller/CheckoutController.java`
- [Checkout service](https://github.com/aniketkr112/nexupay/blob/main/payment-service/src/main/java/com/nexupay/payment/payment/service/CheckoutServiceImpl.java): `payment-service/src/main/java/com/nexupay/payment/payment/service/CheckoutServiceImpl.java`
- [Attempt API](https://github.com/aniketkr112/nexupay/blob/main/payment-service/src/main/java/com/nexupay/payment/paymentattempt/controller/PaymentAttemptController.java): `payment-service/src/main/java/com/nexupay/payment/paymentattempt/controller/PaymentAttemptController.java`
- [Attempt transaction](https://github.com/aniketkr112/nexupay/blob/main/payment-service/src/main/java/com/nexupay/payment/paymentattempt/service/transaction/PaymentAttemptTransactionService.java): `payment-service/src/main/java/com/nexupay/payment/paymentattempt/service/transaction/PaymentAttemptTransactionService.java`
- [Attempt repository](https://github.com/aniketkr112/nexupay/blob/main/payment-service/src/main/java/com/nexupay/payment/paymentattempt/repository/PaymentAttemptRepository.java): `payment-service/src/main/java/com/nexupay/payment/paymentattempt/repository/PaymentAttemptRepository.java`
- [Payment recovery](https://github.com/aniketkr112/nexupay/blob/main/payment-service/src/main/java/com/nexupay/payment/paymentattempt/service/PaymentRecoveryService.java): `payment-service/src/main/java/com/nexupay/payment/paymentattempt/service/PaymentRecoveryService.java`

### Refund processing

- [Refund API](https://github.com/aniketkr112/nexupay/blob/main/payment-service/src/main/java/com/nexupay/payment/refund/controller/RefundController.java): `payment-service/src/main/java/com/nexupay/payment/refund/controller/RefundController.java`
- [Refund service](https://github.com/aniketkr112/nexupay/blob/main/payment-service/src/main/java/com/nexupay/payment/refund/service/RefundServiceImpl.java): `payment-service/src/main/java/com/nexupay/payment/refund/service/RefundServiceImpl.java`
- [Refund processing](https://github.com/aniketkr112/nexupay/blob/main/payment-service/src/main/java/com/nexupay/payment/refund/service/transaction/RefundProcessingTransactionService.java): `payment-service/src/main/java/com/nexupay/payment/refund/service/transaction/RefundProcessingTransactionService.java`
- [Refund repository](https://github.com/aniketkr112/nexupay/blob/main/payment-service/src/main/java/com/nexupay/payment/refund/repository/RefundRepository.java): `payment-service/src/main/java/com/nexupay/payment/refund/repository/RefundRepository.java`
- [Refund scheduler](https://github.com/aniketkr112/nexupay/blob/main/payment-service/src/main/java/com/nexupay/payment/refund/scheduler/RefundScheduler.java): `payment-service/src/main/java/com/nexupay/payment/refund/scheduler/RefundScheduler.java`

### Bank and delivery

- [Bank service](https://github.com/aniketkr112/nexupay/blob/main/payment-service/src/main/java/com/nexupay/payment/bank/service/BankService.java): `payment-service/src/main/java/com/nexupay/payment/bank/service/BankService.java`
- [Webhook scheduler](https://github.com/aniketkr112/nexupay/blob/main/payment-service/src/main/java/com/nexupay/payment/payment/scheduler/PaymentWebhookScheduler.java): `payment-service/src/main/java/com/nexupay/payment/payment/scheduler/PaymentWebhookScheduler.java`
- [Webhook delivery](https://github.com/aniketkr112/nexupay/blob/main/payment-service/src/main/java/com/nexupay/payment/payment/service/PaymentWebhookService.java): `payment-service/src/main/java/com/nexupay/payment/payment/service/PaymentWebhookService.java`
- [Webhook repository](https://github.com/aniketkr112/nexupay/blob/main/payment-service/src/main/java/com/nexupay/payment/payment/repository/PaymentWebhookRepository.java): `payment-service/src/main/java/com/nexupay/payment/payment/repository/PaymentWebhookRepository.java`

### Other components

- **Merchant**
- **Redis**
- **Bank**
- **Merchant webhook**

## Connections

- Merchant → Merchant API: manages account
- Merchant service → Merchant repository: reads and writes
- Merchant service → Credential repository: creates credentials
- API authentication → Redis auth cache: checks cache
- Redis auth cache → Redis: reads and writes
- Payment service → Payment repository: checks and saves
- Payment recovery → Attempt repository: loads attempts
- Payment recovery → Bank service: checks status
- Payment recovery → Attempt transaction: finalizes attempt
- Attempt transaction → Payment repository: locks and reads
- Attempt transaction → Attempt repository: reads and saves
- Attempt transaction → Merchant repository: loads merchant
- Attempt transaction → Webhook repository: saves webhook
- Refund processing → Bank service: submits or looks up
- Refund processing → Refund repository: saves refund
- Bank service → Bank: bank operations
- Webhook scheduler → Webhook delivery: dispatches delivery
- Webhook delivery → Payment repository: loads payment
- Webhook delivery → Webhook repository: saves delivery state
- Webhook delivery → Merchant webhook: posts notification
