# smerteliko/knowledge-hub-backend-spring architecture

> Architecture diagram of the GitHub repository smerteliko/knowledge-hub-backend-spring, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-06-26). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/smerteliko/knowledge-hub-backend-spring
- Repository: https://github.com/smerteliko/knowledge-hub-backend-spring

## Overview

1. **Overall shape**
   - This is a Spring Boot 3 backend for a personal knowledge system.
   - The code follows a classic layered architecture: API controllers → domain/services → persistence repositories → PostgreSQL and Elasticsearch.
   - The backend is the system of record for users, notes, links, and tags; Elasticsearch is used as a derived search index.

2. **API boundary**
   - The HTTP layer is split by responsibility into `AuthController`, `ContentController`, `TagController`, `SearchController`, and `LinkParsingController`.
   - These controllers expose the main user-facing capabilities: authentication, CRUD over knowledge items, tag management, text search, and URL parsing.
   - DTOs under `dto/*` define request/response shapes and keep the API contract separate from internal entities.

3. **Authentication and security**
   - Security is JWT-based, with `JwtAuthenticationFilter` and `SecurityConfig` enforcing token validation on protected routes.
   - `AuthService`, `JwtService`, and `JpaUserDetailsService` form the authentication backend.
   - `UserRepository` persists users, while `Role` models authorization scope.
   - The architecture is stateless at the API level: login returns a JWT, and subsequent requests carry that token.

4. **Core domain model**
   - The central content model is built around `ContentItem`, with concrete types `Note` and `Link`.
   - `Tag` is a separate domain entity used to classify content items.
   - This suggests the system supports mixed knowledge objects but keeps a common content layer for shared operations and search/export logic.

5. **Relational persistence**
   - PostgreSQL is the primary durable store, accessed through Spring Data JPA repositories.
   - `ContentItemRepository`, `TagRepository`, and `UserRepository` are the main relational persistence boundaries.
   - The database holds authoritative business state, including ownership, relationships, and content metadata.

6. **Search subsystem**
   - Elasticsearch is configured through `ElasticsearchConfig` and used via `LinkSearchRepository` and `NoteSearchRepository`.
   - `LinkIndex` and `NoteIndex` are separate search documents, indicating the system indexes different content types independently.
   - `SearchService` likely coordinates query execution and relevance behavior across those indices.
   - This creates a clear split: PostgreSQL for truth, Elasticsearch for fast full-text retrieval.

7. **Content management flow**
   - `ContentService` is the orchestration layer for creating and retrieving notes/links.
   - Content creation requests come in through `NoteCreateRequest` and `LinkCreateRequest`, then are persisted relationally and reflected into search indexing.
   - This service boundary is where ownership, tagging, and indexing consistency are likely managed together.

8. **URL parsing and enrichment**
   - `LinkParsingService` and `LinkParsingController` handle fetching metadata from external URLs.
   - The readme indicates Jsoup is used to extract `title`, `description`, and Open Graph tags.
   - This is an ingestion/enrichment path: external web pages become structured link objects inside the knowledge hub.

9. **Export subsystem**
   - `ExportService` is a distinct capability for generating knowledge reports.
   - The readme indicates PDF and Markdown output, with Apache PDFBox for PDF generation.
   - This is a read-only outbound pipeline that transforms stored knowledge into portable reports.

10. **Testing and environment isolation**
   - Tests are organized by subsystem, with unit and integration coverage for auth, link parsing, and search.
   - Test infrastructure includes `AbstractTest` plus a test-specific Elasticsearch config, indicating environment substitution for search integration tests.
   - The readme mentions Testcontainers, so external dependencies such as PostgreSQL and Elasticsearch are likely validated in isolated containers rather than mocks only.

11. **Deployment and runtime topology**
   - The repo includes `Dockerfile` and `compose.yaml`, so the application is designed to run as part of a containerized stack.
   - The stack includes the Spring app plus PostgreSQL and Elasticsearch, which are the two backing infrastructure services that define the main architecture boundary.
   - GitHub Actions workflow exists under `.github/workflows/main.yml`, suggesting CI builds and tests the same layered stack.

12. **Important diagram boundary**
   - If you draw the architecture, the key separation is: client/API traffic enters the Spring Boot app; business logic lives in services; relational writes go to PostgreSQL; search queries and index writes go to Elasticsearch; outbound enrichment reaches the public web for link parsing; export turns stored content into files.

