# vivekawas-web/razorpayclone architecture

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

- Interactive diagram: https://gitdiagram.com/vivekawas-web/razorpayclone
- Repository: https://github.com/vivekawas-web/razorpayclone

## Overview

RazorPayCLONE is a Spring Boot payment-gateway backend. Its principal workflow accepts merchant payment requests, manages orders and payments, and exposes payment capture; the tree also includes payment-method processing, card tokenization, merchant authentication/API keys, and operational records. Sampled code confirms controller-to-service calls, signup/login persistence and token issuance, and payment-state transition logging. Service implementations and much of the payment orchestration were not sampled, so those internal connections are intentionally left unspecified; the README describes several dashboard and SDK capabilities as planned.

Main entry points: [`src/main/java/com/projectsByVivek/razorPayM/merchantService/service/impl/AuthServiceImpl.java`](https://github.com/vivekawas-web/razorpayclone/blob/main/src/main/java/com/projectsByVivek/razorPayM/merchantService/service/impl/AuthServiceImpl.java) (Authentication service), [`src/main/java/com/projectsByVivek/razorPayM/merchantService/controller/ApiKeyController.java`](https://github.com/vivekawas-web/razorpayclone/blob/main/src/main/java/com/projectsByVivek/razorPayM/merchantService/controller/ApiKeyController.java) (API key API), [`src/main/java/com/projectsByVivek/razorPayM/paymentService/stateMachine/PaymentTransitionService.java`](https://github.com/vivekawas-web/razorpayclone/blob/main/src/main/java/com/projectsByVivek/razorPayM/paymentService/stateMachine/PaymentTransitionService.java) (State transitions), [`src/main/java/com/projectsByVivek/razorPayM/merchantService/controller/AuthController.java`](https://github.com/vivekawas-web/razorpayclone/blob/main/src/main/java/com/projectsByVivek/razorPayM/merchantService/controller/AuthController.java) (Authentication API)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_merchant["Merchant access"]
  node_auth_api["Authentication API"]
  node_auth_service["Authentication service"]
  node_merchant_store[("Merchant records")]
  node_user_store[("User records")]
  node_jwt["JWT issuance<br/>[JwtUtil.java]"]
  node_key_api["API key API"]
  node_key_service["API key service"]
  node_key_store[("API key records")]
end

subgraph group_payments["Payment processing"]
  node_order_api["Order API"]
  node_order_service["Order service"]
  node_payment_api["Payment API"]
  node_payment_service["Payment service"]
  node_processor_router["Processor routing"]
  node_gateway_router["Gateway routing"]
  node_transition_service["State transitions"]
  node_state_machine["Payment state machine"]
  node_payment_store[("Payment records")]
  node_transition_log_store[("Transition logs")]
end

subgraph group_vault["Card vault"]
  node_vault_api["Vault API"]
  node_vault_service["Vault service"]
  node_vault_store[("Card token records")]
end

subgraph group_operations["Operations records"]
  node_operations_records[("Settlement and webhook records<br/>[Settlement.java]")]
end

node_merchant_actor(("Merchant client"))

node_merchant_actor -->|"submits credentials"| node_auth_api
node_auth_api -->|"calls auth"| node_auth_service
node_auth_service -->|"checks and saves"| node_merchant_store
node_auth_service -->|"saves and reads"| node_user_store
node_auth_service -->|"generates token"| node_jwt
node_merchant_actor -->|"manages keys"| node_key_api
node_key_api -->|"calls key service"| node_key_service
node_key_api -->|"submits orders"| node_order_api
node_order_api -->|"calls order service"| node_order_service
node_merchant_actor -->|"initiates payment"| node_payment_api
node_payment_api -->|"calls payment service"| node_payment_service
node_transition_service -->|"computes transition"| node_state_machine
node_transition_service -->|"saves transition log"| node_transition_log_store
node_merchant_actor -->|"submits card"| node_vault_api
node_vault_api -->|"tokenizes card"| node_vault_service

click node_auth_api "https://github.com/vivekawas-web/razorpayclone/blob/main/src/main/java/com/projectsByVivek/razorPayM/merchantService/controller/AuthController.java"
click node_auth_service "https://github.com/vivekawas-web/razorpayclone/blob/main/src/main/java/com/projectsByVivek/razorPayM/merchantService/service/impl/AuthServiceImpl.java"
click node_merchant_store "https://github.com/vivekawas-web/razorpayclone/blob/main/src/main/java/com/projectsByVivek/razorPayM/merchantService/repository/MerchantRepository.java"
click node_user_store "https://github.com/vivekawas-web/razorpayclone/blob/main/src/main/java/com/projectsByVivek/razorPayM/merchantService/repository/AppUserRepository.java"
click node_jwt "https://github.com/vivekawas-web/razorpayclone/blob/main/src/main/java/com/projectsByVivek/razorPayM/merchantService/security/JwtUtil.java"
click node_key_api "https://github.com/vivekawas-web/razorpayclone/blob/main/src/main/java/com/projectsByVivek/razorPayM/merchantService/controller/ApiKeyController.java"
click node_key_service "https://github.com/vivekawas-web/razorpayclone/blob/main/src/main/java/com/projectsByVivek/razorPayM/merchantService/service/impl/ApiKeyServiceImpl.java"
click node_key_store "https://github.com/vivekawas-web/razorpayclone/blob/main/src/main/java/com/projectsByVivek/razorPayM/merchantService/repository/ApiKeyRepository.java"
click node_order_api "https://github.com/vivekawas-web/razorpayclone/blob/main/src/main/java/com/projectsByVivek/razorPayM/paymentService/controller/OrderController.java"
click node_order_service "https://github.com/vivekawas-web/razorpayclone/blob/main/src/main/java/com/projectsByVivek/razorPayM/paymentService/service/impl/OrderServiceImpl.java"
click node_payment_api "https://github.com/vivekawas-web/razorpayclone/blob/main/src/main/java/com/projectsByVivek/razorPayM/paymentService/controller/paymentController.java"
click node_payment_service "https://github.com/vivekawas-web/razorpayclone/blob/main/src/main/java/com/projectsByVivek/razorPayM/paymentService/service/impl/PaymentServiceImpl.java"
click node_processor_router "https://github.com/vivekawas-web/razorpayclone/blob/main/src/main/java/com/projectsByVivek/razorPayM/paymentService/processor/PaymentProcessorRouter.java"
click node_gateway_router "https://github.com/vivekawas-web/razorpayclone/blob/main/src/main/java/com/projectsByVivek/razorPayM/paymentService/gateway/PaymentGatewayRouter.java"
click node_transition_service "https://github.com/vivekawas-web/razorpayclone/blob/main/src/main/java/com/projectsByVivek/razorPayM/paymentService/stateMachine/PaymentTransitionService.java"
click node_state_machine "https://github.com/vivekawas-web/razorpayclone/blob/main/src/main/java/com/projectsByVivek/razorPayM/paymentService/stateMachine/PaymentStateMachine.java"
click node_payment_store "https://github.com/vivekawas-web/razorpayclone/blob/main/src/main/java/com/projectsByVivek/razorPayM/paymentService/repository/PaymentRepository.java"
click node_transition_log_store "https://github.com/vivekawas-web/razorpayclone/blob/main/src/main/java/com/projectsByVivek/razorPayM/paymentService/repository/PaymentTransitionLogRepository.java"
click node_vault_api "https://github.com/vivekawas-web/razorpayclone/blob/main/src/main/java/com/projectsByVivek/razorPayM/vaultService/controller/VaultController.java"
click node_vault_service "https://github.com/vivekawas-web/razorpayclone/blob/main/src/main/java/com/projectsByVivek/razorPayM/vaultService/service/impl/VaultServiceImpl.java"
click node_vault_store "https://github.com/vivekawas-web/razorpayclone/blob/main/src/main/java/com/projectsByVivek/razorPayM/vaultService/repository/CardTokenRepository.java"
click node_operations_records "https://github.com/vivekawas-web/razorpayclone/blob/main/src/main/java/com/projectsByVivek/razorPayM/operationsService/entity/Settlement.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_auth_api,node_auth_service,node_merchant_store,node_user_store,node_jwt,node_key_api,node_key_service,node_key_store,node_merchant_actor toneBlue
class node_order_api,node_order_service,node_payment_api,node_payment_service,node_processor_router,node_gateway_router,node_transition_service,node_state_machine,node_payment_store,node_transition_log_store toneAmber
class node_vault_api,node_vault_service,node_vault_store toneMint
class node_operations_records toneRose
```

## Components

### Merchant access

- [Authentication API](https://github.com/vivekawas-web/razorpayclone/blob/main/src/main/java/com/projectsByVivek/razorPayM/merchantService/controller/AuthController.java): `src/main/java/com/projectsByVivek/razorPayM/merchantService/controller/AuthController.java`
- [Authentication service](https://github.com/vivekawas-web/razorpayclone/blob/main/src/main/java/com/projectsByVivek/razorPayM/merchantService/service/impl/AuthServiceImpl.java): `src/main/java/com/projectsByVivek/razorPayM/merchantService/service/impl/AuthServiceImpl.java`
- [Merchant records](https://github.com/vivekawas-web/razorpayclone/blob/main/src/main/java/com/projectsByVivek/razorPayM/merchantService/repository/MerchantRepository.java): `src/main/java/com/projectsByVivek/razorPayM/merchantService/repository/MerchantRepository.java`
- [User records](https://github.com/vivekawas-web/razorpayclone/blob/main/src/main/java/com/projectsByVivek/razorPayM/merchantService/repository/AppUserRepository.java): `src/main/java/com/projectsByVivek/razorPayM/merchantService/repository/AppUserRepository.java`
- [JWT issuance](https://github.com/vivekawas-web/razorpayclone/blob/main/src/main/java/com/projectsByVivek/razorPayM/merchantService/security/JwtUtil.java): `src/main/java/com/projectsByVivek/razorPayM/merchantService/security/JwtUtil.java`
- [API key API](https://github.com/vivekawas-web/razorpayclone/blob/main/src/main/java/com/projectsByVivek/razorPayM/merchantService/controller/ApiKeyController.java): `src/main/java/com/projectsByVivek/razorPayM/merchantService/controller/ApiKeyController.java`
- [API key service](https://github.com/vivekawas-web/razorpayclone/blob/main/src/main/java/com/projectsByVivek/razorPayM/merchantService/service/impl/ApiKeyServiceImpl.java): `src/main/java/com/projectsByVivek/razorPayM/merchantService/service/impl/ApiKeyServiceImpl.java`
- [API key records](https://github.com/vivekawas-web/razorpayclone/blob/main/src/main/java/com/projectsByVivek/razorPayM/merchantService/repository/ApiKeyRepository.java): `src/main/java/com/projectsByVivek/razorPayM/merchantService/repository/ApiKeyRepository.java`

### Payment processing

- [Order API](https://github.com/vivekawas-web/razorpayclone/blob/main/src/main/java/com/projectsByVivek/razorPayM/paymentService/controller/OrderController.java): `src/main/java/com/projectsByVivek/razorPayM/paymentService/controller/OrderController.java`
- [Order service](https://github.com/vivekawas-web/razorpayclone/blob/main/src/main/java/com/projectsByVivek/razorPayM/paymentService/service/impl/OrderServiceImpl.java): `src/main/java/com/projectsByVivek/razorPayM/paymentService/service/impl/OrderServiceImpl.java`
- [Payment API](https://github.com/vivekawas-web/razorpayclone/blob/main/src/main/java/com/projectsByVivek/razorPayM/paymentService/controller/paymentController.java): `src/main/java/com/projectsByVivek/razorPayM/paymentService/controller/paymentController.java`
- [Payment service](https://github.com/vivekawas-web/razorpayclone/blob/main/src/main/java/com/projectsByVivek/razorPayM/paymentService/service/impl/PaymentServiceImpl.java): `src/main/java/com/projectsByVivek/razorPayM/paymentService/service/impl/PaymentServiceImpl.java`
- [Processor routing](https://github.com/vivekawas-web/razorpayclone/blob/main/src/main/java/com/projectsByVivek/razorPayM/paymentService/processor/PaymentProcessorRouter.java): `src/main/java/com/projectsByVivek/razorPayM/paymentService/processor/PaymentProcessorRouter.java`
- [Gateway routing](https://github.com/vivekawas-web/razorpayclone/blob/main/src/main/java/com/projectsByVivek/razorPayM/paymentService/gateway/PaymentGatewayRouter.java): `src/main/java/com/projectsByVivek/razorPayM/paymentService/gateway/PaymentGatewayRouter.java`
- [State transitions](https://github.com/vivekawas-web/razorpayclone/blob/main/src/main/java/com/projectsByVivek/razorPayM/paymentService/stateMachine/PaymentTransitionService.java): `src/main/java/com/projectsByVivek/razorPayM/paymentService/stateMachine/PaymentTransitionService.java`
- [Payment state machine](https://github.com/vivekawas-web/razorpayclone/blob/main/src/main/java/com/projectsByVivek/razorPayM/paymentService/stateMachine/PaymentStateMachine.java): `src/main/java/com/projectsByVivek/razorPayM/paymentService/stateMachine/PaymentStateMachine.java`
- [Payment records](https://github.com/vivekawas-web/razorpayclone/blob/main/src/main/java/com/projectsByVivek/razorPayM/paymentService/repository/PaymentRepository.java): `src/main/java/com/projectsByVivek/razorPayM/paymentService/repository/PaymentRepository.java`
- [Transition logs](https://github.com/vivekawas-web/razorpayclone/blob/main/src/main/java/com/projectsByVivek/razorPayM/paymentService/repository/PaymentTransitionLogRepository.java): `src/main/java/com/projectsByVivek/razorPayM/paymentService/repository/PaymentTransitionLogRepository.java`

### Card vault

- [Vault API](https://github.com/vivekawas-web/razorpayclone/blob/main/src/main/java/com/projectsByVivek/razorPayM/vaultService/controller/VaultController.java): `src/main/java/com/projectsByVivek/razorPayM/vaultService/controller/VaultController.java`
- [Vault service](https://github.com/vivekawas-web/razorpayclone/blob/main/src/main/java/com/projectsByVivek/razorPayM/vaultService/service/impl/VaultServiceImpl.java): `src/main/java/com/projectsByVivek/razorPayM/vaultService/service/impl/VaultServiceImpl.java`
- [Card token records](https://github.com/vivekawas-web/razorpayclone/blob/main/src/main/java/com/projectsByVivek/razorPayM/vaultService/repository/CardTokenRepository.java): `src/main/java/com/projectsByVivek/razorPayM/vaultService/repository/CardTokenRepository.java`

### Operations records

- [Settlement and webhook records](https://github.com/vivekawas-web/razorpayclone/blob/main/src/main/java/com/projectsByVivek/razorPayM/operationsService/entity/Settlement.java): `src/main/java/com/projectsByVivek/razorPayM/operationsService/entity/Settlement.java`

### Other components

- **Merchant client**

## Connections

- Merchant client → Authentication API: submits credentials
- Authentication API → Authentication service: calls auth
- Authentication service → Merchant records: checks and saves
- Authentication service → User records: saves and reads
- Authentication service → JWT issuance: generates token
- Merchant client → API key API: manages keys
- API key API → API key service: calls key service
- API key API → Order API: submits orders
- Order API → Order service: calls order service
- Merchant client → Payment API: initiates payment
- Payment API → Payment service: calls payment service
- State transitions → Payment state machine: computes transition
- State transitions → Transition logs: saves transition log
- Merchant client → Vault API: submits card
- Vault API → Vault service: tokenizes card
