# fey888/diary-ai-app architecture

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

- Interactive diagram: https://gitdiagram.com/fey888/diary-ai-app
- Repository: https://github.com/fey888/diary-ai-app

## Overview

Diary AI is a NestJS backend where clients authenticate, create and manage private paginated diaries, then request or retrieve a structured AI analysis. The analysis service checks ownership, reuses saved results, coordinates a per-diary lock, calls the AI service, and saves the result. The graph preserves account/profile, diary, and analysis stages plus their persistence and OpenAI integration. Edges follow excerpts or README documentation; some runtime wiring and unsampled implementations are represented only at the documented subsystem level.

Main entry points: [`src/app.module.ts`](https://github.com/fey888/diary-ai-app/blob/main/src/app.module.ts) (NestJS Runtime), [`src/diary/diary.service.ts`](https://github.com/fey888/diary-ai-app/blob/main/src/diary/diary.service.ts) (Diary CRUD and Lock), [`src/diary_analysis/diary_analysis.service.ts`](https://github.com/fey888/diary-ai-app/blob/main/src/diary_analysis/diary_analysis.service.ts) (Analysis Orchestration), [`src/auth/auth.controller.ts`](https://github.com/fey888/diary-ai-app/blob/main/src/auth/auth.controller.ts) (Auth Endpoints)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_identity["Identity and Users"]
  node_auth_api["Auth Endpoints<br/>[auth.controller.ts]"]
  node_auth_logic["JWT and Auth<br/>[auth.service.ts]"]
  node_token_validation["Token Validation"]
  node_user_api["User Endpoints"]
  node_user_logic["User Profiles<br/>[users.service.ts]"]
  node_user_entity["User Records<br/>[user.entity.ts]"]
end

subgraph group_diary["Diary Management"]
  node_diary_api["Diary Endpoints"]
  node_diary_logic["Diary CRUD and Lock<br/>[diary.service.ts]"]
  node_diary_entity["Diary Records<br/>[diary.entity.ts]"]
end

subgraph group_analysis["AI Analysis"]
  node_analysis_api["Analysis Endpoints"]
  node_analysis_logic["Analysis Orchestration"]
  node_analysis_entity["Analysis Records"]
  node_ai_logic["OpenAI Client<br/>[ai.service.ts]"]
end

subgraph group_runtime["API Runtime"]
  node_app_runtime["NestJS Runtime<br/>[app.module.ts]"]
end

node_client(("Client"))
node_openai{{"OpenAI API"}}
node_postgres[("PostgreSQL")]

node_client -->|"signs up or in"| node_auth_api
node_auth_api -->|"delegates auth"| node_auth_logic
node_auth_logic -->|"looks up and updates"| node_user_logic
node_auth_api -->|"guards refresh requests"| node_token_validation
node_client -->|"manages profile"| node_user_api
node_user_api -->|"delegates profile"| node_user_logic
node_user_logic -->|"reads and writes"| node_postgres
node_client -->|"manages diaries"| node_diary_api
node_diary_api -->|"delegates CRUD"| node_diary_logic
node_diary_logic -->|"resolves owner"| node_user_logic
node_diary_logic -->|"reads and writes"| node_postgres
node_client -->|"requests analysis"| node_analysis_api
node_analysis_api -->|"delegates analysis"| node_analysis_logic
node_analysis_logic -->|"checks and locks diary"| node_diary_logic
node_analysis_logic -->|"analyzes diary text"| node_ai_logic
node_analysis_logic -->|"loads and saves results"| node_postgres
node_diary_logic -->|"stores diary records"| node_postgres
node_ai_logic -->|"requests structured analysis"| node_openai
node_app_runtime -->|"registers auth module"| node_auth_api
node_app_runtime -->|"registers users module"| node_user_api
node_app_runtime -->|"registers diary module"| node_diary_api
node_app_runtime -->|"registers analysis module"| node_analysis_api
node_app_runtime -->|"configures TypeORM"| node_postgres

click node_auth_api "https://github.com/fey888/diary-ai-app/blob/main/src/auth/auth.controller.ts"
click node_auth_logic "https://github.com/fey888/diary-ai-app/blob/main/src/auth/auth.service.ts"
click node_token_validation "https://github.com/fey888/diary-ai-app/blob/main/src/auth/strategy/access-token.strategy.ts"
click node_user_api "https://github.com/fey888/diary-ai-app/blob/main/src/users/users.controller.ts"
click node_user_logic "https://github.com/fey888/diary-ai-app/blob/main/src/users/users.service.ts"
click node_user_entity "https://github.com/fey888/diary-ai-app/blob/main/src/users/entities/user.entity.ts"
click node_diary_api "https://github.com/fey888/diary-ai-app/blob/main/src/diary/diary.controller.ts"
click node_diary_logic "https://github.com/fey888/diary-ai-app/blob/main/src/diary/diary.service.ts"
click node_diary_entity "https://github.com/fey888/diary-ai-app/blob/main/src/diary/entities/diary.entity.ts"
click node_analysis_api "https://github.com/fey888/diary-ai-app/blob/main/src/diary_analysis/diary_analysis.controller.ts"
click node_analysis_logic "https://github.com/fey888/diary-ai-app/blob/main/src/diary_analysis/diary_analysis.service.ts"
click node_analysis_entity "https://github.com/fey888/diary-ai-app/blob/main/src/diary_analysis/entities/diary_analysis.entity.ts"
click node_ai_logic "https://github.com/fey888/diary-ai-app/blob/main/src/ai/ai.service.ts"
click node_app_runtime "https://github.com/fey888/diary-ai-app/blob/main/src/app.module.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_auth_api,node_auth_logic,node_token_validation,node_user_api,node_user_logic,node_user_entity,node_client toneBlue
class node_diary_api,node_diary_logic,node_diary_entity,node_postgres toneAmber
class node_analysis_api,node_analysis_logic,node_analysis_entity,node_ai_logic,node_openai toneMint
class node_app_runtime toneRose
```

## Components

### Identity and Users

- [Auth Endpoints](https://github.com/fey888/diary-ai-app/blob/main/src/auth/auth.controller.ts): `src/auth/auth.controller.ts`
- [JWT and Auth](https://github.com/fey888/diary-ai-app/blob/main/src/auth/auth.service.ts): `src/auth/auth.service.ts`
- [Token Validation](https://github.com/fey888/diary-ai-app/blob/main/src/auth/strategy/access-token.strategy.ts): `src/auth/strategy/access-token.strategy.ts`
- [User Endpoints](https://github.com/fey888/diary-ai-app/blob/main/src/users/users.controller.ts): `src/users/users.controller.ts`
- [User Profiles](https://github.com/fey888/diary-ai-app/blob/main/src/users/users.service.ts): `src/users/users.service.ts`
- [User Records](https://github.com/fey888/diary-ai-app/blob/main/src/users/entities/user.entity.ts): `src/users/entities/user.entity.ts`

### Diary Management

- [Diary Endpoints](https://github.com/fey888/diary-ai-app/blob/main/src/diary/diary.controller.ts): `src/diary/diary.controller.ts`
- [Diary CRUD and Lock](https://github.com/fey888/diary-ai-app/blob/main/src/diary/diary.service.ts): `src/diary/diary.service.ts`
- [Diary Records](https://github.com/fey888/diary-ai-app/blob/main/src/diary/entities/diary.entity.ts): `src/diary/entities/diary.entity.ts`

### AI Analysis

- [Analysis Endpoints](https://github.com/fey888/diary-ai-app/blob/main/src/diary_analysis/diary_analysis.controller.ts): `src/diary_analysis/diary_analysis.controller.ts`
- [Analysis Orchestration](https://github.com/fey888/diary-ai-app/blob/main/src/diary_analysis/diary_analysis.service.ts): `src/diary_analysis/diary_analysis.service.ts`
- [Analysis Records](https://github.com/fey888/diary-ai-app/blob/main/src/diary_analysis/entities/diary_analysis.entity.ts): `src/diary_analysis/entities/diary_analysis.entity.ts`
- [OpenAI Client](https://github.com/fey888/diary-ai-app/blob/main/src/ai/ai.service.ts): `src/ai/ai.service.ts`

### API Runtime

- [NestJS Runtime](https://github.com/fey888/diary-ai-app/blob/main/src/app.module.ts): `src/app.module.ts`

### Other components

- **Client**
- **OpenAI API**
- **PostgreSQL**

## Connections

- Client → Auth Endpoints: signs up or in (evidence: `src/auth/auth.controller.ts`)
- Auth Endpoints → JWT and Auth: delegates auth (evidence: `src/auth/auth.controller.ts`)
- JWT and Auth → User Profiles: looks up and updates (evidence: `src/auth/auth.service.ts`)
- Auth Endpoints → Token Validation: guards refresh requests (evidence: `src/auth/auth.controller.ts`)
- Client → User Endpoints: manages profile (evidence: `src/users/users.controller.ts`)
- User Endpoints → User Profiles: delegates profile (evidence: `src/users/users.controller.ts`)
- User Profiles → PostgreSQL: reads and writes (evidence: `README.md`)
- Client → Diary Endpoints: manages diaries (evidence: `src/diary/diary.controller.ts`)
- Diary Endpoints → Diary CRUD and Lock: delegates CRUD (evidence: `src/diary/diary.controller.ts`)
- Diary CRUD and Lock → User Profiles: resolves owner (evidence: `src/diary/diary.service.ts`)
- Diary CRUD and Lock → PostgreSQL: reads and writes (evidence: `README.md`)
- Client → Analysis Endpoints: requests analysis (evidence: `src/diary_analysis/diary_analysis.controller.ts`)
- Analysis Endpoints → Analysis Orchestration: delegates analysis (evidence: `src/diary_analysis/diary_analysis.controller.ts`)
- Analysis Orchestration → Diary CRUD and Lock: checks and locks diary (evidence: `src/diary_analysis/diary_analysis.service.ts`)
- Analysis Orchestration → OpenAI Client: analyzes diary text (evidence: `src/diary_analysis/diary_analysis.service.ts`)
- Analysis Orchestration → PostgreSQL: loads and saves results (evidence: `src/diary_analysis/diary_analysis.service.ts`)
- Diary CRUD and Lock → PostgreSQL: stores diary records (evidence: `README.md`)
- OpenAI Client → OpenAI API: requests structured analysis (evidence: `README.md`)
- NestJS Runtime → Auth Endpoints: registers auth module (evidence: `src/app.module.ts`)
- NestJS Runtime → User Endpoints: registers users module (evidence: `src/app.module.ts`)
- NestJS Runtime → Diary Endpoints: registers diary module (evidence: `src/app.module.ts`)
- NestJS Runtime → Analysis Endpoints: registers analysis module (evidence: `src/app.module.ts`)
- NestJS Runtime → PostgreSQL: configures TypeORM (evidence: `src/app.module.ts`)
