# ritikkumar27/url-shortener-production-ready architecture

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

- Interactive diagram: https://gitdiagram.com/ritikkumar27/url-shortener-production-ready
- Repository: https://github.com/ritikkumar27/url-shortener-production-ready

## Overview

This is a NestJS URL-shortening API. Users can register or log in, create and manage short links, and resolve them through redirects; redirects submit click events for analytics. Link resolution uses Redis caching with PostgreSQL as the persistent store. The graph includes the documented-in-source authentication, link management, redirect, and analytics stages. Analytics worker behavior is represented, but its internal flow is uncertain because its source was not excerpted.

Main entry points: [`src/app.module.ts`](https://github.com/ritikkumar27/url-shortener-production-ready/blob/main/src/app.module.ts) (Nest application), [`src/modules/links/links.service.ts`](https://github.com/ritikkumar27/url-shortener-production-ready/blob/main/src/modules/links/links.service.ts) (Link operations), [`src/database/prisma.service.ts`](https://github.com/ritikkumar27/url-shortener-production-ready/blob/main/src/database/prisma.service.ts) (PostgreSQL access), [`src/modules/analytics/analytics.service.ts`](https://github.com/ritikkumar27/url-shortener-production-ready/blob/main/src/modules/analytics/analytics.service.ts) (Analytics queries)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_api["API and security"]
  node_app["Nest application<br/>[app.module.ts]"]
  node_guard["JWT guard<br/>[jwt-auth.guard.ts]"]
  node_auth_controller["Auth routes<br/>[auth.controller.ts]"]
  node_auth_service["Authentication<br/>[auth.service.ts]"]
  node_jwt_strategy["JWT strategy<br/>[jwt.strategy.ts]"]
  node_hello["Health greeting<br/>[app.service.ts]"]
end

subgraph group_links["Short links"]
  node_links_controller["Link routes"]
  node_links_service["Link operations<br/>[links.service.ts]"]
  node_redirect["Short-link redirect"]
  node_code_util["Code generation<br/>[base62.util.ts]"]
  node_url_util["URL validation<br/>[url-validator.ts]"]
end

subgraph group_analytics["Click analytics"]
  node_analytics_controller["Analytics routes"]
  node_analytics_service["Analytics queries"]
  node_analytics_worker["Click worker"]
end

subgraph group_infra["Persistence and cache"]
  node_redis["Link cache<br/>[redis.service.ts]"]
  node_prisma[("PostgreSQL access<br/>[prisma.service.ts]")]
end

node_user(("API client"))

node_user -->|"sends requests"| node_app
node_app -->|"registers routes"| node_auth_controller
node_app -->|"registers routes"| node_links_controller
node_app -->|"registers routes"| node_analytics_controller
node_app -->|"installs guard"| node_guard
node_auth_controller -->|"calls"| node_auth_service
node_auth_service -->|"reads and writes users"| node_prisma
node_jwt_strategy -->|"loads user"| node_prisma
node_links_controller -->|"calls"| node_links_service
node_links_service -->|"reads and writes links"| node_prisma
node_links_service -->|"reads and updates cache"| node_redis
node_links_service -->|"generates codes"| node_code_util
node_links_service -->|"validates URLs"| node_url_util
node_redirect -->|"resolves code"| node_links_service
node_redirect -->|"submits click"| node_analytics_service
node_analytics_controller -->|"calls"| node_analytics_service
node_analytics_service -->|"queries click data"| node_prisma
node_analytics_worker -->|"writes click data"| node_prisma
node_app -->|"provides greeting"| node_hello

click node_app "https://github.com/ritikkumar27/url-shortener-production-ready/blob/main/src/app.module.ts"
click node_guard "https://github.com/ritikkumar27/url-shortener-production-ready/blob/main/src/common/guards/jwt-auth.guard.ts"
click node_auth_controller "https://github.com/ritikkumar27/url-shortener-production-ready/blob/main/src/modules/auth/auth.controller.ts"
click node_auth_service "https://github.com/ritikkumar27/url-shortener-production-ready/blob/main/src/modules/auth/auth.service.ts"
click node_jwt_strategy "https://github.com/ritikkumar27/url-shortener-production-ready/blob/main/src/modules/auth/strategies/jwt.strategy.ts"
click node_links_controller "https://github.com/ritikkumar27/url-shortener-production-ready/blob/main/src/modules/links/links.controller.ts"
click node_links_service "https://github.com/ritikkumar27/url-shortener-production-ready/blob/main/src/modules/links/links.service.ts"
click node_redirect "https://github.com/ritikkumar27/url-shortener-production-ready/blob/main/src/modules/links/redirect.controller.ts"
click node_code_util "https://github.com/ritikkumar27/url-shortener-production-ready/blob/main/src/utils/base62.util.ts"
click node_url_util "https://github.com/ritikkumar27/url-shortener-production-ready/blob/main/src/utils/url-validator.ts"
click node_analytics_controller "https://github.com/ritikkumar27/url-shortener-production-ready/blob/main/src/modules/analytics/analytics.controller.ts"
click node_analytics_service "https://github.com/ritikkumar27/url-shortener-production-ready/blob/main/src/modules/analytics/analytics.service.ts"
click node_analytics_worker "https://github.com/ritikkumar27/url-shortener-production-ready/blob/main/src/modules/analytics/analytics.processor.ts"
click node_redis "https://github.com/ritikkumar27/url-shortener-production-ready/blob/main/src/modules/redis/redis.service.ts"
click node_prisma "https://github.com/ritikkumar27/url-shortener-production-ready/blob/main/src/database/prisma.service.ts"
click node_hello "https://github.com/ritikkumar27/url-shortener-production-ready/blob/main/src/app.service.ts"

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_app,node_guard,node_auth_controller,node_auth_service,node_jwt_strategy,node_hello,node_user toneBlue
class node_links_controller,node_links_service,node_redirect,node_code_util,node_url_util toneAmber
class node_analytics_controller,node_analytics_service,node_analytics_worker toneMint
class node_redis,node_prisma toneRose
```

## Components

### API and security

- [Nest application](https://github.com/ritikkumar27/url-shortener-production-ready/blob/main/src/app.module.ts): `src/app.module.ts`
- [JWT guard](https://github.com/ritikkumar27/url-shortener-production-ready/blob/main/src/common/guards/jwt-auth.guard.ts): `src/common/guards/jwt-auth.guard.ts`
- [Auth routes](https://github.com/ritikkumar27/url-shortener-production-ready/blob/main/src/modules/auth/auth.controller.ts): `src/modules/auth/auth.controller.ts`
- [Authentication](https://github.com/ritikkumar27/url-shortener-production-ready/blob/main/src/modules/auth/auth.service.ts): `src/modules/auth/auth.service.ts`
- [JWT strategy](https://github.com/ritikkumar27/url-shortener-production-ready/blob/main/src/modules/auth/strategies/jwt.strategy.ts): `src/modules/auth/strategies/jwt.strategy.ts`
- [Health greeting](https://github.com/ritikkumar27/url-shortener-production-ready/blob/main/src/app.service.ts): `src/app.service.ts`

### Short links

- [Link routes](https://github.com/ritikkumar27/url-shortener-production-ready/blob/main/src/modules/links/links.controller.ts): `src/modules/links/links.controller.ts`
- [Link operations](https://github.com/ritikkumar27/url-shortener-production-ready/blob/main/src/modules/links/links.service.ts): `src/modules/links/links.service.ts`
- [Short-link redirect](https://github.com/ritikkumar27/url-shortener-production-ready/blob/main/src/modules/links/redirect.controller.ts): `src/modules/links/redirect.controller.ts`
- [Code generation](https://github.com/ritikkumar27/url-shortener-production-ready/blob/main/src/utils/base62.util.ts): `src/utils/base62.util.ts`
- [URL validation](https://github.com/ritikkumar27/url-shortener-production-ready/blob/main/src/utils/url-validator.ts): `src/utils/url-validator.ts`

### Click analytics

- [Analytics routes](https://github.com/ritikkumar27/url-shortener-production-ready/blob/main/src/modules/analytics/analytics.controller.ts): `src/modules/analytics/analytics.controller.ts`
- [Analytics queries](https://github.com/ritikkumar27/url-shortener-production-ready/blob/main/src/modules/analytics/analytics.service.ts): `src/modules/analytics/analytics.service.ts`
- [Click worker](https://github.com/ritikkumar27/url-shortener-production-ready/blob/main/src/modules/analytics/analytics.processor.ts): `src/modules/analytics/analytics.processor.ts`

### Persistence and cache

- [Link cache](https://github.com/ritikkumar27/url-shortener-production-ready/blob/main/src/modules/redis/redis.service.ts): `src/modules/redis/redis.service.ts`
- [PostgreSQL access](https://github.com/ritikkumar27/url-shortener-production-ready/blob/main/src/database/prisma.service.ts): `src/database/prisma.service.ts`

### Other components

- **API client**

## Connections

- API client → Nest application: sends requests
- Nest application → Auth routes: registers routes (evidence: `src/app.module.ts`)
- Nest application → Link routes: registers routes (evidence: `src/app.module.ts`)
- Nest application → Analytics routes: registers routes (evidence: `src/app.module.ts`)
- Nest application → JWT guard: installs guard (evidence: `src/app.module.ts`)
- Auth routes → Authentication: calls (evidence: `src/modules/auth/auth.controller.ts`)
- Authentication → PostgreSQL access: reads and writes users (evidence: `src/modules/auth/auth.service.ts`)
- JWT strategy → PostgreSQL access: loads user (evidence: `src/modules/auth/strategies/jwt.strategy.ts`)
- Link routes → Link operations: calls (evidence: `src/modules/links/links.controller.ts`)
- Link operations → PostgreSQL access: reads and writes links (evidence: `src/modules/links/links.service.ts`)
- Link operations → Link cache: reads and updates cache (evidence: `src/modules/links/links.service.ts`)
- Link operations → Code generation: generates codes (evidence: `src/modules/links/links.service.ts`)
- Link operations → URL validation: validates URLs (evidence: `src/modules/links/links.service.ts`)
- Short-link redirect → Link operations: resolves code (evidence: `src/modules/links/redirect.controller.ts`)
- Short-link redirect → Analytics queries: submits click (evidence: `src/modules/links/redirect.controller.ts`)
- Analytics routes → Analytics queries: calls (evidence: `src/modules/analytics/analytics.controller.ts`)
- Analytics queries → PostgreSQL access: queries click data (evidence: `src/modules/analytics/analytics.service.ts`)
- Click worker → PostgreSQL access: writes click data (evidence: `src/modules/analytics/analytics.processor.ts`)
- Nest application → Health greeting: provides greeting (evidence: `src/app.module.ts`)
