# lakshygupta/blog-app-apis architecture

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

- Interactive diagram: https://gitdiagram.com/lakshygupta/blog-app-apis
- Repository: https://github.com/lakshygupta/blog-app-apis

## Overview

This is a Spring Boot REST backend for managing blog users, posts, categories, and comments. The principal workflow is a client request to an API controller, through domain services, to persistence, with DTOs returned as responses. Post operations include category/user association, keyword search, pagination and sorting; image upload and serving form a separate file workflow. Authentication supports registration and JWT login, with role-based access and centralized exception handling. Post, user, and auth wiring is visible in sampled source; category/comment implementation details are represented from the tree and README, so their internal links are omitted.

Main entry points: [`src/main/java/com/lakshy/blog/controllers/AuthController.java`](https://github.com/lakshygupta/blog-app-apis/blob/main/src/main/java/com/lakshy/blog/controllers/AuthController.java) (Auth API), [`src/main/java/com/lakshy/blog/controllers/PostController.java`](https://github.com/lakshygupta/blog-app-apis/blob/main/src/main/java/com/lakshy/blog/controllers/PostController.java) (Post API), [`src/main/java/com/lakshy/blog/repositories/PostRepo.java`](https://github.com/lakshygupta/blog-app-apis/blob/main/src/main/java/com/lakshy/blog/repositories/PostRepo.java) (JPA Repositories), [`src/main/java/com/lakshy/blog/exceptions/GlobalExceptionHandler.java`](https://github.com/lakshygupta/blog-app-apis/blob/main/src/main/java/com/lakshy/blog/exceptions/GlobalExceptionHandler.java) (Exception Handler)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_api["REST API"]
  node_post_api["Post API"]
  node_category_api["Category API"]
  node_comment_api["Comment API"]
  node_user_api["User API"]
  node_auth_api["Auth API"]
end

subgraph group_domain["Blog Domain"]
  node_post_service["Post Service"]
  node_category_service["Category Service"]
  node_comment_service["Comment Service"]
  node_user_service["User Service"]
  node_repositories["JPA Repositories<br/>[PostRepo.java]"]
  node_database[("MySQL Database")]
end

subgraph group_identity["Identity &amp; Security"]
  node_auth_security["JWT Security"]
  node_user_details["User Details"]
  node_security_filter["JWT Filter"]
  node_security_config["Security Config"]
end

subgraph group_support["Files &amp; Errors"]
  node_file_service["Image Files"]
  node_file_store[("Image Storage")]
  node_exception_handler["Exception Handler"]
end

node_client(("API Client"))

node_client -->|"sends requests"| node_post_api
node_client -->|"sends requests"| node_category_api
node_client -->|"sends requests"| node_comment_api
node_client -->|"sends requests"| node_user_api
node_client -->|"sends requests"| node_auth_api
node_post_api -->|"calls"| node_post_service
node_post_service -->|"reads/writes"| node_repositories
node_repositories -->|"persists"| node_database
node_user_api -->|"calls"| node_user_service
node_user_service -->|"reads/writes"| node_repositories
node_auth_api -->|"registers"| node_user_service
node_auth_api -->|"loads user"| node_user_details
node_user_details -->|"looks up user"| node_repositories
node_auth_api -->|"creates token"| node_auth_security
node_auth_api -.->|"returns token"| node_security_filter
node_security_config -.->|"configures"| node_security_filter
node_post_api -->|"uploads/reads"| node_file_service
node_file_service -->|"reads/writes"| node_file_store
node_post_api -.->|"raises handled errors"| node_exception_handler
node_category_api -.->|"raises handled errors"| node_exception_handler
node_comment_api -.->|"raises handled errors"| node_exception_handler
node_user_api -.->|"raises handled errors"| node_exception_handler

click node_post_api "https://github.com/lakshygupta/blog-app-apis/blob/main/src/main/java/com/lakshy/blog/controllers/PostController.java"
click node_category_api "https://github.com/lakshygupta/blog-app-apis/blob/main/src/main/java/com/lakshy/blog/controllers/CategoryController.java"
click node_comment_api "https://github.com/lakshygupta/blog-app-apis/blob/main/src/main/java/com/lakshy/blog/controllers/CommentController.java"
click node_user_api "https://github.com/lakshygupta/blog-app-apis/blob/main/src/main/java/com/lakshy/blog/controllers/UserController.java"
click node_auth_api "https://github.com/lakshygupta/blog-app-apis/blob/main/src/main/java/com/lakshy/blog/controllers/AuthController.java"
click node_post_service "https://github.com/lakshygupta/blog-app-apis/blob/main/src/main/java/com/lakshy/blog/services/impl/PostServiceImpl.java"
click node_category_service "https://github.com/lakshygupta/blog-app-apis/blob/main/src/main/java/com/lakshy/blog/services/impl/CategoryServiceImpl.java"
click node_comment_service "https://github.com/lakshygupta/blog-app-apis/blob/main/src/main/java/com/lakshy/blog/services/impl/CommentServiceImpl.java"
click node_user_service "https://github.com/lakshygupta/blog-app-apis/blob/main/src/main/java/com/lakshy/blog/services/impl/UserServiceImpl.java"
click node_repositories "https://github.com/lakshygupta/blog-app-apis/blob/main/src/main/java/com/lakshy/blog/repositories/PostRepo.java"
click node_auth_security "https://github.com/lakshygupta/blog-app-apis/blob/main/src/main/java/com/lakshy/blog/security/JwtTokenHelper.java"
click node_user_details "https://github.com/lakshygupta/blog-app-apis/blob/main/src/main/java/com/lakshy/blog/security/CustomUserDetailService.java"
click node_security_filter "https://github.com/lakshygupta/blog-app-apis/blob/main/src/main/java/com/lakshy/blog/security/JwtAuthenticationFilter.java"
click node_security_config "https://github.com/lakshygupta/blog-app-apis/blob/main/src/main/java/com/lakshy/blog/config/SecurityConfig.java"
click node_file_service "https://github.com/lakshygupta/blog-app-apis/blob/main/src/main/java/com/lakshy/blog/services/impl/FileServiceImpl.java"
click node_exception_handler "https://github.com/lakshygupta/blog-app-apis/blob/main/src/main/java/com/lakshy/blog/exceptions/GlobalExceptionHandler.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_post_api,node_category_api,node_comment_api,node_user_api,node_auth_api,node_client toneBlue
class node_post_service,node_category_service,node_comment_service,node_user_service,node_repositories,node_database toneAmber
class node_auth_security,node_user_details,node_security_filter,node_security_config toneMint
class node_file_service,node_file_store,node_exception_handler toneRose
```

## Components

### REST API

- [Post API](https://github.com/lakshygupta/blog-app-apis/blob/main/src/main/java/com/lakshy/blog/controllers/PostController.java): `src/main/java/com/lakshy/blog/controllers/PostController.java`
- [Category API](https://github.com/lakshygupta/blog-app-apis/blob/main/src/main/java/com/lakshy/blog/controllers/CategoryController.java): `src/main/java/com/lakshy/blog/controllers/CategoryController.java`
- [Comment API](https://github.com/lakshygupta/blog-app-apis/blob/main/src/main/java/com/lakshy/blog/controllers/CommentController.java): `src/main/java/com/lakshy/blog/controllers/CommentController.java`
- [User API](https://github.com/lakshygupta/blog-app-apis/blob/main/src/main/java/com/lakshy/blog/controllers/UserController.java): `src/main/java/com/lakshy/blog/controllers/UserController.java`
- [Auth API](https://github.com/lakshygupta/blog-app-apis/blob/main/src/main/java/com/lakshy/blog/controllers/AuthController.java): `src/main/java/com/lakshy/blog/controllers/AuthController.java`

### Blog Domain

- [Post Service](https://github.com/lakshygupta/blog-app-apis/blob/main/src/main/java/com/lakshy/blog/services/impl/PostServiceImpl.java): `src/main/java/com/lakshy/blog/services/impl/PostServiceImpl.java`
- [Category Service](https://github.com/lakshygupta/blog-app-apis/blob/main/src/main/java/com/lakshy/blog/services/impl/CategoryServiceImpl.java): `src/main/java/com/lakshy/blog/services/impl/CategoryServiceImpl.java`
- [Comment Service](https://github.com/lakshygupta/blog-app-apis/blob/main/src/main/java/com/lakshy/blog/services/impl/CommentServiceImpl.java): `src/main/java/com/lakshy/blog/services/impl/CommentServiceImpl.java`
- [User Service](https://github.com/lakshygupta/blog-app-apis/blob/main/src/main/java/com/lakshy/blog/services/impl/UserServiceImpl.java): `src/main/java/com/lakshy/blog/services/impl/UserServiceImpl.java`
- [JPA Repositories](https://github.com/lakshygupta/blog-app-apis/blob/main/src/main/java/com/lakshy/blog/repositories/PostRepo.java): `src/main/java/com/lakshy/blog/repositories/PostRepo.java`
- **MySQL Database**

### Identity & Security

- [JWT Security](https://github.com/lakshygupta/blog-app-apis/blob/main/src/main/java/com/lakshy/blog/security/JwtTokenHelper.java): `src/main/java/com/lakshy/blog/security/JwtTokenHelper.java`
- [User Details](https://github.com/lakshygupta/blog-app-apis/blob/main/src/main/java/com/lakshy/blog/security/CustomUserDetailService.java): `src/main/java/com/lakshy/blog/security/CustomUserDetailService.java`
- [JWT Filter](https://github.com/lakshygupta/blog-app-apis/blob/main/src/main/java/com/lakshy/blog/security/JwtAuthenticationFilter.java): `src/main/java/com/lakshy/blog/security/JwtAuthenticationFilter.java`
- [Security Config](https://github.com/lakshygupta/blog-app-apis/blob/main/src/main/java/com/lakshy/blog/config/SecurityConfig.java): `src/main/java/com/lakshy/blog/config/SecurityConfig.java`

### Files & Errors

- [Image Files](https://github.com/lakshygupta/blog-app-apis/blob/main/src/main/java/com/lakshy/blog/services/impl/FileServiceImpl.java): `src/main/java/com/lakshy/blog/services/impl/FileServiceImpl.java`
- **Image Storage**
- [Exception Handler](https://github.com/lakshygupta/blog-app-apis/blob/main/src/main/java/com/lakshy/blog/exceptions/GlobalExceptionHandler.java): `src/main/java/com/lakshy/blog/exceptions/GlobalExceptionHandler.java`

### Other components

- **API Client**

## Connections

- API Client → Post API: sends requests
- API Client → Category API: sends requests
- API Client → Comment API: sends requests
- API Client → User API: sends requests
- API Client → Auth API: sends requests
- Post API → Post Service: calls
- Post Service → JPA Repositories: reads/writes
- JPA Repositories → MySQL Database: persists
- User API → User Service: calls
- User Service → JPA Repositories: reads/writes
- Auth API → User Service: registers
- Auth API → User Details: loads user
- User Details → JPA Repositories: looks up user
- Auth API → JWT Security: creates token
- Auth API → JWT Filter: returns token
- Security Config → JWT Filter: configures
- Post API → Image Files: uploads/reads
- Image Files → Image Storage: reads/writes
- Post API → Exception Handler: raises handled errors
- Category API → Exception Handler: raises handled errors
- Comment API → Exception Handler: raises handled errors
- User API → Exception Handler: raises handled errors
