# god3tier/chattingservice architecture

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

- Interactive diagram: https://gitdiagram.com/god3tier/chattingservice
- Repository: https://github.com/god3tier/chattingservice

## Overview

This is a terminal chat client paired with an Actix WebSocket server. A user selects a room and username, enters the connected-room view, and sends text through the client WebSocket to a server room, which fans messages out to members and persists room history when the room closes. The map includes the terminal UI, client transport, server room/user runtime, and MongoDB. Some client orchestration and UI wiring are unsampled; those relationships are omitted or marked unverified rather than inferred as certain.

Main entry points: [`server/src/roomwebserver/controller.rs`](https://github.com/god3tier/chattingservice/blob/main/server/src/roomwebserver/controller.rs) (Room endpoints), [`server/src/roomwebserver/server.rs`](https://github.com/god3tier/chattingservice/blob/main/server/src/roomwebserver/server.rs) (Room broadcast), [`client/src/app/app_control.rs`](https://github.com/god3tier/chattingservice/blob/main/client/src/app/app_control.rs) (App controller), [`client/src/app/connected_room.rs`](https://github.com/god3tier/chattingservice/blob/main/client/src/app/connected_room.rs) (Connected room)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_client_ui["Client interface"]
  node_client_main["Terminal startup<br/>[main.rs]"]
  node_app_control["App controller<br/>[app_control.rs]"]
  node_app_state["App state<br/>[appstate.rs]"]
  node_waiting_room["Room selection"]
  node_connected_room["Connected room<br/>[connected_room.rs]"]
  node_message_widget["Chat display<br/>[messages.rs]"]
  node_text_widget["Text input display"]
  node_button_widget["Selection buttons<br/>[filling_buttons.rs]"]
end

subgraph group_client_transport["Client transport"]
  node_client_socket["WebSocket transport"]
  node_response_model["Incoming response<br/>[mod.rs]"]
end

subgraph group_server_runtime["Server runtime"]
  node_server_main["HTTP server setup<br/>[main.rs]"]
  node_room_controller["Room endpoints<br/>[controller.rs]"]
  node_room_runtime["Room broadcast<br/>[server.rs]"]
  node_user_session["User session<br/>[mod.rs]"]
  node_message_model["Chat message<br/>[message.rs]"]
  node_room_details["Room request data<br/>[dto.rs]"]
end

subgraph group_persistence["Persistence"]
  node_mongo[("MongoDB")]
end

node_person(("Chat user"))

node_person -->|"uses"| node_client_main
node_client_main -->|"starts"| node_app_control
node_app_control -.->|"coordinates"| node_app_state
node_app_control -.->|"shows"| node_waiting_room
node_app_control -.->|"shows"| node_connected_room
node_waiting_room -->|"renders"| node_text_widget
node_waiting_room -->|"renders"| node_button_widget
node_connected_room -->|"renders"| node_message_widget
node_message_widget -->|"uses input mode"| node_connected_room
node_connected_room -->|"starts transport"| node_client_socket
node_client_socket -->|"constructs"| node_response_model
node_client_socket -->|"WebSocket request"| node_room_controller
node_server_main -->|"routes requests"| node_room_controller
node_server_main -->|"connects database"| node_mongo
node_room_controller -->|"accepts query"| node_room_details
node_room_controller -->|"creates or joins"| node_room_runtime
node_room_controller -->|"creates session"| node_user_session
node_room_controller -->|"loads history"| node_mongo
node_room_runtime -->|"adds member"| node_user_session
node_user_session -->|"submits messages"| node_room_runtime
node_room_runtime -->|"broadcasts messages"| node_message_model
node_user_session -->|"creates messages"| node_message_model
node_room_runtime -->|"stores history"| node_mongo

click node_client_main "https://github.com/god3tier/chattingservice/blob/main/client/src/main.rs"
click node_app_control "https://github.com/god3tier/chattingservice/blob/main/client/src/app/app_control.rs"
click node_app_state "https://github.com/god3tier/chattingservice/blob/main/client/src/app/appstate.rs"
click node_waiting_room "https://github.com/god3tier/chattingservice/blob/main/client/src/app/disconnected_room.rs"
click node_connected_room "https://github.com/god3tier/chattingservice/blob/main/client/src/app/connected_room.rs"
click node_message_widget "https://github.com/god3tier/chattingservice/blob/main/client/src/app/widget/messages.rs"
click node_text_widget "https://github.com/god3tier/chattingservice/blob/main/client/src/app/widget/display_text_box.rs"
click node_button_widget "https://github.com/god3tier/chattingservice/blob/main/client/src/app/widget/filling_buttons.rs"
click node_client_socket "https://github.com/god3tier/chattingservice/blob/main/client/src/websocket_function.rs"
click node_response_model "https://github.com/god3tier/chattingservice/blob/main/client/src/response/mod.rs"
click node_server_main "https://github.com/god3tier/chattingservice/blob/main/server/src/main.rs"
click node_room_controller "https://github.com/god3tier/chattingservice/blob/main/server/src/roomwebserver/controller.rs"
click node_room_runtime "https://github.com/god3tier/chattingservice/blob/main/server/src/roomwebserver/server.rs"
click node_user_session "https://github.com/god3tier/chattingservice/blob/main/server/src/user/mod.rs"
click node_message_model "https://github.com/god3tier/chattingservice/blob/main/server/src/message.rs"
click node_room_details "https://github.com/god3tier/chattingservice/blob/main/server/src/dto.rs"

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_client_main,node_app_control,node_app_state,node_waiting_room,node_connected_room,node_message_widget,node_text_widget,node_button_widget,node_person toneBlue
class node_client_socket,node_response_model toneAmber
class node_server_main,node_room_controller,node_room_runtime,node_user_session,node_message_model,node_room_details toneMint
class node_mongo toneRose
```

## Components

### Client interface

- [Terminal startup](https://github.com/god3tier/chattingservice/blob/main/client/src/main.rs): `client/src/main.rs`
- [App controller](https://github.com/god3tier/chattingservice/blob/main/client/src/app/app_control.rs): `client/src/app/app_control.rs`
- [App state](https://github.com/god3tier/chattingservice/blob/main/client/src/app/appstate.rs): `client/src/app/appstate.rs`
- [Room selection](https://github.com/god3tier/chattingservice/blob/main/client/src/app/disconnected_room.rs): `client/src/app/disconnected_room.rs`
- [Connected room](https://github.com/god3tier/chattingservice/blob/main/client/src/app/connected_room.rs): `client/src/app/connected_room.rs`
- [Chat display](https://github.com/god3tier/chattingservice/blob/main/client/src/app/widget/messages.rs): `client/src/app/widget/messages.rs`
- [Text input display](https://github.com/god3tier/chattingservice/blob/main/client/src/app/widget/display_text_box.rs): `client/src/app/widget/display_text_box.rs`
- [Selection buttons](https://github.com/god3tier/chattingservice/blob/main/client/src/app/widget/filling_buttons.rs): `client/src/app/widget/filling_buttons.rs`

### Client transport

- [WebSocket transport](https://github.com/god3tier/chattingservice/blob/main/client/src/websocket_function.rs): `client/src/websocket_function.rs`
- [Incoming response](https://github.com/god3tier/chattingservice/blob/main/client/src/response/mod.rs): `client/src/response/mod.rs`

### Server runtime

- [HTTP server setup](https://github.com/god3tier/chattingservice/blob/main/server/src/main.rs): `server/src/main.rs`
- [Room endpoints](https://github.com/god3tier/chattingservice/blob/main/server/src/roomwebserver/controller.rs): `server/src/roomwebserver/controller.rs`
- [Room broadcast](https://github.com/god3tier/chattingservice/blob/main/server/src/roomwebserver/server.rs): `server/src/roomwebserver/server.rs`
- [User session](https://github.com/god3tier/chattingservice/blob/main/server/src/user/mod.rs): `server/src/user/mod.rs`
- [Chat message](https://github.com/god3tier/chattingservice/blob/main/server/src/message.rs): `server/src/message.rs`
- [Room request data](https://github.com/god3tier/chattingservice/blob/main/server/src/dto.rs): `server/src/dto.rs`

### Persistence

- **MongoDB**

### Other components

- **Chat user**

## Connections

- Chat user → Terminal startup: uses
- Terminal startup → App controller: starts (evidence: `client/src/main.rs`)
- App controller → App state: coordinates
- App controller → Room selection: shows
- App controller → Connected room: shows
- Room selection → Text input display: renders (evidence: `client/src/app/disconnected_room.rs`)
- Room selection → Selection buttons: renders (evidence: `client/src/app/disconnected_room.rs`)
- Connected room → Chat display: renders (evidence: `client/src/app/connected_room.rs`)
- Chat display → Connected room: uses input mode (evidence: `client/src/app/widget/messages.rs`)
- Connected room → WebSocket transport: starts transport (evidence: `client/src/app/connected_room.rs`)
- WebSocket transport → Incoming response: constructs (evidence: `client/src/websocket_function.rs`)
- WebSocket transport → Room endpoints: WebSocket request
- HTTP server setup → Room endpoints: routes requests (evidence: `server/src/main.rs`)
- HTTP server setup → MongoDB: connects database (evidence: `server/src/main.rs`)
- Room endpoints → Room request data: accepts query (evidence: `server/src/roomwebserver/controller.rs`)
- Room endpoints → Room broadcast: creates or joins (evidence: `server/src/roomwebserver/controller.rs`)
- Room endpoints → User session: creates session (evidence: `server/src/roomwebserver/controller.rs`)
- Room endpoints → MongoDB: loads history (evidence: `server/src/roomwebserver/controller.rs`)
- Room broadcast → User session: adds member (evidence: `server/src/roomwebserver/server.rs`)
- User session → Room broadcast: submits messages (evidence: `server/src/user/mod.rs`)
- Room broadcast → Chat message: broadcasts messages (evidence: `server/src/roomwebserver/server.rs`)
- User session → Chat message: creates messages (evidence: `server/src/user/mod.rs`)
- Room broadcast → MongoDB: stores history (evidence: `server/src/roomwebserver/server.rs`)
