# asan4ik/chat-app architecture

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

- Interactive diagram: https://gitdiagram.com/asan4ik/chat-app
- Repository: https://github.com/asan4ik/chat-app

## Overview

This is a Java messaging-pattern demo. Its implemented path in Main creates a user and message through the factory provider, then sends that message through a REST transport adapter to a client that records the result. The README also describes XMPP, message processing/encryption, and receiver notifications, but those flows are not wired in the sampled entry point; the facade directory is empty in the tree. Edges for those documented capabilities are marked dashed where source evidence is unavailable.

Main entry points: [`src/main/java/kz/aitu/chat/model/Message.java`](https://github.com/asan4ik/chat-app/blob/main/src/main/java/kz/aitu/chat/model/Message.java) (Message model), [`src/main/java/kz/aitu/chat/Main.java`](https://github.com/asan4ik/chat-app/blob/main/src/main/java/kz/aitu/chat/Main.java) (Main), [`src/main/java/kz/aitu/chat/factory/MessageFactoryProvider.java`](https://github.com/asan4ik/chat-app/blob/main/src/main/java/kz/aitu/chat/factory/MessageFactoryProvider.java) (Factory provider), [`src/main/java/kz/aitu/chat/adapter/RestChatTransportAdapter.java`](https://github.com/asan4ik/chat-app/blob/main/src/main/java/kz/aitu/chat/adapter/RestChatTransportAdapter.java) (REST adapter)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_entry["Application entry"]
  node_main["Main<br/>[Main.java]"]
end

subgraph group_creation["Message creation"]
  node_provider["Factory provider"]
  node_text_factory["Text factory"]
  node_image_factory["Image factory"]
  node_system_factory["System factory"]
  node_message["Message model<br/>[Message.java]"]
  node_user["User model<br/>[User.java]"]
  node_message_type["Message types<br/>[MessageType.java]"]
end

subgraph group_transport["Message transport"]
  node_transport_contract["Transport contract<br/>[ChatTransport.java]"]
  node_rest_adapter["REST adapter"]
  node_rest_client["REST client"]
  node_xmpp_adapter["XMPP adapter"]
  node_xmpp_client["XMPP client<br/>[XmppClient.java]"]
end

subgraph group_processing["Message processing"]
  node_processor["Message processor"]
  node_encryption["Encryption strategy"]
  node_listener["Message listener"]
end

node_sender(("Sender"))
node_receivers(("Receivers"))

node_sender -.->|"initiates"| node_main
node_main -->|"selects factory"| node_provider
node_provider -->|"registers"| node_text_factory
node_provider -->|"registers"| node_image_factory
node_provider -->|"registers"| node_system_factory
node_main -->|"creates"| node_message
node_text_factory -->|"creates"| node_message
node_image_factory -->|"creates"| node_message
node_system_factory -->|"creates"| node_message
node_message -->|"stores sender"| node_user
node_message -->|"stores type"| node_message_type
node_main -->|"sends via"| node_rest_adapter
node_rest_adapter -->|"implements"| node_transport_contract
node_rest_adapter -->|"posts message"| node_rest_client
node_main -->|"reads posted messages"| node_rest_client
node_xmpp_adapter -->|"implements"| node_transport_contract
node_xmpp_adapter -->|"delegates to"| node_xmpp_client
node_message -.->|"processed by"| node_processor
node_processor -.->|"uses strategy"| node_encryption
node_message -.->|"notifies"| node_listener
node_listener -.->|"notifies"| node_receivers

click node_main "https://github.com/asan4ik/chat-app/blob/main/src/main/java/kz/aitu/chat/Main.java"
click node_provider "https://github.com/asan4ik/chat-app/blob/main/src/main/java/kz/aitu/chat/factory/MessageFactoryProvider.java"
click node_text_factory "https://github.com/asan4ik/chat-app/blob/main/src/main/java/kz/aitu/chat/factory/TextMessageFactory.java"
click node_image_factory "https://github.com/asan4ik/chat-app/blob/main/src/main/java/kz/aitu/chat/factory/ImageMessageFactory.java"
click node_system_factory "https://github.com/asan4ik/chat-app/blob/main/src/main/java/kz/aitu/chat/factory/SystemMessageFactory.java"
click node_message "https://github.com/asan4ik/chat-app/blob/main/src/main/java/kz/aitu/chat/model/Message.java"
click node_user "https://github.com/asan4ik/chat-app/blob/main/src/main/java/kz/aitu/chat/model/User.java"
click node_message_type "https://github.com/asan4ik/chat-app/blob/main/src/main/java/kz/aitu/chat/model/MessageType.java"
click node_transport_contract "https://github.com/asan4ik/chat-app/blob/main/src/main/java/kz/aitu/chat/adapter/ChatTransport.java"
click node_rest_adapter "https://github.com/asan4ik/chat-app/blob/main/src/main/java/kz/aitu/chat/adapter/RestChatTransportAdapter.java"
click node_rest_client "https://github.com/asan4ik/chat-app/blob/main/src/main/java/kz/aitu/chat/adapter/RestChatClient.java"
click node_xmpp_adapter "https://github.com/asan4ik/chat-app/blob/main/src/main/java/kz/aitu/chat/adapter/XmppChatTransportAdapter.java"
click node_xmpp_client "https://github.com/asan4ik/chat-app/blob/main/src/main/java/kz/aitu/chat/adapter/XmppClient.java"
click node_processor "https://github.com/asan4ik/chat-app/blob/main/src/main/java/kz/aitu/chat/decorator/MessageProcessor.java"
click node_encryption "https://github.com/asan4ik/chat-app/blob/main/src/main/java/kz/aitu/chat/strategy/EncryptionStrategy.java"
click node_listener "https://github.com/asan4ik/chat-app/blob/main/src/main/java/kz/aitu/chat/observer/MessageListener.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_main toneBlue
class node_provider,node_text_factory,node_image_factory,node_system_factory,node_message,node_user,node_message_type toneAmber
class node_transport_contract,node_rest_adapter,node_rest_client,node_xmpp_adapter,node_xmpp_client toneMint
class node_processor,node_encryption,node_listener toneRose
class node_sender,node_receivers toneIndigo
```

## Components

### Application entry

- [Main](https://github.com/asan4ik/chat-app/blob/main/src/main/java/kz/aitu/chat/Main.java): `src/main/java/kz/aitu/chat/Main.java`

### Message creation

- [Factory provider](https://github.com/asan4ik/chat-app/blob/main/src/main/java/kz/aitu/chat/factory/MessageFactoryProvider.java): `src/main/java/kz/aitu/chat/factory/MessageFactoryProvider.java`
- [Text factory](https://github.com/asan4ik/chat-app/blob/main/src/main/java/kz/aitu/chat/factory/TextMessageFactory.java): `src/main/java/kz/aitu/chat/factory/TextMessageFactory.java`
- [Image factory](https://github.com/asan4ik/chat-app/blob/main/src/main/java/kz/aitu/chat/factory/ImageMessageFactory.java): `src/main/java/kz/aitu/chat/factory/ImageMessageFactory.java`
- [System factory](https://github.com/asan4ik/chat-app/blob/main/src/main/java/kz/aitu/chat/factory/SystemMessageFactory.java): `src/main/java/kz/aitu/chat/factory/SystemMessageFactory.java`
- [Message model](https://github.com/asan4ik/chat-app/blob/main/src/main/java/kz/aitu/chat/model/Message.java): `src/main/java/kz/aitu/chat/model/Message.java`
- [User model](https://github.com/asan4ik/chat-app/blob/main/src/main/java/kz/aitu/chat/model/User.java): `src/main/java/kz/aitu/chat/model/User.java`
- [Message types](https://github.com/asan4ik/chat-app/blob/main/src/main/java/kz/aitu/chat/model/MessageType.java): `src/main/java/kz/aitu/chat/model/MessageType.java`

### Message transport

- [Transport contract](https://github.com/asan4ik/chat-app/blob/main/src/main/java/kz/aitu/chat/adapter/ChatTransport.java): `src/main/java/kz/aitu/chat/adapter/ChatTransport.java`
- [REST adapter](https://github.com/asan4ik/chat-app/blob/main/src/main/java/kz/aitu/chat/adapter/RestChatTransportAdapter.java): `src/main/java/kz/aitu/chat/adapter/RestChatTransportAdapter.java`
- [REST client](https://github.com/asan4ik/chat-app/blob/main/src/main/java/kz/aitu/chat/adapter/RestChatClient.java): `src/main/java/kz/aitu/chat/adapter/RestChatClient.java`
- [XMPP adapter](https://github.com/asan4ik/chat-app/blob/main/src/main/java/kz/aitu/chat/adapter/XmppChatTransportAdapter.java): `src/main/java/kz/aitu/chat/adapter/XmppChatTransportAdapter.java`
- [XMPP client](https://github.com/asan4ik/chat-app/blob/main/src/main/java/kz/aitu/chat/adapter/XmppClient.java): `src/main/java/kz/aitu/chat/adapter/XmppClient.java`

### Message processing

- [Message processor](https://github.com/asan4ik/chat-app/blob/main/src/main/java/kz/aitu/chat/decorator/MessageProcessor.java): `src/main/java/kz/aitu/chat/decorator/MessageProcessor.java`
- [Encryption strategy](https://github.com/asan4ik/chat-app/blob/main/src/main/java/kz/aitu/chat/strategy/EncryptionStrategy.java): `src/main/java/kz/aitu/chat/strategy/EncryptionStrategy.java`
- [Message listener](https://github.com/asan4ik/chat-app/blob/main/src/main/java/kz/aitu/chat/observer/MessageListener.java): `src/main/java/kz/aitu/chat/observer/MessageListener.java`

### Other components

- **Sender**
- **Receivers**

## Connections

- Sender → Main: initiates
- Main → Factory provider: selects factory (evidence: `src/main/java/kz/aitu/chat/Main.java`)
- Factory provider → Text factory: registers (evidence: `src/main/java/kz/aitu/chat/factory/MessageFactoryProvider.java`)
- Factory provider → Image factory: registers (evidence: `src/main/java/kz/aitu/chat/factory/MessageFactoryProvider.java`)
- Factory provider → System factory: registers (evidence: `src/main/java/kz/aitu/chat/factory/MessageFactoryProvider.java`)
- Main → Message model: creates (evidence: `src/main/java/kz/aitu/chat/Main.java`)
- Text factory → Message model: creates (evidence: `src/main/java/kz/aitu/chat/factory/TextMessageFactory.java`)
- Image factory → Message model: creates (evidence: `src/main/java/kz/aitu/chat/factory/ImageMessageFactory.java`)
- System factory → Message model: creates (evidence: `src/main/java/kz/aitu/chat/factory/SystemMessageFactory.java`)
- Message model → User model: stores sender (evidence: `src/main/java/kz/aitu/chat/model/Message.java`)
- Message model → Message types: stores type (evidence: `src/main/java/kz/aitu/chat/model/Message.java`)
- Main → REST adapter: sends via (evidence: `src/main/java/kz/aitu/chat/Main.java`)
- REST adapter → Transport contract: implements (evidence: `src/main/java/kz/aitu/chat/adapter/RestChatTransportAdapter.java`)
- REST adapter → REST client: posts message (evidence: `src/main/java/kz/aitu/chat/adapter/RestChatTransportAdapter.java`)
- Main → REST client: reads posted messages (evidence: `src/main/java/kz/aitu/chat/Main.java`)
- XMPP adapter → Transport contract: implements (evidence: `src/main/java/kz/aitu/chat/adapter/XmppChatTransportAdapter.java`)
- XMPP adapter → XMPP client: delegates to (evidence: `src/main/java/kz/aitu/chat/adapter/XmppChatTransportAdapter.java`)
- Message model → Message processor: processed by (evidence: `README.md`)
- Message processor → Encryption strategy: uses strategy (evidence: `README.md`)
- Message model → Message listener: notifies (evidence: `README.md`)
- Message listener → Receivers: notifies (evidence: `README.md`)
