# asifstar135/shortify-server architecture

> Architecture diagram of the GitHub repository asifstar135/shortify-server, 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/asifstar135/shortify-server
- Repository: https://github.com/asifstar135/shortify-server

## Overview

Shortly is a Spring-based URL shortener with account management, cookie-based JWT authentication, URL administration, redirects, and visit analytics. The main flow is a user creating a short link, then a visitor resolving it; the redirect endpoint also dispatches analytics collection. Account flows include registration/login and email-based password reset. The graph reflects sampled service/controller calls and repository query capabilities; analytics internals and security wiring beyond the sampled filter/config files are not expanded.

Main entry points: [`src/main/java/com/shortly/Services/UserService.java`](https://github.com/asifstar135/shortify-server/blob/main/src/main/java/com/shortly/Services/UserService.java) (User Service), [`src/main/java/com/shortly/Services/UrlService.java`](https://github.com/asifstar135/shortify-server/blob/main/src/main/java/com/shortly/Services/UrlService.java) (URL Service), [`src/main/java/com/shortly/Controllers/UrlController.java`](https://github.com/asifstar135/shortify-server/blob/main/src/main/java/com/shortly/Controllers/UrlController.java) (URL Controller), [`src/main/java/com/shortly/Controllers/UserController.java`](https://github.com/asifstar135/shortify-server/blob/main/src/main/java/com/shortly/Controllers/UserController.java) (User Controller)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_api["HTTP API"]
  node_url_controller["URL Controller<br/>[UrlController.java]"]
  node_user_controller["User Controller"]
  node_responses["Response Handler"]
end

subgraph group_accounts["Accounts and Security"]
  node_security_config["Security Config"]
  node_jwt_filter["JWT Filter<br/>[JwtFilter.java]"]
  node_jwt_service["JWT Service<br/>[JwtService.java]"]
  node_user_details["User Details"]
  node_user_service["User Service<br/>[UserService.java]"]
  node_email_engine["Email Engine<br/>[EmailEngine.java]"]
  node_code_generator["Code Generator<br/>[CodeGenerator.java]"]
  node_user_repo[("User Store<br/>[UserRepo.java]")]
  node_reset_repo[("Reset Token Store")]
end

subgraph group_links["Short Links"]
  node_url_service["URL Service<br/>[UrlService.java]"]
  node_url_repo[("URL Store<br/>[UrlRepo.java]")]
  node_base62["Base62 Encoding<br/>[UtilMethods.java]"]
end

subgraph group_analytics["Visit Analytics"]
  node_analytics["Analytics Collector<br/>[Analytics.java]"]
  node_visit_repo[("Visit Store<br/>[UrlVisitRepo.java]")]
end

node_user(("User"))
node_visitor(("Link Visitor"))
node_mail_service["Mail Service"]

node_user -->|"submits account requests"| node_user_controller
node_user_controller -->|"calls account operations"| node_user_service
node_user_service -->|"reads and writes users"| node_user_repo
node_user_service -->|"stores reset tokens"| node_reset_repo
node_user_service -->|"generates reset code"| node_code_generator
node_user_service -->|"sends reset code"| node_email_engine
node_email_engine -->|"sends email"| node_mail_service
node_user_service -->|"generates login token"| node_jwt_service
node_jwt_filter -->|"extracts and validates token"| node_jwt_service
node_jwt_filter -->|"loads token user"| node_user_details
node_user_details -->|"finds user"| node_user_repo
node_security_config -->|"configures filter"| node_jwt_filter
node_user_controller -->|"formats response"| node_responses
node_visitor -->|"requests short link"| node_url_controller
node_user -->|"manages links"| node_url_controller
node_url_controller -->|"dispatches URL operation"| node_url_service
node_url_service -->|"queries and persists links"| node_url_repo
node_url_service -->|"resolves link owner"| node_user_repo
node_url_service -->|"encodes link identifier"| node_base62
node_url_controller -->|"dispatches visit analysis"| node_analytics
node_url_controller -->|"returns redirect or API response"| node_responses
node_url_service -->|"reads visit summaries"| node_url_repo

click node_url_controller "https://github.com/asifstar135/shortify-server/blob/main/src/main/java/com/shortly/Controllers/UrlController.java"
click node_user_controller "https://github.com/asifstar135/shortify-server/blob/main/src/main/java/com/shortly/Controllers/UserController.java"
click node_responses "https://github.com/asifstar135/shortify-server/blob/main/src/main/java/com/shortly/Utils/ResponseHandler.java"
click node_security_config "https://github.com/asifstar135/shortify-server/blob/main/src/main/java/com/shortly/Config/SecurityConfig.java"
click node_jwt_filter "https://github.com/asifstar135/shortify-server/blob/main/src/main/java/com/shortly/Config/JwtFilter.java"
click node_jwt_service "https://github.com/asifstar135/shortify-server/blob/main/src/main/java/com/shortly/Services/JwtService.java"
click node_user_details "https://github.com/asifstar135/shortify-server/blob/main/src/main/java/com/shortly/Services/UserDetailService.java"
click node_user_service "https://github.com/asifstar135/shortify-server/blob/main/src/main/java/com/shortly/Services/UserService.java"
click node_email_engine "https://github.com/asifstar135/shortify-server/blob/main/src/main/java/com/shortly/Utils/EmailEngine.java"
click node_code_generator "https://github.com/asifstar135/shortify-server/blob/main/src/main/java/com/shortly/Utils/CodeGenerator.java"
click node_user_repo "https://github.com/asifstar135/shortify-server/blob/main/src/main/java/com/shortly/Repository/UserRepo.java"
click node_reset_repo "https://github.com/asifstar135/shortify-server/blob/main/src/main/java/com/shortly/Repository/ResetTokenRepo.java"
click node_url_service "https://github.com/asifstar135/shortify-server/blob/main/src/main/java/com/shortly/Services/UrlService.java"
click node_url_repo "https://github.com/asifstar135/shortify-server/blob/main/src/main/java/com/shortly/Repository/UrlRepo.java"
click node_base62 "https://github.com/asifstar135/shortify-server/blob/main/src/main/java/com/shortly/Utils/UtilMethods.java"
click node_analytics "https://github.com/asifstar135/shortify-server/blob/main/src/main/java/com/shortly/Utils/Analytics.java"
click node_visit_repo "https://github.com/asifstar135/shortify-server/blob/main/src/main/java/com/shortly/Repository/UrlVisitRepo.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_url_controller,node_user_controller,node_responses,node_user toneBlue
class node_security_config,node_jwt_filter,node_jwt_service,node_user_details,node_user_service,node_email_engine,node_code_generator,node_user_repo,node_reset_repo toneAmber
class node_url_service,node_url_repo,node_base62 toneMint
class node_analytics,node_visit_repo toneRose
class node_visitor,node_mail_service toneIndigo
```

## Components

### HTTP API

- [URL Controller](https://github.com/asifstar135/shortify-server/blob/main/src/main/java/com/shortly/Controllers/UrlController.java): `src/main/java/com/shortly/Controllers/UrlController.java`
- [User Controller](https://github.com/asifstar135/shortify-server/blob/main/src/main/java/com/shortly/Controllers/UserController.java): `src/main/java/com/shortly/Controllers/UserController.java`
- [Response Handler](https://github.com/asifstar135/shortify-server/blob/main/src/main/java/com/shortly/Utils/ResponseHandler.java): `src/main/java/com/shortly/Utils/ResponseHandler.java`

### Accounts and Security

- [Security Config](https://github.com/asifstar135/shortify-server/blob/main/src/main/java/com/shortly/Config/SecurityConfig.java): `src/main/java/com/shortly/Config/SecurityConfig.java`
- [JWT Filter](https://github.com/asifstar135/shortify-server/blob/main/src/main/java/com/shortly/Config/JwtFilter.java): `src/main/java/com/shortly/Config/JwtFilter.java`
- [JWT Service](https://github.com/asifstar135/shortify-server/blob/main/src/main/java/com/shortly/Services/JwtService.java): `src/main/java/com/shortly/Services/JwtService.java`
- [User Details](https://github.com/asifstar135/shortify-server/blob/main/src/main/java/com/shortly/Services/UserDetailService.java): `src/main/java/com/shortly/Services/UserDetailService.java`
- [User Service](https://github.com/asifstar135/shortify-server/blob/main/src/main/java/com/shortly/Services/UserService.java): `src/main/java/com/shortly/Services/UserService.java`
- [Email Engine](https://github.com/asifstar135/shortify-server/blob/main/src/main/java/com/shortly/Utils/EmailEngine.java): `src/main/java/com/shortly/Utils/EmailEngine.java`
- [Code Generator](https://github.com/asifstar135/shortify-server/blob/main/src/main/java/com/shortly/Utils/CodeGenerator.java): `src/main/java/com/shortly/Utils/CodeGenerator.java`
- [User Store](https://github.com/asifstar135/shortify-server/blob/main/src/main/java/com/shortly/Repository/UserRepo.java): `src/main/java/com/shortly/Repository/UserRepo.java`
- [Reset Token Store](https://github.com/asifstar135/shortify-server/blob/main/src/main/java/com/shortly/Repository/ResetTokenRepo.java): `src/main/java/com/shortly/Repository/ResetTokenRepo.java`

### Short Links

- [URL Service](https://github.com/asifstar135/shortify-server/blob/main/src/main/java/com/shortly/Services/UrlService.java): `src/main/java/com/shortly/Services/UrlService.java`
- [URL Store](https://github.com/asifstar135/shortify-server/blob/main/src/main/java/com/shortly/Repository/UrlRepo.java): `src/main/java/com/shortly/Repository/UrlRepo.java`
- [Base62 Encoding](https://github.com/asifstar135/shortify-server/blob/main/src/main/java/com/shortly/Utils/UtilMethods.java): `src/main/java/com/shortly/Utils/UtilMethods.java`

### Visit Analytics

- [Analytics Collector](https://github.com/asifstar135/shortify-server/blob/main/src/main/java/com/shortly/Utils/Analytics.java): `src/main/java/com/shortly/Utils/Analytics.java`
- [Visit Store](https://github.com/asifstar135/shortify-server/blob/main/src/main/java/com/shortly/Repository/UrlVisitRepo.java): `src/main/java/com/shortly/Repository/UrlVisitRepo.java`

### Other components

- **User**
- **Link Visitor**
- **Mail Service**

## Connections

- User → User Controller: submits account requests
- User Controller → User Service: calls account operations
- User Service → User Store: reads and writes users
- User Service → Reset Token Store: stores reset tokens
- User Service → Code Generator: generates reset code
- User Service → Email Engine: sends reset code
- Email Engine → Mail Service: sends email
- User Service → JWT Service: generates login token
- JWT Filter → JWT Service: extracts and validates token
- JWT Filter → User Details: loads token user
- User Details → User Store: finds user
- Security Config → JWT Filter: configures filter
- User Controller → Response Handler: formats response
- Link Visitor → URL Controller: requests short link
- User → URL Controller: manages links
- URL Controller → URL Service: dispatches URL operation
- URL Service → URL Store: queries and persists links
- URL Service → User Store: resolves link owner
- URL Service → Base62 Encoding: encodes link identifier
- URL Controller → Analytics Collector: dispatches visit analysis
- URL Controller → Response Handler: returns redirect or API response
- URL Service → URL Store: reads visit summaries
