# aryaraj76438/blogservice architecture

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

- Interactive diagram: https://gitdiagram.com/aryaraj76438/blogservice
- Repository: https://github.com/aryaraj76438/blogservice

## Overview

This is a Spring-based blog service. Its main user workflow is account creation and verification, authenticated drafting and revision of posts, then publishing and public reading; users can also manage profiles and supporting taxonomy and media. The tree and sampled code establish post/version persistence, category and tag lookup, authentication/token handling, and queued verification email. The README is only a title, and several services are unsampled, so uncertain wiring is omitted.

Main entry points: [`src/main/java/com/quantumsyntax/blogservice/auth/service/AuthService.java`](https://github.com/aryaraj76438/blogservice/blob/main/src/main/java/com/quantumsyntax/blogservice/auth/service/AuthService.java) (Authentication), [`src/main/java/com/quantumsyntax/blogservice/blog/post/service/PostService.java`](https://github.com/aryaraj76438/blogservice/blob/main/src/main/java/com/quantumsyntax/blogservice/blog/post/service/PostService.java) (Post lifecycle), [`src/main/java/com/quantumsyntax/blogservice/auth/controller/AuthController.java`](https://github.com/aryaraj76438/blogservice/blob/main/src/main/java/com/quantumsyntax/blogservice/auth/controller/AuthController.java) (Auth endpoints), [`src/main/java/com/quantumsyntax/blogservice/user/repository/UserRepository.java`](https://github.com/aryaraj76438/blogservice/blob/main/src/main/java/com/quantumsyntax/blogservice/user/repository/UserRepository.java) (User records)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_auth["Identity and security"]
  node_auth_api["Auth endpoints"]
  node_auth_service["Authentication<br/>[AuthService.java]"]
  node_reset_service["Password reset"]
  node_jwt["JWT service<br/>[JwtService.java]"]
  node_user_details["User lookup"]
  node_user_store[("User records")]
  node_refresh_store[("Refresh tokens")]
  node_verify_store[("Verification tokens")]
  node_redis[("Redis controls<br/>[RedisService.java]")]
  node_email_service["Email composition<br/>[EmailService.java]"]
  node_outbox_service["Email outbox"]
  node_outbox_store[("Outbox records")]
end

subgraph group_posts["Post lifecycle"]
  node_post_api["Post endpoints"]
  node_post_service["Post lifecycle<br/>[PostService.java]"]
  node_editor_validator["Document validation"]
  node_post_store[("Posts")]
  node_version_store[("Post versions")]
end

subgraph group_catalog["Blog catalog and media"]
  node_category_service["Categories"]
  node_category_store[("Category records")]
  node_tag_service["Tags<br/>[TagService.java]"]
  node_tag_store[("Tag records<br/>[TagRepository.java]")]
  node_media_service["Media handling<br/>[MediaService.java]"]
  node_storage_service["Local file storage"]
end

subgraph group_profiles["User profiles"]
  node_profile_api["Profile endpoints"]
  node_profile_service["Profile management<br/>[UserService.java]"]
end

node_writer(("Writer or reader"))
node_mail_transport(("Email delivery"))

node_writer -->|"submits auth"| node_auth_api
node_auth_api -->|"handles auth"| node_auth_service
node_auth_api -->|"handles reset"| node_reset_service
node_auth_api -->|"sets token cookie"| node_jwt
node_auth_service -->|"reads and writes"| node_user_store
node_auth_service -->|"manages sessions"| node_refresh_store
node_auth_service -->|"manages verification"| node_verify_store
node_auth_service -->|"checks limits"| node_redis
node_auth_service -->|"creates access token"| node_jwt
node_auth_service -->|"requests verification mail"| node_email_service
node_user_details -->|"loads account"| node_user_store
node_email_service -->|"queues message"| node_outbox_service
node_outbox_service -->|"stores message"| node_outbox_store
node_outbox_store -.->|"delivers queued mail"| node_mail_transport
node_writer -->|"manages or reads posts"| node_post_api
node_post_api -->|"dispatches request"| node_post_service
node_post_service -->|"reads and writes"| node_post_store
node_post_service -->|"stores revisions"| node_version_store
node_post_service -->|"validates document"| node_editor_validator
node_post_service -->|"looks up category"| node_category_store
node_post_service -->|"looks up tags"| node_tag_store
node_writer -->|"manages profile"| node_profile_api
node_profile_api -->|"dispatches request"| node_profile_service
node_profile_service -->|"reads and updates"| node_user_store
node_writer -->|"browses taxonomy"| node_category_service
node_category_service -->|"reads or creates"| node_category_store
node_writer -->|"browses taxonomy"| node_tag_service
node_tag_service -->|"reads or creates"| node_tag_store
node_writer -->|"uploads media"| node_media_service
node_media_service -->|"stores files"| node_storage_service

click node_auth_api "https://github.com/aryaraj76438/blogservice/blob/main/src/main/java/com/quantumsyntax/blogservice/auth/controller/AuthController.java"
click node_auth_service "https://github.com/aryaraj76438/blogservice/blob/main/src/main/java/com/quantumsyntax/blogservice/auth/service/AuthService.java"
click node_reset_service "https://github.com/aryaraj76438/blogservice/tree/main/src/main/java/com/quantumsyntax/blogservice/auth/service"
click node_jwt "https://github.com/aryaraj76438/blogservice/blob/main/src/main/java/com/quantumsyntax/blogservice/security/JwtService.java"
click node_user_details "https://github.com/aryaraj76438/blogservice/blob/main/src/main/java/com/quantumsyntax/blogservice/security/CustomUserDetailsService.java"
click node_user_store "https://github.com/aryaraj76438/blogservice/blob/main/src/main/java/com/quantumsyntax/blogservice/user/repository/UserRepository.java"
click node_refresh_store "https://github.com/aryaraj76438/blogservice/blob/main/src/main/java/com/quantumsyntax/blogservice/auth/repository/RefreshTokenRepository.java"
click node_verify_store "https://github.com/aryaraj76438/blogservice/blob/main/src/main/java/com/quantumsyntax/blogservice/auth/repository/VerificationTokenRepository.java"
click node_redis "https://github.com/aryaraj76438/blogservice/blob/main/src/main/java/com/quantumsyntax/blogservice/auth/service/RedisService.java"
click node_email_service "https://github.com/aryaraj76438/blogservice/blob/main/src/main/java/com/quantumsyntax/blogservice/auth/service/EmailService.java"
click node_outbox_service "https://github.com/aryaraj76438/blogservice/blob/main/src/main/java/com/quantumsyntax/blogservice/auth/service/EmailOutboxService.java"
click node_outbox_store "https://github.com/aryaraj76438/blogservice/blob/main/src/main/java/com/quantumsyntax/blogservice/auth/repository/EmailOutboxRepository.java"
click node_post_api "https://github.com/aryaraj76438/blogservice/blob/main/src/main/java/com/quantumsyntax/blogservice/blog/post/controller/PostController.java"
click node_post_service "https://github.com/aryaraj76438/blogservice/blob/main/src/main/java/com/quantumsyntax/blogservice/blog/post/service/PostService.java"
click node_editor_validator "https://github.com/aryaraj76438/blogservice/blob/main/src/main/java/com/quantumsyntax/blogservice/blog/post/editor/EditorDocumentValidator.java"
click node_post_store "https://github.com/aryaraj76438/blogservice/blob/main/src/main/java/com/quantumsyntax/blogservice/blog/post/repository/PostRepository.java"
click node_version_store "https://github.com/aryaraj76438/blogservice/blob/main/src/main/java/com/quantumsyntax/blogservice/blog/post/repository/PostVersionRepository.java"
click node_category_service "https://github.com/aryaraj76438/blogservice/blob/main/src/main/java/com/quantumsyntax/blogservice/blog/category/service/CategoryService.java"
click node_category_store "https://github.com/aryaraj76438/blogservice/blob/main/src/main/java/com/quantumsyntax/blogservice/blog/category/repository/CategoryRepository.java"
click node_tag_service "https://github.com/aryaraj76438/blogservice/blob/main/src/main/java/com/quantumsyntax/blogservice/blog/tag/service/TagService.java"
click node_tag_store "https://github.com/aryaraj76438/blogservice/blob/main/src/main/java/com/quantumsyntax/blogservice/blog/tag/repository/TagRepository.java"
click node_media_service "https://github.com/aryaraj76438/blogservice/blob/main/src/main/java/com/quantumsyntax/blogservice/blog/media/service/MediaService.java"
click node_storage_service "https://github.com/aryaraj76438/blogservice/blob/main/src/main/java/com/quantumsyntax/blogservice/blog/media/service/LocalStorageService.java"
click node_profile_api "https://github.com/aryaraj76438/blogservice/blob/main/src/main/java/com/quantumsyntax/blogservice/user/controller/UserController.java"
click node_profile_service "https://github.com/aryaraj76438/blogservice/blob/main/src/main/java/com/quantumsyntax/blogservice/user/service/UserService.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_service,node_reset_service,node_jwt,node_user_details,node_user_store,node_refresh_store,node_verify_store,node_redis,node_email_service,node_outbox_service,node_outbox_store toneBlue
class node_post_api,node_post_service,node_editor_validator,node_post_store,node_version_store toneAmber
class node_category_service,node_category_store,node_tag_service,node_tag_store,node_media_service,node_storage_service toneMint
class node_profile_api,node_profile_service toneRose
class node_writer,node_mail_transport toneIndigo
```

## Components

### Identity and security

- [Auth endpoints](https://github.com/aryaraj76438/blogservice/blob/main/src/main/java/com/quantumsyntax/blogservice/auth/controller/AuthController.java): `src/main/java/com/quantumsyntax/blogservice/auth/controller/AuthController.java`
- [Authentication](https://github.com/aryaraj76438/blogservice/blob/main/src/main/java/com/quantumsyntax/blogservice/auth/service/AuthService.java): `src/main/java/com/quantumsyntax/blogservice/auth/service/AuthService.java`
- [Password reset](https://github.com/aryaraj76438/blogservice/tree/main/src/main/java/com/quantumsyntax/blogservice/auth/service): `src/main/java/com/quantumsyntax/blogservice/auth/service`
- [JWT service](https://github.com/aryaraj76438/blogservice/blob/main/src/main/java/com/quantumsyntax/blogservice/security/JwtService.java): `src/main/java/com/quantumsyntax/blogservice/security/JwtService.java`
- [User lookup](https://github.com/aryaraj76438/blogservice/blob/main/src/main/java/com/quantumsyntax/blogservice/security/CustomUserDetailsService.java): `src/main/java/com/quantumsyntax/blogservice/security/CustomUserDetailsService.java`
- [User records](https://github.com/aryaraj76438/blogservice/blob/main/src/main/java/com/quantumsyntax/blogservice/user/repository/UserRepository.java): `src/main/java/com/quantumsyntax/blogservice/user/repository/UserRepository.java`
- [Refresh tokens](https://github.com/aryaraj76438/blogservice/blob/main/src/main/java/com/quantumsyntax/blogservice/auth/repository/RefreshTokenRepository.java): `src/main/java/com/quantumsyntax/blogservice/auth/repository/RefreshTokenRepository.java`
- [Verification tokens](https://github.com/aryaraj76438/blogservice/blob/main/src/main/java/com/quantumsyntax/blogservice/auth/repository/VerificationTokenRepository.java): `src/main/java/com/quantumsyntax/blogservice/auth/repository/VerificationTokenRepository.java`
- [Redis controls](https://github.com/aryaraj76438/blogservice/blob/main/src/main/java/com/quantumsyntax/blogservice/auth/service/RedisService.java): `src/main/java/com/quantumsyntax/blogservice/auth/service/RedisService.java`
- [Email composition](https://github.com/aryaraj76438/blogservice/blob/main/src/main/java/com/quantumsyntax/blogservice/auth/service/EmailService.java): `src/main/java/com/quantumsyntax/blogservice/auth/service/EmailService.java`
- [Email outbox](https://github.com/aryaraj76438/blogservice/blob/main/src/main/java/com/quantumsyntax/blogservice/auth/service/EmailOutboxService.java): `src/main/java/com/quantumsyntax/blogservice/auth/service/EmailOutboxService.java`
- [Outbox records](https://github.com/aryaraj76438/blogservice/blob/main/src/main/java/com/quantumsyntax/blogservice/auth/repository/EmailOutboxRepository.java): `src/main/java/com/quantumsyntax/blogservice/auth/repository/EmailOutboxRepository.java`

### Post lifecycle

- [Post endpoints](https://github.com/aryaraj76438/blogservice/blob/main/src/main/java/com/quantumsyntax/blogservice/blog/post/controller/PostController.java): `src/main/java/com/quantumsyntax/blogservice/blog/post/controller/PostController.java`
- [Post lifecycle](https://github.com/aryaraj76438/blogservice/blob/main/src/main/java/com/quantumsyntax/blogservice/blog/post/service/PostService.java): `src/main/java/com/quantumsyntax/blogservice/blog/post/service/PostService.java`
- [Document validation](https://github.com/aryaraj76438/blogservice/blob/main/src/main/java/com/quantumsyntax/blogservice/blog/post/editor/EditorDocumentValidator.java): `src/main/java/com/quantumsyntax/blogservice/blog/post/editor/EditorDocumentValidator.java`
- [Posts](https://github.com/aryaraj76438/blogservice/blob/main/src/main/java/com/quantumsyntax/blogservice/blog/post/repository/PostRepository.java): `src/main/java/com/quantumsyntax/blogservice/blog/post/repository/PostRepository.java`
- [Post versions](https://github.com/aryaraj76438/blogservice/blob/main/src/main/java/com/quantumsyntax/blogservice/blog/post/repository/PostVersionRepository.java): `src/main/java/com/quantumsyntax/blogservice/blog/post/repository/PostVersionRepository.java`

### Blog catalog and media

- [Categories](https://github.com/aryaraj76438/blogservice/blob/main/src/main/java/com/quantumsyntax/blogservice/blog/category/service/CategoryService.java): `src/main/java/com/quantumsyntax/blogservice/blog/category/service/CategoryService.java`
- [Category records](https://github.com/aryaraj76438/blogservice/blob/main/src/main/java/com/quantumsyntax/blogservice/blog/category/repository/CategoryRepository.java): `src/main/java/com/quantumsyntax/blogservice/blog/category/repository/CategoryRepository.java`
- [Tags](https://github.com/aryaraj76438/blogservice/blob/main/src/main/java/com/quantumsyntax/blogservice/blog/tag/service/TagService.java): `src/main/java/com/quantumsyntax/blogservice/blog/tag/service/TagService.java`
- [Tag records](https://github.com/aryaraj76438/blogservice/blob/main/src/main/java/com/quantumsyntax/blogservice/blog/tag/repository/TagRepository.java): `src/main/java/com/quantumsyntax/blogservice/blog/tag/repository/TagRepository.java`
- [Media handling](https://github.com/aryaraj76438/blogservice/blob/main/src/main/java/com/quantumsyntax/blogservice/blog/media/service/MediaService.java): `src/main/java/com/quantumsyntax/blogservice/blog/media/service/MediaService.java`
- [Local file storage](https://github.com/aryaraj76438/blogservice/blob/main/src/main/java/com/quantumsyntax/blogservice/blog/media/service/LocalStorageService.java): `src/main/java/com/quantumsyntax/blogservice/blog/media/service/LocalStorageService.java`

### User profiles

- [Profile endpoints](https://github.com/aryaraj76438/blogservice/blob/main/src/main/java/com/quantumsyntax/blogservice/user/controller/UserController.java): `src/main/java/com/quantumsyntax/blogservice/user/controller/UserController.java`
- [Profile management](https://github.com/aryaraj76438/blogservice/blob/main/src/main/java/com/quantumsyntax/blogservice/user/service/UserService.java): `src/main/java/com/quantumsyntax/blogservice/user/service/UserService.java`

### Other components

- **Writer or reader**
- **Email delivery**

## Connections

- Writer or reader → Auth endpoints: submits auth
- Auth endpoints → Authentication: handles auth
- Auth endpoints → Password reset: handles reset
- Auth endpoints → JWT service: sets token cookie
- Authentication → User records: reads and writes
- Authentication → Refresh tokens: manages sessions
- Authentication → Verification tokens: manages verification
- Authentication → Redis controls: checks limits
- Authentication → JWT service: creates access token
- Authentication → Email composition: requests verification mail
- User lookup → User records: loads account
- Email composition → Email outbox: queues message
- Email outbox → Outbox records: stores message
- Outbox records → Email delivery: delivers queued mail
- Writer or reader → Post endpoints: manages or reads posts
- Post endpoints → Post lifecycle: dispatches request
- Post lifecycle → Posts: reads and writes
- Post lifecycle → Post versions: stores revisions
- Post lifecycle → Document validation: validates document
- Post lifecycle → Category records: looks up category
- Post lifecycle → Tag records: looks up tags
- Writer or reader → Profile endpoints: manages profile
- Profile endpoints → Profile management: dispatches request
- Profile management → User records: reads and updates
- Writer or reader → Categories: browses taxonomy
- Categories → Category records: reads or creates
- Writer or reader → Tags: browses taxonomy
- Tags → Tag records: reads or creates
- Writer or reader → Media handling: uploads media
- Media handling → Local file storage: stores files