Main entry points: [`src/main/java/com/smerteliko/knowledgehub/service/content/ContentService.java`](https://github.com/smerteliko/knowledge-hub-backend-spring/blob/master/src/main/java/com/smerteliko/knowledgehub/service/content/ContentService.java) (Content service), [`src/main/java/com/smerteliko/knowledgehub/service/search/SearchService.java`](https://github.com/smerteliko/knowledge-hub-backend-spring/blob/master/src/main/java/com/smerteliko/knowledgehub/service/search/SearchService.java) (Search service), [`src/main/java/com/smerteliko/knowledgehub/repository/UserRepository.java`](https://github.com/smerteliko/knowledge-hub-backend-spring/blob/master/src/main/java/com/smerteliko/knowledgehub/repository/UserRepository.java) (User repo), [`src/main/java/com/smerteliko/knowledgehub/service/export/ExportService.java`](https://github.com/smerteliko/knowledge-hub-backend-spring/blob/master/src/main/java/com/smerteliko/knowledgehub/service/export/ExportService.java) (Export service)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_api["API layer"]
  node_auth_controller["Auth API<br/>HTTP controller"]
  node_content_controller["Content API<br/>HTTP controller"]
  node_tag_controller["Tag API<br/>HTTP controller<br/>[TagController.java]"]
  node_search_controller["Search API<br/>HTTP controller"]
  node_parse_controller["Parse API<br/>HTTP controller"]
end

subgraph group_core["Core domain"]
  node_auth_service["Auth service<br/>auth orchestration<br/>[AuthService.java]"]
  node_content_service["Content service<br/>content orchestration"]
  node_tag_service["Tag service<br/>tag orchestration<br/>[TagService.java]"]
  node_search_service["Search service<br/>search orchestration<br/>[SearchService.java]"]
  node_parse_service["Parse service<br/>web enrichment"]
  node_export_service["Export service<br/>report generation<br/>[ExportService.java]"]
  node_content_item["Content item<br/>domain entity<br/>[ContentItem.java]"]
  node_note["Note<br/>domain entity<br/>[Note.java]"]
  node_link["Link<br/>domain entity<br/>[Link.java]"]
  node_tag(("Tag<br/>domain entity<br/>[Tag.java]"))
  node_user(("User<br/>domain entity<br/>[User.java]"))
  node_role{{"Role<br/>enum<br/>[Role.java]"}}
end

subgraph group_persistence["Persistence"]
  node_content_repo[("Content repo<br/>JPA repository")]
  node_tag_repo[("Tag repo<br/>JPA repository<br/>[TagRepository.java]")]
  node_user_repo[("User repo<br/>JPA repository")]
  node_link_search_repo[("Link search<br/>ES repository")]
  node_note_search_repo[("Note search<br/>ES repository")]
  node_link_index["Link index<br/>ES document<br/>[LinkIndex.java]"]
  node_note_index["Note index<br/>ES document<br/>[NoteIndex.java]"]
end

subgraph group_infra["Infrastructure"]
  node_app(("App<br/>Spring Boot entrypoint"))
  node_jwt_service["JWT service<br/>token handling<br/>[JwtService.java]"]
  node_user_details["User details<br/>security adapter"]
  node_security_config["Security config"]
  node_jwt_filter["JWT filter<br/>auth filter"]
  node_es_config["ES config<br/>search config"]
end

node_app -->|"loads"| node_security_config
node_app -->|"loads"| node_es_config
node_security_config -->|"uses"| node_jwt_filter
node_jwt_filter -->|"validates"| node_jwt_service
node_security_config -->|"uses"| node_user_details
node_auth_controller -->|"calls"| node_auth_service
node_auth_service -->|"issues"| node_jwt_service
node_auth_service -->|"persists"| node_user_repo
node_content_controller -->|"calls"| node_content_service
node_content_service -->|"persists"| node_content_repo
node_content_service -->|"coordinates"| node_tag_service
node_content_service -->|"indexes"| node_search_service
node_content_service -->|"manages"| node_content_item
node_content_service -->|"creates"| node_note
node_content_service -->|"creates"| node_link
node_tag_controller -->|"calls"| node_tag_service
node_tag_service -->|"persists"| node_tag_repo
node_search_controller -->|"calls"| node_search_service
node_search_service -->|"queries"| node_link_search_repo
node_search_service -->|"queries"| node_note_search_repo
node_search_service -->|"reads"| node_link_index
node_search_service -->|"reads"| node_note_index
node_parse_controller -->|"calls"| node_parse_service
node_parse_service -->|"builds"| node_link
node_parse_service -.->|"may save"| node_content_service
node_export_service -->|"reads"| node_content_repo
node_export_service -->|"reads"| node_tag_repo
node_export_service -->|"reads"| node_user_repo
node_user_details -->|"loads"| node_user_repo
node_content_repo -->|"stores"| node_content_item
node_tag_repo -->|"stores"| node_tag
node_user_repo -->|"stores"| node_user

click node_app "https://github.com/smerteliko/knowledge-hub-backend-spring/blob/master/src/main/java/com/smerteliko/knowledgehub/KnowledgehubApplication.java"
click node_auth_controller "https://github.com/smerteliko/knowledge-hub-backend-spring/blob/master/src/main/java/com/smerteliko/knowledgehub/controller/AuthController.java"
click node_content_controller "https://github.com/smerteliko/knowledge-hub-backend-spring/blob/master/src/main/java/com/smerteliko/knowledgehub/controller/ContentController.java"
click node_tag_controller "https://github.com/smerteliko/knowledge-hub-backend-spring/blob/master/src/main/java/com/smerteliko/knowledgehub/controller/TagController.java"
click node_search_controller "https://github.com/smerteliko/knowledge-hub-backend-spring/blob/master/src/main/java/com/smerteliko/knowledgehub/controller/SearchController.java"
click node_parse_controller "https://github.com/smerteliko/knowledge-hub-backend-spring/blob/master/src/main/java/com/smerteliko/knowledgehub/controller/LinkParsingController.java"
click node_auth_service "https://github.com/smerteliko/knowledge-hub-backend-spring/blob/master/src/main/java/com/smerteliko/knowledgehub/service/auth/AuthService.java"
click node_content_service "https://github.com/smerteliko/knowledge-hub-backend-spring/blob/master/src/main/java/com/smerteliko/knowledgehub/service/content/ContentService.java"
click node_tag_service "https://github.com/smerteliko/knowledge-hub-backend-spring/blob/master/src/main/java/com/smerteliko/knowledgehub/service/tag/TagService.java"
click node_search_service "https://github.com/smerteliko/knowledge-hub-backend-spring/blob/master/src/main/java/com/smerteliko/knowledgehub/service/search/SearchService.java"
click node_parse_service "https://github.com/smerteliko/knowledge-hub-backend-spring/blob/master/src/main/java/com/smerteliko/knowledgehub/service/parse/LinkParsingService.java"
click node_export_service "https://github.com/smerteliko/knowledge-hub-backend-spring/blob/master/src/main/java/com/smerteliko/knowledgehub/service/export/ExportService.java"
click node_jwt_service "https://github.com/smerteliko/knowledge-hub-backend-spring/blob/master/src/main/java/com/smerteliko/knowledgehub/service/JWT/JwtService.java"
click node_user_details "https://github.com/smerteliko/knowledge-hub-backend-spring/blob/master/src/main/java/com/smerteliko/knowledgehub/service/security/JpaUserDetailsService.java"
click node_security_config "https://github.com/smerteliko/knowledge-hub-backend-spring/blob/master/src/main/java/com/smerteliko/knowledgehub/config/SecurityConfig.java"
click node_jwt_filter "https://github.com/smerteliko/knowledge-hub-backend-spring/blob/master/src/main/java/com/smerteliko/knowledgehub/config/JwtAuthenticationFilter.java"
click node_es_config "https://github.com/smerteliko/knowledge-hub-backend-spring/blob/master/src/main/java/com/smerteliko/knowledgehub/config/ElasticsearchConfig.java"
click node_content_repo "https://github.com/smerteliko/knowledge-hub-backend-spring/blob/master/src/main/java/com/smerteliko/knowledgehub/repository/ContentItemRepository.java"
click node_tag_repo "https://github.com/smerteliko/knowledge-hub-backend-spring/blob/master/src/main/java/com/smerteliko/knowledgehub/repository/TagRepository.java"
click node_user_repo "https://github.com/smerteliko/knowledge-hub-backend-spring/blob/master/src/main/java/com/smerteliko/knowledgehub/repository/UserRepository.java"
click node_link_search_repo "https://github.com/smerteliko/knowledge-hub-backend-spring/blob/master/src/main/java/com/smerteliko/knowledgehub/es/repository/LinkSearchRepository.java"
click node_note_search_repo "https://github.com/smerteliko/knowledge-hub-backend-spring/blob/master/src/main/java/com/smerteliko/knowledgehub/es/repository/NoteSearchRepository.java"
click node_content_item "https://github.com/smerteliko/knowledge-hub-backend-spring/blob/master/src/main/java/com/smerteliko/knowledgehub/entity/ContentItem.java"
click node_note "https://github.com/smerteliko/knowledge-hub-backend-spring/blob/master/src/main/java/com/smerteliko/knowledgehub/entity/Note.java"
click node_link "https://github.com/smerteliko/knowledge-hub-backend-spring/blob/master/src/main/java/com/smerteliko/knowledgehub/entity/Link.java"
click node_tag "https://github.com/smerteliko/knowledge-hub-backend-spring/blob/master/src/main/java/com/smerteliko/knowledgehub/entity/Tag.java"
click node_user "https://github.com/smerteliko/knowledge-hub-backend-spring/blob/master/src/main/java/com/smerteliko/knowledgehub/entity/User.java"
click node_role "https://github.com/smerteliko/knowledge-hub-backend-spring/blob/master/src/main/java/com/smerteliko/knowledgehub/entity/enums/Role.java"
click node_link_index "https://github.com/smerteliko/knowledge-hub-backend-spring/blob/master/src/main/java/com/smerteliko/knowledgehub/es/entity/LinkIndex.java"
click node_note_index "https://github.com/smerteliko/knowledge-hub-backend-spring/blob/master/src/main/java/com/smerteliko/knowledgehub/es/entity/NoteIndex.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_controller,node_content_controller,node_tag_controller,node_search_controller,node_parse_controller toneBlue
class node_auth_service,node_content_service,node_tag_service,node_search_service,node_parse_service,node_export_service,node_content_item,node_note,node_link,node_tag,node_user,node_role toneAmber
class node_content_repo,node_tag_repo,node_user_repo,node_link_search_repo,node_note_search_repo,node_link_index,node_note_index toneMint
class node_app,node_jwt_service,node_user_details,node_security_config,node_jwt_filter,node_es_config toneRose
```

## Components

### API layer

HTTP controllers and request/response DTOs

- [Auth API](https://github.com/smerteliko/knowledge-hub-backend-spring/blob/master/src/main/java/com/smerteliko/knowledgehub/controller/AuthController.java): HTTP controller · Login and registration endpoints · `src/main/java/com/smerteliko/knowledgehub/controller/AuthController.java`
- [Content API](https://github.com/smerteliko/knowledge-hub-backend-spring/blob/master/src/main/java/com/smerteliko/knowledgehub/controller/ContentController.java): HTTP controller · Note and link CRUD endpoints · `src/main/java/com/smerteliko/knowledgehub/controller/ContentController.java`
- [Tag API](https://github.com/smerteliko/knowledge-hub-backend-spring/blob/master/src/main/java/com/smerteliko/knowledgehub/controller/TagController.java): HTTP controller · Tag management endpoints · `src/main/java/com/smerteliko/knowledgehub/controller/TagController.java`
- [Search API](https://github.com/smerteliko/knowledge-hub-backend-spring/blob/master/src/main/java/com/smerteliko/knowledgehub/controller/SearchController.java): HTTP controller · Search query endpoints · `src/main/java/com/smerteliko/knowledgehub/controller/SearchController.java`
- [Parse API](https://github.com/smerteliko/knowledge-hub-backend-spring/blob/master/src/main/java/com/smerteliko/knowledgehub/controller/LinkParsingController.java): HTTP controller · Link metadata parsing endpoint · `src/main/java/com/smerteliko/knowledgehub/controller/LinkParsingController.java`

### Core domain

Business services and entities

- [Auth service](https://github.com/smerteliko/knowledge-hub-backend-spring/blob/master/src/main/java/com/smerteliko/knowledgehub/service/auth/AuthService.java): auth orchestration · Registration and authentication flow · `src/main/java/com/smerteliko/knowledgehub/service/auth/AuthService.java`
- [Content service](https://github.com/smerteliko/knowledge-hub-backend-spring/blob/master/src/main/java/com/smerteliko/knowledgehub/service/content/ContentService.java): content orchestration · Coordinates note and link persistence · `src/main/java/com/smerteliko/knowledgehub/service/content/ContentService.java`
- [Tag service](https://github.com/smerteliko/knowledge-hub-backend-spring/blob/master/src/main/java/com/smerteliko/knowledgehub/service/tag/TagService.java): tag orchestration · Tag lifecycle and assignment · `src/main/java/com/smerteliko/knowledgehub/service/tag/TagService.java`
- [Search service](https://github.com/smerteliko/knowledge-hub-backend-spring/blob/master/src/main/java/com/smerteliko/knowledgehub/service/search/SearchService.java): search orchestration · Query execution across search indices · `src/main/java/com/smerteliko/knowledgehub/service/search/SearchService.java`
- [Parse service](https://github.com/smerteliko/knowledge-hub-backend-spring/blob/master/src/main/java/com/smerteliko/knowledgehub/service/parse/LinkParsingService.java): web enrichment · Fetches and extracts link metadata · `src/main/java/com/smerteliko/knowledgehub/service/parse/LinkParsingService.java`
- [Export service](https://github.com/smerteliko/knowledge-hub-backend-spring/blob/master/src/main/java/com/smerteliko/knowledgehub/service/export/ExportService.java): report generation · Builds PDF and Markdown exports · `src/main/java/com/smerteliko/knowledgehub/service/export/ExportService.java`
- [Content item](https://github.com/smerteliko/knowledge-hub-backend-spring/blob/master/src/main/java/com/smerteliko/knowledgehub/entity/ContentItem.java): domain entity · Shared base content model · `src/main/java/com/smerteliko/knowledgehub/entity/ContentItem.java`
- [Note](https://github.com/smerteliko/knowledge-hub-backend-spring/blob/master/src/main/java/com/smerteliko/knowledgehub/entity/Note.java): domain entity · Text knowledge item · `src/main/java/com/smerteliko/knowledgehub/entity/Note.java`
- [Link](https://github.com/smerteliko/knowledge-hub-backend-spring/blob/master/src/main/java/com/smerteliko/knowledgehub/entity/Link.java): domain entity · URL-backed knowledge item · `src/main/java/com/smerteliko/knowledgehub/entity/Link.java`
- [Tag](https://github.com/smerteliko/knowledge-hub-backend-spring/blob/master/src/main/java/com/smerteliko/knowledgehub/entity/Tag.java): domain entity · Content classification · `src/main/java/com/smerteliko/knowledgehub/entity/Tag.java`
- [User](https://github.com/smerteliko/knowledge-hub-backend-spring/blob/master/src/main/java/com/smerteliko/knowledgehub/entity/User.java): domain entity · Authenticated account · `src/main/java/com/smerteliko/knowledgehub/entity/User.java`
- [Role](https://github.com/smerteliko/knowledge-hub-backend-spring/blob/master/src/main/java/com/smerteliko/knowledgehub/entity/enums/Role.java): enum · Authorization scope · `src/main/java/com/smerteliko/knowledgehub/entity/enums/Role.java`

### Persistence

Relational and search-backed storage

- [Content repo](https://github.com/smerteliko/knowledge-hub-backend-spring/blob/master/src/main/java/com/smerteliko/knowledgehub/repository/ContentItemRepository.java): JPA repository · Relational boundary for content items · `src/main/java/com/smerteliko/knowledgehub/repository/ContentItemRepository.java`
- [Tag repo](https://github.com/smerteliko/knowledge-hub-backend-spring/blob/master/src/main/java/com/smerteliko/knowledgehub/repository/TagRepository.java): JPA repository · Relational tag persistence · `src/main/java/com/smerteliko/knowledgehub/repository/TagRepository.java`
- [User repo](https://github.com/smerteliko/knowledge-hub-backend-spring/blob/master/src/main/java/com/smerteliko/knowledgehub/repository/UserRepository.java): JPA repository · Relational user persistence · `src/main/java/com/smerteliko/knowledgehub/repository/UserRepository.java`
- [Link search](https://github.com/smerteliko/knowledge-hub-backend-spring/blob/master/src/main/java/com/smerteliko/knowledgehub/es/repository/LinkSearchRepository.java): ES repository · Search access for links · `src/main/java/com/smerteliko/knowledgehub/es/repository/LinkSearchRepository.java`
- [Note search](https://github.com/smerteliko/knowledge-hub-backend-spring/blob/master/src/main/java/com/smerteliko/knowledgehub/es/repository/NoteSearchRepository.java): ES repository · Search access for notes · `src/main/java/com/smerteliko/knowledgehub/es/repository/NoteSearchRepository.java`
- [Link index](https://github.com/smerteliko/knowledge-hub-backend-spring/blob/master/src/main/java/com/smerteliko/knowledgehub/es/entity/LinkIndex.java): ES document · Indexed link search view · `src/main/java/com/smerteliko/knowledgehub/es/entity/LinkIndex.java`
- [Note index](https://github.com/smerteliko/knowledge-hub-backend-spring/blob/master/src/main/java/com/smerteliko/knowledgehub/es/entity/NoteIndex.java): ES document · Indexed note search view · `src/main/java/com/smerteliko/knowledgehub/es/entity/NoteIndex.java`

### Infrastructure

Security and runtime configuration

- [App](https://github.com/smerteliko/knowledge-hub-backend-spring/blob/master/src/main/java/com/smerteliko/knowledgehub/KnowledgehubApplication.java): Spring Boot entrypoint · Application bootstrap · `src/main/java/com/smerteliko/knowledgehub/KnowledgehubApplication.java`
- [JWT service](https://github.com/smerteliko/knowledge-hub-backend-spring/blob/master/src/main/java/com/smerteliko/knowledgehub/service/JWT/JwtService.java): token handling · Creates and validates JWTs · `src/main/java/com/smerteliko/knowledgehub/service/JWT/JwtService.java`
- [User details](https://github.com/smerteliko/knowledge-hub-backend-spring/blob/master/src/main/java/com/smerteliko/knowledgehub/service/security/JpaUserDetailsService.java): security adapter · Loads users for Spring Security · `src/main/java/com/smerteliko/knowledgehub/service/security/JpaUserDetailsService.java`
- [Security config](https://github.com/smerteliko/knowledge-hub-backend-spring/blob/master/src/main/java/com/smerteliko/knowledgehub/config/SecurityConfig.java): security config · HTTP security and filter chain · `src/main/java/com/smerteliko/knowledgehub/config/SecurityConfig.java`
- [JWT filter](https://github.com/smerteliko/knowledge-hub-backend-spring/blob/master/src/main/java/com/smerteliko/knowledgehub/config/JwtAuthenticationFilter.java): auth filter · Validates bearer tokens on requests · `src/main/java/com/smerteliko/knowledgehub/config/JwtAuthenticationFilter.java`
- [ES config](https://github.com/smerteliko/knowledge-hub-backend-spring/blob/master/src/main/java/com/smerteliko/knowledgehub/config/ElasticsearchConfig.java): search config · Elasticsearch client and wiring · `src/main/java/com/smerteliko/knowledgehub/config/ElasticsearchConfig.java`

## Connections

- App → Security config: loads · Application starts with security and web configuration
- App → ES config: loads · Application starts with search infrastructure
- Security config → JWT filter: uses · Security chain includes JWT validation
- JWT filter → JWT service: validates · Filter verifies bearer tokens
- Security config → User details: uses · Security authenticates against JPA users
- Auth API → Auth service: calls · Login and registration flow
- Auth service → JWT service: issues · Creates JWT responses
- Auth service → User repo: persists · Stores and loads users
- Content API → Content service: calls · CRUD operations for notes and links
- Content service → Content repo: persists · Writes authoritative content state
- Content service → Tag service: coordinates · Assigns and resolves tags
- Content service → Search service: indexes · Reflects content into search views
- Content service → Content item: manages · Works through shared content abstraction
- Content service → Note: creates · Handles note creation
- Content service → Link: creates · Handles link creation
- Tag API → Tag service: calls · Tag management endpoints
- Tag service → Tag repo: persists · Stores tag records
- Search API → Search service: calls · Search queries enter here
- Search service → Link search: queries · Searches link index
- Search service → Note search: queries · Searches note index
- Search service → Link index: reads · Uses link search document shape
- Search service → Note index: reads · Uses note search document shape
- Parse API → Parse service: calls · URL parsing and enrichment requests
- Parse service → Link: builds · Produces structured link data
- Parse service → Content service: may save · Parsed links flow into content management
- Export service → Content repo: reads · Exports stored knowledge
- Export service → Tag repo: reads · Includes tags in reports
- Export service → User repo: reads · Can scope exports by owner
- User details → User repo: loads · Resolves users for authentication
- Content repo → Content item: stores · Relational store for shared content
- Tag repo → Tag: stores · Relational store for tags
- User repo → User: stores · Relational store for accounts
