# ayushmancodes2004/irctc architecture

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

- Interactive diagram: https://gitdiagram.com/ayushmancodes2004/irctc
- Repository: https://github.com/ayushmancodes2004/irctc

## Overview

This repository contains two Spring services: User-Service handles account registration, OTP verification, login, refresh tokens, and OAuth identity; Admin-Service manages stations and train definitions. The main user flow is an HTTP request through an auth endpoint into authentication logic, with OTP/session state and user records handled by supporting services. The admin flow creates stations or trains, persists them through repositories, and publishes creation events. Evidence is limited to the supplied excerpts and SOURCE INDEX; unsampled routes and infrastructure wiring are not inferred.

Main entry points: [`User-Service/src/main/java/com/irctc/userservice/service/AuthService.java`](https://github.com/ayushmancodes2004/irctc/blob/main/User-Service/src/main/java/com/irctc/userservice/service/AuthService.java) (Auth workflows), [`Admin-Service/src/main/java/com/irctc/adminservice/Service/StationService.java`](https://github.com/ayushmancodes2004/irctc/blob/main/Admin-Service/src/main/java/com/irctc/adminservice/Service/StationService.java) (Station creation), [`Admin-Service/src/main/java/com/irctc/adminservice/Service/TrainService.java`](https://github.com/ayushmancodes2004/irctc/blob/main/Admin-Service/src/main/java/com/irctc/adminservice/Service/TrainService.java) (Train creation), [`User-Service/src/main/java/com/irctc/userservice/repository/UserRepository.java`](https://github.com/ayushmancodes2004/irctc/blob/main/User-Service/src/main/java/com/irctc/userservice/repository/UserRepository.java) (User repository)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_identity["Identity and access"]
  node_auth_api["Auth endpoints"]
  node_auth_logic["Auth workflows<br/>[AuthService.java]"]
  node_otp["OTP verification<br/>[OtpService.java]"]
  node_oauth["OAuth identities"]
  node_oidc["OIDC integration"]
  node_fingerprint["Device fingerprint"]
  node_jwt["JWT utilities<br/>[JwtUtil.java]"]
  node_sessions["Refresh sessions"]
end

subgraph group_admin["Railway administration"]
  node_station_api["Station endpoint"]
  node_station_logic["Station creation"]
  node_station_repo["Station repository"]
  node_train_api["Train endpoint"]
  node_train_logic["Train creation<br/>[TrainService.java]"]
  node_train_repo["Train repository"]
end

subgraph group_domain["Domain data"]
  node_user_store[("User records<br/>[User.java]")]
  node_user_repository["User repository"]
  node_station_entity[("Station data<br/>[Station.java]")]
  node_train_entity[("Train, route, seats<br/>[Train.java]")]
end

subgraph group_integrations["External integrations"]
  node_redis[("Redis")]
  node_kafka["Kafka events"]
end

node_user(("User"))
node_admin(("Admin"))

node_user -->|"sends requests"| node_auth_api
node_auth_api -->|"dispatches auth"| node_auth_logic
node_auth_logic -->|"requests OTP"| node_otp
node_auth_logic -->|"reads and saves"| node_user_repository
node_auth_logic -->|"fingerprints device"| node_fingerprint
node_auth_logic -->|"creates and parses"| node_jwt
node_auth_logic -->|"updates sessions"| node_sessions
node_sessions -->|"stores session state"| node_redis
node_otp -->|"stores OTP state"| node_redis
node_oidc -->|"delegates identity"| node_oauth
node_oauth -->|"reads and saves"| node_user_repository
node_user_repository -.->|"persists records"| node_user_store
node_admin -->|"creates station"| node_station_api
node_station_api -->|"dispatches creation"| node_station_logic
node_station_logic -->|"checks and saves"| node_station_repo
node_station_logic -->|"publishes event"| node_kafka
node_station_repo -->|"uses entity"| node_station_entity
node_admin -->|"creates train"| node_train_api
node_train_api -->|"dispatches creation"| node_train_logic
node_train_logic -->|"checks and saves"| node_train_repo
node_train_logic -->|"publishes event"| node_kafka
node_train_repo -->|"uses entity"| node_train_entity

click node_auth_api "https://github.com/ayushmancodes2004/irctc/blob/main/User-Service/src/main/java/com/irctc/userservice/controller/AuthController.java"
click node_auth_logic "https://github.com/ayushmancodes2004/irctc/blob/main/User-Service/src/main/java/com/irctc/userservice/service/AuthService.java"
click node_otp "https://github.com/ayushmancodes2004/irctc/blob/main/User-Service/src/main/java/com/irctc/userservice/service/OtpService.java"
click node_oauth "https://github.com/ayushmancodes2004/irctc/blob/main/User-Service/src/main/java/com/irctc/userservice/service/OAuth2UserService.java"
click node_oidc "https://github.com/ayushmancodes2004/irctc/blob/main/User-Service/src/main/java/com/irctc/userservice/Security/CustomOidcUserService.java"
click node_fingerprint "https://github.com/ayushmancodes2004/irctc/blob/main/User-Service/src/main/java/com/irctc/userservice/Security/DeviceFingerprintService.java"
click node_jwt "https://github.com/ayushmancodes2004/irctc/blob/main/User-Service/src/main/java/com/irctc/userservice/Security/JwtUtil.java"
click node_sessions "https://github.com/ayushmancodes2004/irctc/blob/main/User-Service/src/main/java/com/irctc/userservice/Security/TokenSessionService.java"
click node_user_store "https://github.com/ayushmancodes2004/irctc/blob/main/User-Service/src/main/java/com/irctc/userservice/entity/User.java"
click node_user_repository "https://github.com/ayushmancodes2004/irctc/blob/main/User-Service/src/main/java/com/irctc/userservice/repository/UserRepository.java"
click node_station_api "https://github.com/ayushmancodes2004/irctc/blob/main/Admin-Service/src/main/java/com/irctc/adminservice/Controller/StationController.java"
click node_station_logic "https://github.com/ayushmancodes2004/irctc/blob/main/Admin-Service/src/main/java/com/irctc/adminservice/Service/StationService.java"
click node_station_repo "https://github.com/ayushmancodes2004/irctc/blob/main/Admin-Service/src/main/java/com/irctc/adminservice/Repository/StationRepository.java"
click node_station_entity "https://github.com/ayushmancodes2004/irctc/blob/main/Admin-Service/src/main/java/com/irctc/adminservice/Entity/Station.java"
click node_train_api "https://github.com/ayushmancodes2004/irctc/blob/main/Admin-Service/src/main/java/com/irctc/adminservice/Controller/TrainController.java"
click node_train_logic "https://github.com/ayushmancodes2004/irctc/blob/main/Admin-Service/src/main/java/com/irctc/adminservice/Service/TrainService.java"
click node_train_repo "https://github.com/ayushmancodes2004/irctc/blob/main/Admin-Service/src/main/java/com/irctc/adminservice/Repository/TrainRepository.java"
click node_train_entity "https://github.com/ayushmancodes2004/irctc/blob/main/Admin-Service/src/main/java/com/irctc/adminservice/Entity/Train.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_logic,node_otp,node_oauth,node_oidc,node_fingerprint,node_jwt,node_sessions,node_user toneBlue
class node_station_api,node_station_logic,node_station_repo,node_train_api,node_train_logic,node_train_repo toneAmber
class node_user_store,node_user_repository,node_station_entity,node_train_entity toneMint
class node_redis,node_kafka toneRose
class node_admin toneIndigo
```

## Components

### Identity and access

- [Auth endpoints](https://github.com/ayushmancodes2004/irctc/blob/main/User-Service/src/main/java/com/irctc/userservice/controller/AuthController.java): `User-Service/src/main/java/com/irctc/userservice/controller/AuthController.java`
- [Auth workflows](https://github.com/ayushmancodes2004/irctc/blob/main/User-Service/src/main/java/com/irctc/userservice/service/AuthService.java): `User-Service/src/main/java/com/irctc/userservice/service/AuthService.java`
- [OTP verification](https://github.com/ayushmancodes2004/irctc/blob/main/User-Service/src/main/java/com/irctc/userservice/service/OtpService.java): `User-Service/src/main/java/com/irctc/userservice/service/OtpService.java`
- [OAuth identities](https://github.com/ayushmancodes2004/irctc/blob/main/User-Service/src/main/java/com/irctc/userservice/service/OAuth2UserService.java): `User-Service/src/main/java/com/irctc/userservice/service/OAuth2UserService.java`
- [OIDC integration](https://github.com/ayushmancodes2004/irctc/blob/main/User-Service/src/main/java/com/irctc/userservice/Security/CustomOidcUserService.java): `User-Service/src/main/java/com/irctc/userservice/Security/CustomOidcUserService.java`
- [Device fingerprint](https://github.com/ayushmancodes2004/irctc/blob/main/User-Service/src/main/java/com/irctc/userservice/Security/DeviceFingerprintService.java): `User-Service/src/main/java/com/irctc/userservice/Security/DeviceFingerprintService.java`
- [JWT utilities](https://github.com/ayushmancodes2004/irctc/blob/main/User-Service/src/main/java/com/irctc/userservice/Security/JwtUtil.java): `User-Service/src/main/java/com/irctc/userservice/Security/JwtUtil.java`
- [Refresh sessions](https://github.com/ayushmancodes2004/irctc/blob/main/User-Service/src/main/java/com/irctc/userservice/Security/TokenSessionService.java): `User-Service/src/main/java/com/irctc/userservice/Security/TokenSessionService.java`

### Railway administration

- [Station endpoint](https://github.com/ayushmancodes2004/irctc/blob/main/Admin-Service/src/main/java/com/irctc/adminservice/Controller/StationController.java): `Admin-Service/src/main/java/com/irctc/adminservice/Controller/StationController.java`
- [Station creation](https://github.com/ayushmancodes2004/irctc/blob/main/Admin-Service/src/main/java/com/irctc/adminservice/Service/StationService.java): `Admin-Service/src/main/java/com/irctc/adminservice/Service/StationService.java`
- [Station repository](https://github.com/ayushmancodes2004/irctc/blob/main/Admin-Service/src/main/java/com/irctc/adminservice/Repository/StationRepository.java): `Admin-Service/src/main/java/com/irctc/adminservice/Repository/StationRepository.java`
- [Train endpoint](https://github.com/ayushmancodes2004/irctc/blob/main/Admin-Service/src/main/java/com/irctc/adminservice/Controller/TrainController.java): `Admin-Service/src/main/java/com/irctc/adminservice/Controller/TrainController.java`
- [Train creation](https://github.com/ayushmancodes2004/irctc/blob/main/Admin-Service/src/main/java/com/irctc/adminservice/Service/TrainService.java): `Admin-Service/src/main/java/com/irctc/adminservice/Service/TrainService.java`
- [Train repository](https://github.com/ayushmancodes2004/irctc/blob/main/Admin-Service/src/main/java/com/irctc/adminservice/Repository/TrainRepository.java): `Admin-Service/src/main/java/com/irctc/adminservice/Repository/TrainRepository.java`

### Domain data

- [User records](https://github.com/ayushmancodes2004/irctc/blob/main/User-Service/src/main/java/com/irctc/userservice/entity/User.java): `User-Service/src/main/java/com/irctc/userservice/entity/User.java`
- [User repository](https://github.com/ayushmancodes2004/irctc/blob/main/User-Service/src/main/java/com/irctc/userservice/repository/UserRepository.java): `User-Service/src/main/java/com/irctc/userservice/repository/UserRepository.java`
- [Station data](https://github.com/ayushmancodes2004/irctc/blob/main/Admin-Service/src/main/java/com/irctc/adminservice/Entity/Station.java): `Admin-Service/src/main/java/com/irctc/adminservice/Entity/Station.java`
- [Train, route, seats](https://github.com/ayushmancodes2004/irctc/blob/main/Admin-Service/src/main/java/com/irctc/adminservice/Entity/Train.java): `Admin-Service/src/main/java/com/irctc/adminservice/Entity/Train.java`

### External integrations

- **Redis**
- **Kafka events**

### Other components

- **User**
- **Admin**

## Connections

- User → Auth endpoints: sends requests (evidence: `User-Service/src/main/java/com/irctc/userservice/controller/AuthController.java`)
- Auth endpoints → Auth workflows: dispatches auth (evidence: `User-Service/src/main/java/com/irctc/userservice/controller/AuthController.java`)
- Auth workflows → OTP verification: requests OTP (evidence: `User-Service/src/main/java/com/irctc/userservice/service/AuthService.java`)
- Auth workflows → User repository: reads and saves (evidence: `User-Service/src/main/java/com/irctc/userservice/service/AuthService.java`)
- Auth workflows → Device fingerprint: fingerprints device (evidence: `User-Service/src/main/java/com/irctc/userservice/service/AuthService.java`)
- Auth workflows → JWT utilities: creates and parses (evidence: `User-Service/src/main/java/com/irctc/userservice/service/AuthService.java`)
- Auth workflows → Refresh sessions: updates sessions (evidence: `User-Service/src/main/java/com/irctc/userservice/service/AuthService.java`)
- Refresh sessions → Redis: stores session state (evidence: `User-Service/src/main/java/com/irctc/userservice/Security/TokenSessionService.java`)
- OTP verification → Redis: stores OTP state (evidence: `User-Service/src/main/java/com/irctc/userservice/service/OtpService.java`)
- OIDC integration → OAuth identities: delegates identity (evidence: `User-Service/src/main/java/com/irctc/userservice/Security/CustomOidcUserService.java`)
- OAuth identities → User repository: reads and saves (evidence: `User-Service/src/main/java/com/irctc/userservice/service/OAuth2UserService.java`)
- User repository → User records: persists records (evidence: `User-Service/src/main/java/com/irctc/userservice/repository/UserRepository.java`)
- Admin → Station endpoint: creates station (evidence: `Admin-Service/src/main/java/com/irctc/adminservice/Controller/StationController.java`)
- Station endpoint → Station creation: dispatches creation (evidence: `Admin-Service/src/main/java/com/irctc/adminservice/Controller/StationController.java`)
- Station creation → Station repository: checks and saves (evidence: `Admin-Service/src/main/java/com/irctc/adminservice/Service/StationService.java`)
- Station creation → Kafka events: publishes event (evidence: `Admin-Service/src/main/java/com/irctc/adminservice/Service/StationService.java`)
- Station repository → Station data: uses entity (evidence: `Admin-Service/src/main/java/com/irctc/adminservice/Service/StationService.java`)
- Admin → Train endpoint: creates train (evidence: `Admin-Service/src/main/java/com/irctc/adminservice/Controller/TrainController.java`)
- Train endpoint → Train creation: dispatches creation (evidence: `Admin-Service/src/main/java/com/irctc/adminservice/Controller/TrainController.java`)
- Train creation → Train repository: checks and saves (evidence: `Admin-Service/src/main/java/com/irctc/adminservice/Service/TrainService.java`)
- Train creation → Kafka events: publishes event (evidence: `Admin-Service/src/main/java/com/irctc/adminservice/Service/TrainService.java`)
- Train repository → Train, route, seats: uses entity (evidence: `Admin-Service/src/main/java/com/irctc/adminservice/Repository/TrainRepository.java`)
