# zhan-zip/aesthetica architecture

> Architecture diagram of the GitHub repository zhan-zip/aesthetica, 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/zhan-zip/aesthetica
- Repository: https://github.com/zhan-zip/aesthetica

## Overview

This is a Spring MVC blog application with an administrative publishing area and a public reading site. The main workflow is an administrator creating or editing a post, associating it with a category, and saving it; readers then browse listings and categories or open a post, which increments its view count and displays glossary terms. The tree also shows login, uploads, statistics, and a Markdown editor. Controller-to-service calls are visible in sampled source; service-to-repository wiring is inferred from the service implementations and repository layout, which were not sampled.

Main entry points: [`src/main/java/com/lrm/service/TypeServiceImpl.java`](https://github.com/zhan-zip/aesthetica/blob/master/src/main/java/com/lrm/service/TypeServiceImpl.java) (Category service), [`src/main/java/com/lrm/web/admin/IndexController.java`](https://github.com/zhan-zip/aesthetica/blob/master/src/main/java/com/lrm/web/admin/IndexController.java) (Public pages), [`src/main/java/com/lrm/web/admin/BlogController.java`](https://github.com/zhan-zip/aesthetica/blob/master/src/main/java/com/lrm/web/admin/BlogController.java) (Blog management), [`src/main/java/com/lrm/service/BlogServiceImpl.java`](https://github.com/zhan-zip/aesthetica/blob/master/src/main/java/com/lrm/service/BlogServiceImpl.java) (Blog service)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_web["Web workflows"]
  node_index["Public pages"]
  node_blogctl["Blog management"]
  node_typectl["Category management"]
  node_glossaryctl["Glossary management"]
  node_login["Login"]
  node_upload["File upload"]
  node_stats["Statistics"]
end

subgraph group_services["Domain services"]
  node_blogservice["Blog service"]
  node_typeservice["Category service"]
  node_glossaryservice["Glossary service"]
  node_userservice["User service"]
end

subgraph group_persistence["Persistence layer"]
  node_blogrepo["Blog repository"]
  node_typerepo["Category repository"]
  node_glossaryrepo["Glossary repository"]
  node_userrepo["User repository"]
  node_database[("Application database")]
end

subgraph group_domain["Domain model"]
  node_blog["Blog posts<br/>[Blog.java]"]
  node_type["Categories<br/>[Type.java]"]
  node_glossary["Glossary terms<br/>[Glossary.java]"]
  node_user["User accounts<br/>[User.java]"]
end

subgraph group_authoring["Authoring tools"]
  node_editor["Markdown editor<br/>[editormd.js]"]
end

node_reader(("Reader"))
node_admin(("Administrator"))

node_reader -->|"browses"| node_index
node_admin -->|"manages posts"| node_blogctl
node_admin -->|"manages categories"| node_typectl
node_admin -->|"manages terms"| node_glossaryctl
node_admin -->|"authenticates"| node_login
node_admin -->|"uploads files"| node_upload
node_admin -->|"views metrics"| node_stats
node_blogctl -->|"calls"| node_blogservice
node_blogctl -->|"loads categories"| node_typeservice
node_index -->|"lists and loads posts"| node_blogservice
node_index -->|"loads categories"| node_typeservice
node_index -->|"loads terms"| node_glossaryservice
node_glossaryctl -->|"calls"| node_glossaryservice
node_typectl -->|"calls"| node_typeservice
node_login -->|"authenticates"| node_userservice
node_stats -->|"reads post counts"| node_blogservice
node_stats -->|"reads category views"| node_typeservice
node_blogservice -->|"queries and saves"| node_blogrepo
node_typeservice -->|"queries and saves"| node_typerepo
node_glossaryservice -->|"queries and saves"| node_glossaryrepo
node_userservice -->|"looks up users"| node_userrepo
node_blogrepo -->|"reads and writes"| node_database
node_typerepo -->|"reads and writes"| node_database
node_glossaryrepo -->|"reads and writes"| node_database
node_userrepo -->|"reads and writes"| node_database
node_blogctl -.->|"authors Markdown"| node_editor

click node_index "https://github.com/zhan-zip/aesthetica/blob/master/src/main/java/com/lrm/web/admin/IndexController.java"
click node_blogctl "https://github.com/zhan-zip/aesthetica/blob/master/src/main/java/com/lrm/web/admin/BlogController.java"
click node_typectl "https://github.com/zhan-zip/aesthetica/blob/master/src/main/java/com/lrm/web/admin/TypeController.java"
click node_glossaryctl "https://github.com/zhan-zip/aesthetica/blob/master/src/main/java/com/lrm/web/admin/GlossaryController.java"
click node_login "https://github.com/zhan-zip/aesthetica/blob/master/src/main/java/com/lrm/web/admin/LoginController.java"
click node_upload "https://github.com/zhan-zip/aesthetica/blob/master/src/main/java/com/lrm/web/admin/FileUploadController.java"
click node_stats "https://github.com/zhan-zip/aesthetica/blob/master/src/main/java/com/lrm/web/admin/StatisticsController.java"
click node_blogservice "https://github.com/zhan-zip/aesthetica/blob/master/src/main/java/com/lrm/service/BlogServiceImpl.java"
click node_typeservice "https://github.com/zhan-zip/aesthetica/blob/master/src/main/java/com/lrm/service/TypeServiceImpl.java"
click node_glossaryservice "https://github.com/zhan-zip/aesthetica/blob/master/src/main/java/com/lrm/service/GlossaryServiceImpl.java"
click node_userservice "https://github.com/zhan-zip/aesthetica/blob/master/src/main/java/com/lrm/service/UserServiceImpl.java"
click node_blogrepo "https://github.com/zhan-zip/aesthetica/blob/master/src/main/java/com/lrm/Dao/BlogRepository.java"
click node_typerepo "https://github.com/zhan-zip/aesthetica/blob/master/src/main/java/com/lrm/Dao/TypeRepository.java"
click node_glossaryrepo "https://github.com/zhan-zip/aesthetica/blob/master/src/main/java/com/lrm/Dao/GlossaryRepository.java"
click node_userrepo "https://github.com/zhan-zip/aesthetica/blob/master/src/main/java/com/lrm/Dao/UserRepository.java"
click node_blog "https://github.com/zhan-zip/aesthetica/blob/master/src/main/java/com/lrm/po/Blog.java"
click node_type "https://github.com/zhan-zip/aesthetica/blob/master/src/main/java/com/lrm/po/Type.java"
click node_glossary "https://github.com/zhan-zip/aesthetica/blob/master/src/main/java/com/lrm/po/Glossary.java"
click node_user "https://github.com/zhan-zip/aesthetica/blob/master/src/main/java/com/lrm/po/User.java"
click node_editor "https://github.com/zhan-zip/aesthetica/blob/master/src/main/resources/static/lib/editormd/editormd.js"

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_index,node_blogctl,node_typectl,node_glossaryctl,node_login,node_upload,node_stats toneBlue
class node_blogservice,node_typeservice,node_glossaryservice,node_userservice toneAmber
class node_blogrepo,node_typerepo,node_glossaryrepo,node_userrepo,node_database toneMint
class node_blog,node_type,node_glossary,node_user toneRose
class node_editor,node_reader,node_admin toneIndigo
```

## Components

### Web workflows

- [Public pages](https://github.com/zhan-zip/aesthetica/blob/master/src/main/java/com/lrm/web/admin/IndexController.java): `src/main/java/com/lrm/web/admin/IndexController.java`
- [Blog management](https://github.com/zhan-zip/aesthetica/blob/master/src/main/java/com/lrm/web/admin/BlogController.java): `src/main/java/com/lrm/web/admin/BlogController.java`
- [Category management](https://github.com/zhan-zip/aesthetica/blob/master/src/main/java/com/lrm/web/admin/TypeController.java): `src/main/java/com/lrm/web/admin/TypeController.java`
- [Glossary management](https://github.com/zhan-zip/aesthetica/blob/master/src/main/java/com/lrm/web/admin/GlossaryController.java): `src/main/java/com/lrm/web/admin/GlossaryController.java`
- [Login](https://github.com/zhan-zip/aesthetica/blob/master/src/main/java/com/lrm/web/admin/LoginController.java): `src/main/java/com/lrm/web/admin/LoginController.java`
- [File upload](https://github.com/zhan-zip/aesthetica/blob/master/src/main/java/com/lrm/web/admin/FileUploadController.java): `src/main/java/com/lrm/web/admin/FileUploadController.java`
- [Statistics](https://github.com/zhan-zip/aesthetica/blob/master/src/main/java/com/lrm/web/admin/StatisticsController.java): `src/main/java/com/lrm/web/admin/StatisticsController.java`

### Domain services

- [Blog service](https://github.com/zhan-zip/aesthetica/blob/master/src/main/java/com/lrm/service/BlogServiceImpl.java): `src/main/java/com/lrm/service/BlogServiceImpl.java`
- [Category service](https://github.com/zhan-zip/aesthetica/blob/master/src/main/java/com/lrm/service/TypeServiceImpl.java): `src/main/java/com/lrm/service/TypeServiceImpl.java`
- [Glossary service](https://github.com/zhan-zip/aesthetica/blob/master/src/main/java/com/lrm/service/GlossaryServiceImpl.java): `src/main/java/com/lrm/service/GlossaryServiceImpl.java`
- [User service](https://github.com/zhan-zip/aesthetica/blob/master/src/main/java/com/lrm/service/UserServiceImpl.java): `src/main/java/com/lrm/service/UserServiceImpl.java`

### Persistence layer

- [Blog repository](https://github.com/zhan-zip/aesthetica/blob/master/src/main/java/com/lrm/Dao/BlogRepository.java): `src/main/java/com/lrm/Dao/BlogRepository.java`
- [Category repository](https://github.com/zhan-zip/aesthetica/blob/master/src/main/java/com/lrm/Dao/TypeRepository.java): `src/main/java/com/lrm/Dao/TypeRepository.java`
- [Glossary repository](https://github.com/zhan-zip/aesthetica/blob/master/src/main/java/com/lrm/Dao/GlossaryRepository.java): `src/main/java/com/lrm/Dao/GlossaryRepository.java`
- [User repository](https://github.com/zhan-zip/aesthetica/blob/master/src/main/java/com/lrm/Dao/UserRepository.java): `src/main/java/com/lrm/Dao/UserRepository.java`
- **Application database**

### Domain model

- [Blog posts](https://github.com/zhan-zip/aesthetica/blob/master/src/main/java/com/lrm/po/Blog.java): `src/main/java/com/lrm/po/Blog.java`
- [Categories](https://github.com/zhan-zip/aesthetica/blob/master/src/main/java/com/lrm/po/Type.java): `src/main/java/com/lrm/po/Type.java`
- [Glossary terms](https://github.com/zhan-zip/aesthetica/blob/master/src/main/java/com/lrm/po/Glossary.java): `src/main/java/com/lrm/po/Glossary.java`
- [User accounts](https://github.com/zhan-zip/aesthetica/blob/master/src/main/java/com/lrm/po/User.java): `src/main/java/com/lrm/po/User.java`

### Authoring tools

- [Markdown editor](https://github.com/zhan-zip/aesthetica/blob/master/src/main/resources/static/lib/editormd/editormd.js): `src/main/resources/static/lib/editormd/editormd.js`

### Other components

- **Reader**
- **Administrator**

## Connections

- Reader → Public pages: browses
- Administrator → Blog management: manages posts
- Administrator → Category management: manages categories
- Administrator → Glossary management: manages terms
- Administrator → Login: authenticates
- Administrator → File upload: uploads files
- Administrator → Statistics: views metrics
- Blog management → Blog service: calls
- Blog management → Category service: loads categories
- Public pages → Blog service: lists and loads posts
- Public pages → Category service: loads categories
- Public pages → Glossary service: loads terms
- Glossary management → Glossary service: calls
- Category management → Category service: calls
- Login → User service: authenticates
- Statistics → Blog service: reads post counts
- Statistics → Category service: reads category views
- Blog service → Blog repository: queries and saves
- Category service → Category repository: queries and saves
- Glossary service → Glossary repository: queries and saves
- User service → User repository: looks up users
- Blog repository → Application database: reads and writes
- Category repository → Application database: reads and writes
- Glossary repository → Application database: reads and writes
- User repository → Application database: reads and writes
- Blog management → Markdown editor: authors Markdown
