# shanks216/virtual-stock-trading-app architecture

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

- Interactive diagram: https://gitdiagram.com/shanks216/virtual-stock-trading-app
- Repository: https://github.com/shanks216/virtual-stock-trading-app

## Overview

This Spring Boot backend exposes registration and login, stores user credentials through a JPA repository, and issues JWTs for stateless authentication. For protected requests, the security filter extracts and validates a bearer token, loads the user, and sets the Spring Security context before request handling. The README also documents CORS support and secure REST APIs. No trading, portfolio, or transaction workflow is implemented in the listed source. Database configuration and CORS implementation details are not shown in the sampled source.

Main entry points: [`src/main/java/com/virtualtrader/backend/service/AuthService.java`](https://github.com/shanks216/virtual-stock-trading-app/blob/main/src/main/java/com/virtualtrader/backend/service/AuthService.java) (Auth service), [`src/main/java/com/virtualtrader/backend/controller/AuthController.java`](https://github.com/shanks216/virtual-stock-trading-app/blob/main/src/main/java/com/virtualtrader/backend/controller/AuthController.java) (Auth controller), [`src/main/java/com/virtualtrader/backend/config/SecurityConfig.java`](https://github.com/shanks216/virtual-stock-trading-app/blob/main/src/main/java/com/virtualtrader/backend/config/SecurityConfig.java) (Security filter chain), [`src/main/java/com/virtualtrader/backend/repository/UserRepository.java`](https://github.com/shanks216/virtual-stock-trading-app/blob/main/src/main/java/com/virtualtrader/backend/repository/UserRepository.java) (User repository)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_api["Authentication API"]
  node_auth_controller["Auth controller"]
  node_auth_requests["Login and registration DTOs<br/>[LoginRequest.java]"]
  node_auth_response["Token response DTO<br/>[AuthResponse.java]"]
end

subgraph group_identity["Identity and Security"]
  node_auth_service["Auth service<br/>[AuthService.java]"]
  node_password_encoder["BCrypt encoder"]
  node_jwt_service["JWT service<br/>[JwtService.java]"]
  node_jwt_filter["JWT filter"]
  node_user_details["User details service"]
  node_auth_provider["Authentication provider"]
  node_security_config["Security filter chain"]
  node_cors_config["CORS configuration<br/>[CorsConfig.java]"]
end

subgraph group_persistence["User Persistence"]
  node_user_repository["User repository"]
  node_user_entity["User entity<br/>[User.java]"]
end

node_client(("Frontend client"))
node_database[("JPA database")]
node_application["Spring Boot application"]

node_client -->|"submits auth requests"| node_auth_controller
node_auth_controller -->|"accepts request models"| node_auth_requests
node_auth_controller -->|"delegates authentication"| node_auth_service
node_auth_service -->|"returns token data"| node_auth_response
node_auth_controller -->|"returns auth response"| node_client
node_auth_service -->|"looks up and saves users"| node_user_repository
node_auth_service -->|"encodes and checks passwords"| node_password_encoder
node_auth_service -->|"generates login token"| node_jwt_service
node_security_config -->|"registers filter"| node_jwt_filter
node_security_config -->|"configures provider"| node_auth_provider
node_security_config -.->|"enables CORS support"| node_cors_config
node_jwt_filter -->|"extracts and validates token"| node_jwt_service
node_jwt_filter -->|"loads authenticated user"| node_user_details
node_user_details -->|"finds user by name"| node_user_repository
node_auth_provider -->|"loads user details"| node_user_details
node_auth_provider -->|"checks credentials"| node_password_encoder
node_user_repository -->|"maps user records"| node_user_entity
node_user_repository -->|"reads and writes users"| node_database
node_application -->|"starts configured app"| node_security_config

click node_auth_controller "https://github.com/shanks216/virtual-stock-trading-app/blob/main/src/main/java/com/virtualtrader/backend/controller/AuthController.java"
click node_auth_requests "https://github.com/shanks216/virtual-stock-trading-app/blob/main/src/main/java/com/virtualtrader/backend/dto/LoginRequest.java"
click node_auth_response "https://github.com/shanks216/virtual-stock-trading-app/blob/main/src/main/java/com/virtualtrader/backend/dto/AuthResponse.java"
click node_auth_service "https://github.com/shanks216/virtual-stock-trading-app/blob/main/src/main/java/com/virtualtrader/backend/service/AuthService.java"
click node_password_encoder "https://github.com/shanks216/virtual-stock-trading-app/blob/main/src/main/java/com/virtualtrader/backend/config/ApplicationConfig.java"
click node_jwt_service "https://github.com/shanks216/virtual-stock-trading-app/blob/main/src/main/java/com/virtualtrader/backend/security/JwtService.java"
click node_jwt_filter "https://github.com/shanks216/virtual-stock-trading-app/blob/main/src/main/java/com/virtualtrader/backend/security/JwtAuthenticationFilter.java"
click node_user_details "https://github.com/shanks216/virtual-stock-trading-app/blob/main/src/main/java/com/virtualtrader/backend/config/ApplicationConfig.java"
click node_auth_provider "https://github.com/shanks216/virtual-stock-trading-app/blob/main/src/main/java/com/virtualtrader/backend/config/ApplicationConfig.java"
click node_security_config "https://github.com/shanks216/virtual-stock-trading-app/blob/main/src/main/java/com/virtualtrader/backend/config/SecurityConfig.java"
click node_cors_config "https://github.com/shanks216/virtual-stock-trading-app/blob/main/src/main/java/com/virtualtrader/backend/config/CorsConfig.java"
click node_user_repository "https://github.com/shanks216/virtual-stock-trading-app/blob/main/src/main/java/com/virtualtrader/backend/repository/UserRepository.java"
click node_user_entity "https://github.com/shanks216/virtual-stock-trading-app/blob/main/src/main/java/com/virtualtrader/backend/entity/User.java"
click node_application "https://github.com/shanks216/virtual-stock-trading-app/blob/main/src/main/java/com/virtualtrader/backend/BackendApplication.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_controller,node_auth_requests,node_auth_response,node_client toneBlue
class node_auth_service,node_password_encoder,node_jwt_service,node_jwt_filter,node_user_details,node_auth_provider,node_security_config,node_cors_config,node_database toneAmber
class node_user_repository,node_user_entity toneMint
class node_application toneTeal
```

## Components

### Authentication API

- [Auth controller](https://github.com/shanks216/virtual-stock-trading-app/blob/main/src/main/java/com/virtualtrader/backend/controller/AuthController.java): `src/main/java/com/virtualtrader/backend/controller/AuthController.java`
- [Login and registration DTOs](https://github.com/shanks216/virtual-stock-trading-app/blob/main/src/main/java/com/virtualtrader/backend/dto/LoginRequest.java): `src/main/java/com/virtualtrader/backend/dto/LoginRequest.java`
- [Token response DTO](https://github.com/shanks216/virtual-stock-trading-app/blob/main/src/main/java/com/virtualtrader/backend/dto/AuthResponse.java): `src/main/java/com/virtualtrader/backend/dto/AuthResponse.java`

### Identity and Security

- [Auth service](https://github.com/shanks216/virtual-stock-trading-app/blob/main/src/main/java/com/virtualtrader/backend/service/AuthService.java): `src/main/java/com/virtualtrader/backend/service/AuthService.java`
- [BCrypt encoder](https://github.com/shanks216/virtual-stock-trading-app/blob/main/src/main/java/com/virtualtrader/backend/config/ApplicationConfig.java): `src/main/java/com/virtualtrader/backend/config/ApplicationConfig.java`
- [JWT service](https://github.com/shanks216/virtual-stock-trading-app/blob/main/src/main/java/com/virtualtrader/backend/security/JwtService.java): `src/main/java/com/virtualtrader/backend/security/JwtService.java`
- [JWT filter](https://github.com/shanks216/virtual-stock-trading-app/blob/main/src/main/java/com/virtualtrader/backend/security/JwtAuthenticationFilter.java): `src/main/java/com/virtualtrader/backend/security/JwtAuthenticationFilter.java`
- [User details service](https://github.com/shanks216/virtual-stock-trading-app/blob/main/src/main/java/com/virtualtrader/backend/config/ApplicationConfig.java): `src/main/java/com/virtualtrader/backend/config/ApplicationConfig.java`
- [Authentication provider](https://github.com/shanks216/virtual-stock-trading-app/blob/main/src/main/java/com/virtualtrader/backend/config/ApplicationConfig.java): `src/main/java/com/virtualtrader/backend/config/ApplicationConfig.java`
- [Security filter chain](https://github.com/shanks216/virtual-stock-trading-app/blob/main/src/main/java/com/virtualtrader/backend/config/SecurityConfig.java): `src/main/java/com/virtualtrader/backend/config/SecurityConfig.java`
- [CORS configuration](https://github.com/shanks216/virtual-stock-trading-app/blob/main/src/main/java/com/virtualtrader/backend/config/CorsConfig.java): `src/main/java/com/virtualtrader/backend/config/CorsConfig.java`

### User Persistence

- [User repository](https://github.com/shanks216/virtual-stock-trading-app/blob/main/src/main/java/com/virtualtrader/backend/repository/UserRepository.java): `src/main/java/com/virtualtrader/backend/repository/UserRepository.java`
- [User entity](https://github.com/shanks216/virtual-stock-trading-app/blob/main/src/main/java/com/virtualtrader/backend/entity/User.java): `src/main/java/com/virtualtrader/backend/entity/User.java`

### Other components

- **Frontend client**
- **JPA database**
- [Spring Boot application](https://github.com/shanks216/virtual-stock-trading-app/blob/main/src/main/java/com/virtualtrader/backend/BackendApplication.java): `src/main/java/com/virtualtrader/backend/BackendApplication.java`

## Connections

- Frontend client → Auth controller: submits auth requests
- Auth controller → Login and registration DTOs: accepts request models
- Auth controller → Auth service: delegates authentication
- Auth service → Token response DTO: returns token data
- Auth controller → Frontend client: returns auth response
- Auth service → User repository: looks up and saves users
- Auth service → BCrypt encoder: encodes and checks passwords
- Auth service → JWT service: generates login token
- Security filter chain → JWT filter: registers filter
- Security filter chain → Authentication provider: configures provider
- Security filter chain → CORS configuration: enables CORS support
- JWT filter → JWT service: extracts and validates token
- JWT filter → User details service: loads authenticated user
- User details service → User repository: finds user by name
- Authentication provider → User details service: loads user details
- Authentication provider → BCrypt encoder: checks credentials
- User repository → User entity: maps user records
- User repository → JPA database: reads and writes users
- Spring Boot application → Security filter chain: starts configured app
