# mihalypal/prf-forum architecture

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

- Interactive diagram: https://gitdiagram.com/mihalypal/prf-forum
- Repository: https://github.com/mihalypal/prf-forum

## Overview

PRF-Forum is a browser-based forum with an Angular frontend and an Express/Mongoose backend. Users register or log in, browse topics, open discussions, comment and like; authenticated users can manage their topics, while administrators can manage users. The frontend routes screens through services that make credentialed HTTP requests to backend routes, which apply authentication and persist forum data in MongoDB. The graph includes documented routes and major README capabilities; several screens and backend route handlers were not sampled, so their internal relationships are not asserted.

Main entry points: [`backend/src/routes/routes.ts`](https://github.com/mihalypal/prf-forum/blob/main/backend/src/routes/routes.ts) (Express routes), [`frontend/src/app/app.routes.ts`](https://github.com/mihalypal/prf-forum/blob/main/frontend/src/app/app.routes.ts) (App routes), [`backend/src/model/Topic.ts`](https://github.com/mihalypal/prf-forum/blob/main/backend/src/model/Topic.ts) (Topic model), [`frontend/src/app/shared/services/auth.service.ts`](https://github.com/mihalypal/prf-forum/blob/main/frontend/src/app/shared/services/auth.service.ts) (Auth service)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_web["Angular forum"]
  node_routes["App routes<br/>[app.routes.ts]"]
  node_login["Login and signup<br/>[login.component.ts]"]
  node_topics["Topic listing"]
  node_topicview["Discussion view"]
  node_mytopics["My topics"]
  node_useradmin["User management"]
end

subgraph group_identity["Identity and access"]
  node_authsvc["Auth service<br/>[auth.service.ts]"]
  node_guards["Access guards<br/>[auth.guard.ts]"]
  node_usersvc["User service<br/>[user.service.ts]"]
  node_passport["Passport auth<br/>[passport.ts]"]
end

subgraph group_forum["Forum operations"]
  node_api["Express routes<br/>[routes.ts]"]
  node_server["Server setup<br/>[index.ts]"]
  node_topicui["Topic service<br/>[topic.service.ts]"]
  node_dialog["Confirm dialog"]
end

subgraph group_persistence["MongoDB models"]
  node_user[("User model<br/>[User.ts]")]
  node_topic[("Topic model<br/>[Topic.ts]")]
  node_comment[("Comment model<br/>[Comment.ts]")]
  node_topiclikes[("Topic likes<br/>[UsersLikesTopic.ts]")]
  node_commentlikes[("Comment likes")]
end

node_visitor(("Forum user"))
node_mongo[("MongoDB")]

node_visitor -->|"opens screens"| node_routes
node_routes -->|"routes to"| node_login
node_routes -->|"routes to"| node_topics
node_routes -->|"routes to"| node_topicview
node_routes -->|"guards route"| node_mytopics
node_routes -->|"guards route"| node_useradmin
node_login -->|"authenticates"| node_authsvc
node_useradmin -->|"manages users"| node_usersvc
node_useradmin -->|"checks access"| node_authsvc
node_mytopics -->|"loads topics"| node_topicui
node_topics -->|"loads and edits"| node_topicui
node_topicview -->|"comments and likes"| node_topicui
node_topics -->|"confirms deletion"| node_dialog
node_topicview -->|"confirms deletion"| node_dialog
node_authsvc -->|"HTTP auth requests"| node_api
node_topicui -->|"HTTP topic requests"| node_api
node_usersvc -.->|"HTTP user requests"| node_api
node_guards -->|"checks status"| node_authsvc
node_server -->|"configures routes"| node_api
node_server -->|"configures auth"| node_passport
node_server -->|"loads model"| node_user
node_passport -->|"authenticates users"| node_user
node_api -->|"queries users"| node_user
node_api -->|"queries topics"| node_topic
node_api -->|"creates comments"| node_comment
node_api -->|"records topic likes"| node_topiclikes
node_api -->|"handles comment likes"| node_commentlikes
node_topic -->|"embeds comments"| node_comment
node_comment -->|"embeds likes"| node_commentlikes
node_topic -->|"embeds likes"| node_topiclikes
node_user -->|"persists records"| node_mongo
node_topic -->|"persists records"| node_mongo

click node_routes "https://github.com/mihalypal/prf-forum/blob/main/frontend/src/app/app.routes.ts"
click node_login "https://github.com/mihalypal/prf-forum/blob/main/frontend/src/app/login/login.component.ts"
click node_topics "https://github.com/mihalypal/prf-forum/blob/main/frontend/src/app/topics/topics.component.ts"
click node_topicview "https://github.com/mihalypal/prf-forum/blob/main/frontend/src/app/topic-view/topic-view.component.ts"
click node_mytopics "https://github.com/mihalypal/prf-forum/blob/main/frontend/src/app/my-topics/my-topics.component.ts"
click node_useradmin "https://github.com/mihalypal/prf-forum/blob/main/frontend/src/app/user-management/user-management.component.ts"
click node_authsvc "https://github.com/mihalypal/prf-forum/blob/main/frontend/src/app/shared/services/auth.service.ts"
click node_guards "https://github.com/mihalypal/prf-forum/blob/main/frontend/src/app/shared/guards/auth.guard.ts"
click node_usersvc "https://github.com/mihalypal/prf-forum/blob/main/frontend/src/app/shared/services/user.service.ts"
click node_api "https://github.com/mihalypal/prf-forum/blob/main/backend/src/routes/routes.ts"
click node_server "https://github.com/mihalypal/prf-forum/blob/main/backend/src/index.ts"
click node_topicui "https://github.com/mihalypal/prf-forum/blob/main/frontend/src/app/shared/services/topic.service.ts"
click node_dialog "https://github.com/mihalypal/prf-forum/blob/main/frontend/src/app/shared/components/dialog/dialog.component.ts"
click node_passport "https://github.com/mihalypal/prf-forum/blob/main/backend/src/passport/passport.ts"
click node_user "https://github.com/mihalypal/prf-forum/blob/main/backend/src/model/User.ts"
click node_topic "https://github.com/mihalypal/prf-forum/blob/main/backend/src/model/Topic.ts"
click node_comment "https://github.com/mihalypal/prf-forum/blob/main/backend/src/model/Comment.ts"
click node_topiclikes "https://github.com/mihalypal/prf-forum/blob/main/backend/src/model/UsersLikesTopic.ts"
click node_commentlikes "https://github.com/mihalypal/prf-forum/blob/main/backend/src/model/UsersLikesComment.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_routes,node_login,node_topics,node_topicview,node_mytopics,node_useradmin,node_visitor toneBlue
class node_authsvc,node_guards,node_usersvc,node_passport,node_mongo toneAmber
class node_api,node_server,node_topicui,node_dialog toneMint
class node_user,node_topic,node_comment,node_topiclikes,node_commentlikes toneRose
```

## Components

### Angular forum

- [App routes](https://github.com/mihalypal/prf-forum/blob/main/frontend/src/app/app.routes.ts): `frontend/src/app/app.routes.ts`
- [Login and signup](https://github.com/mihalypal/prf-forum/blob/main/frontend/src/app/login/login.component.ts): `frontend/src/app/login/login.component.ts`
- [Topic listing](https://github.com/mihalypal/prf-forum/blob/main/frontend/src/app/topics/topics.component.ts): `frontend/src/app/topics/topics.component.ts`
- [Discussion view](https://github.com/mihalypal/prf-forum/blob/main/frontend/src/app/topic-view/topic-view.component.ts): `frontend/src/app/topic-view/topic-view.component.ts`
- [My topics](https://github.com/mihalypal/prf-forum/blob/main/frontend/src/app/my-topics/my-topics.component.ts): `frontend/src/app/my-topics/my-topics.component.ts`
- [User management](https://github.com/mihalypal/prf-forum/blob/main/frontend/src/app/user-management/user-management.component.ts): `frontend/src/app/user-management/user-management.component.ts`

### Identity and access

- [Auth service](https://github.com/mihalypal/prf-forum/blob/main/frontend/src/app/shared/services/auth.service.ts): `frontend/src/app/shared/services/auth.service.ts`
- [Access guards](https://github.com/mihalypal/prf-forum/blob/main/frontend/src/app/shared/guards/auth.guard.ts): `frontend/src/app/shared/guards/auth.guard.ts`
- [User service](https://github.com/mihalypal/prf-forum/blob/main/frontend/src/app/shared/services/user.service.ts): `frontend/src/app/shared/services/user.service.ts`
- [Passport auth](https://github.com/mihalypal/prf-forum/blob/main/backend/src/passport/passport.ts): `backend/src/passport/passport.ts`

### Forum operations

- [Express routes](https://github.com/mihalypal/prf-forum/blob/main/backend/src/routes/routes.ts): `backend/src/routes/routes.ts`
- [Server setup](https://github.com/mihalypal/prf-forum/blob/main/backend/src/index.ts): `backend/src/index.ts`
- [Topic service](https://github.com/mihalypal/prf-forum/blob/main/frontend/src/app/shared/services/topic.service.ts): `frontend/src/app/shared/services/topic.service.ts`
- [Confirm dialog](https://github.com/mihalypal/prf-forum/blob/main/frontend/src/app/shared/components/dialog/dialog.component.ts): `frontend/src/app/shared/components/dialog/dialog.component.ts`

### MongoDB models

- [User model](https://github.com/mihalypal/prf-forum/blob/main/backend/src/model/User.ts): `backend/src/model/User.ts`
- [Topic model](https://github.com/mihalypal/prf-forum/blob/main/backend/src/model/Topic.ts): `backend/src/model/Topic.ts`
- [Comment model](https://github.com/mihalypal/prf-forum/blob/main/backend/src/model/Comment.ts): `backend/src/model/Comment.ts`
- [Topic likes](https://github.com/mihalypal/prf-forum/blob/main/backend/src/model/UsersLikesTopic.ts): `backend/src/model/UsersLikesTopic.ts`
- [Comment likes](https://github.com/mihalypal/prf-forum/blob/main/backend/src/model/UsersLikesComment.ts): `backend/src/model/UsersLikesComment.ts`

### Other components

- **Forum user**
- **MongoDB**

## Connections

- Forum user → App routes: opens screens (evidence: `frontend/src/app/app.routes.ts`)
- App routes → Login and signup: routes to (evidence: `frontend/src/app/app.routes.ts`)
- App routes → Topic listing: routes to (evidence: `frontend/src/app/app.routes.ts`)
- App routes → Discussion view: routes to (evidence: `frontend/src/app/app.routes.ts`)
- App routes → My topics: guards route (evidence: `frontend/src/app/app.routes.ts`)
- App routes → User management: guards route (evidence: `frontend/src/app/app.routes.ts`)
- Login and signup → Auth service: authenticates (evidence: `frontend/src/app/shared/services/auth.service.ts`)
- User management → User service: manages users (evidence: `frontend/src/app/user-management/user-management.component.ts`)
- User management → Auth service: checks access (evidence: `frontend/src/app/user-management/user-management.component.ts`)
- My topics → Topic service: loads topics (evidence: `frontend/src/app/my-topics/my-topics.component.ts`)
- Topic listing → Topic service: loads and edits (evidence: `frontend/src/app/topics/topics.component.ts`)
- Discussion view → Topic service: comments and likes (evidence: `frontend/src/app/topic-view/topic-view.component.ts`)
- Topic listing → Confirm dialog: confirms deletion (evidence: `frontend/src/app/topics/topics.component.ts`)
- Discussion view → Confirm dialog: confirms deletion (evidence: `frontend/src/app/topic-view/topic-view.component.ts`)
- Auth service → Express routes: HTTP auth requests (evidence: `frontend/src/app/shared/services/auth.service.ts`)
- Topic service → Express routes: HTTP topic requests (evidence: `frontend/src/app/shared/services/topic.service.ts`)
- User service → Express routes: HTTP user requests
- Access guards → Auth service: checks status (evidence: `frontend/src/app/shared/guards/auth.guard.ts`)
- Server setup → Express routes: configures routes (evidence: `backend/src/index.ts`)
- Server setup → Passport auth: configures auth (evidence: `backend/src/index.ts`)
- Server setup → User model: loads model (evidence: `backend/src/index.ts`)
- Passport auth → User model: authenticates users (evidence: `backend/src/passport/passport.ts`)
- Express routes → User model: queries users (evidence: `backend/src/routes/routes.ts`)
- Express routes → Topic model: queries topics (evidence: `backend/src/routes/routes.ts`)
- Express routes → Comment model: creates comments (evidence: `backend/src/routes/routes.ts`)
- Express routes → Topic likes: records topic likes (evidence: `backend/src/routes/routes.ts`)
- Express routes → Comment likes: handles comment likes (evidence: `backend/src/routes/routes.ts`)
- Topic model → Comment model: embeds comments (evidence: `backend/src/model/Topic.ts`)
- Comment model → Comment likes: embeds likes (evidence: `backend/src/model/Comment.ts`)
- Topic model → Topic likes: embeds likes (evidence: `backend/src/model/Topic.ts`)
- User model → MongoDB: persists records (evidence: `backend/src/model/User.ts`)
- Topic model → MongoDB: persists records (evidence: `backend/src/model/Topic.ts`)
