# gianse/zapchat architecture

> Architecture diagram of the GitHub repository gianse/zapchat, 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/gianse/zapchat
- Repository: https://github.com/gianse/zapchat

## Overview

ZapChat is a Node.js/MongoDB messaging application. Its main workflow is user interaction through the terminal menu or optional web interface, followed by coordinated account, contact, conversation, message, and reaction operations that persist in MongoDB. The graph includes the shared model and validation layers. The README documents messaging capabilities beyond the sampled excerpts; those are represented as product responsibilities, while uncertain implementation links are omitted. Source excerpts and the SOURCE INDEX support the shown internal wiring.

Main entry points: [`src/services/ChatService.js`](https://github.com/gianse/zapchat/blob/main/src/services/ChatService.js) (Chat workflows), [`src/models/Modelo.js`](https://github.com/gianse/zapchat/blob/main/src/models/Modelo.js) (Entity CRUD), [`src/database/Manutencao.js`](https://github.com/gianse/zapchat/blob/main/src/database/Manutencao.js) (Database maintenance), [`src/models/Usuario.js`](https://github.com/gianse/zapchat/blob/main/src/models/Usuario.js) (User accounts)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_interfaces["User interfaces"]
  node_menu["Terminal menu<br/>[Menu.js]"]
  node_terminal["Terminal output<br/>[Terminal.js]"]
  node_webui["Web test UI<br/>[app.js]"]
  node_webserver["Web server<br/>[ServidorWeb.js]"]
  node_webroutes["Web routes<br/>[rotas.js]"]
  node_app["Application lifecycle<br/>[Aplicacao.js]"]
end

subgraph group_domain["Messaging domain"]
  node_chatservice["Chat workflows<br/>[ChatService.js]"]
  node_usuario["User accounts<br/>[Usuario.js]"]
  node_contato["Contacts<br/>[Contato.js]"]
  node_conversa["Conversations<br/>[Conversa.js]"]
  node_mensagem["Messages<br/>[Mensagem.js]"]
  node_reacao["Reactions<br/>[Reacao.js]"]
end

subgraph group_persistence["Persistence"]
  node_model["Entity CRUD<br/>[Modelo.js]"]
  node_database["MongoDB connection<br/>[Database.js]"]
  node_maintenance["Database maintenance<br/>[Manutencao.js]"]
end

subgraph group_shared["Shared services"]
  node_validator["Validation<br/>[Validador.js]"]
  node_security["Password security<br/>[Seguranca.js]"]
  node_logger["Logging<br/>[Logger.js]"]
end

node_user(("User"))
node_mongo[("MongoDB")]

node_user -->|"uses"| node_menu
node_menu -->|"invokes"| node_chatservice
node_menu -->|"displays through"| node_terminal
node_user -.->|"uses optionally"| node_webui
node_webui -.->|"sends requests"| node_webserver
node_webserver -->|"dispatches"| node_webroutes
node_webroutes -->|"invokes"| node_chatservice
node_webroutes -->|"uses"| node_usuario
node_webroutes -->|"uses"| node_maintenance
node_app -->|"connects"| node_database
node_app -->|"reports errors"| node_terminal
node_chatservice -->|"coordinates"| node_usuario
node_chatservice -->|"coordinates"| node_contato
node_chatservice -->|"coordinates"| node_conversa
node_chatservice -->|"coordinates"| node_mensagem
node_chatservice -->|"coordinates"| node_reacao
node_chatservice -->|"accesses"| node_database
node_usuario -->|"inherits CRUD"| node_model
node_contato -->|"inherits CRUD"| node_model
node_conversa -->|"inherits CRUD"| node_model
node_mensagem -->|"inherits CRUD"| node_model
node_reacao -->|"inherits CRUD"| node_model
node_model -->|"reads and writes"| node_database
node_database -->|"connects to"| node_mongo
node_maintenance -->|"maintains indices"| node_usuario
node_maintenance -->|"maintains indices"| node_contato
node_maintenance -->|"maintains indices"| node_conversa
node_maintenance -->|"maintains indices"| node_mensagem
node_maintenance -->|"maintains indices"| node_reacao
node_usuario -->|"validates with"| node_validator
node_usuario -->|"hashes passwords"| node_security
node_model -->|"validates through"| node_validator
node_app -->|"records events"| node_logger
node_chatservice -->|"records events"| node_logger

click node_menu "https://github.com/gianse/zapchat/blob/main/src/cli/Menu.js"
click node_terminal "https://github.com/gianse/zapchat/blob/main/src/cli/Terminal.js"
click node_webui "https://github.com/gianse/zapchat/blob/main/web/publico/app.js"
click node_webserver "https://github.com/gianse/zapchat/blob/main/web/ServidorWeb.js"
click node_webroutes "https://github.com/gianse/zapchat/blob/main/web/rotas.js"
click node_app "https://github.com/gianse/zapchat/blob/main/src/Aplicacao.js"
click node_chatservice "https://github.com/gianse/zapchat/blob/main/src/services/ChatService.js"
click node_usuario "https://github.com/gianse/zapchat/blob/main/src/models/Usuario.js"
click node_contato "https://github.com/gianse/zapchat/blob/main/src/models/Contato.js"
click node_conversa "https://github.com/gianse/zapchat/blob/main/src/models/Conversa.js"
click node_mensagem "https://github.com/gianse/zapchat/blob/main/src/models/Mensagem.js"
click node_reacao "https://github.com/gianse/zapchat/blob/main/src/models/Reacao.js"
click node_model "https://github.com/gianse/zapchat/blob/main/src/models/Modelo.js"
click node_database "https://github.com/gianse/zapchat/blob/main/src/database/Database.js"
click node_maintenance "https://github.com/gianse/zapchat/blob/main/src/database/Manutencao.js"
click node_validator "https://github.com/gianse/zapchat/blob/main/src/utils/Validador.js"
click node_security "https://github.com/gianse/zapchat/blob/main/src/utils/Seguranca.js"
click node_logger "https://github.com/gianse/zapchat/blob/main/src/utils/Logger.js"

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_menu,node_terminal,node_webui,node_webserver,node_webroutes,node_app,node_user toneBlue
class node_chatservice,node_usuario,node_contato,node_conversa,node_mensagem,node_reacao,node_mongo toneAmber
class node_model,node_database,node_maintenance toneMint
class node_validator,node_security,node_logger toneRose
```

## Components

### User interfaces

- [Terminal menu](https://github.com/gianse/zapchat/blob/main/src/cli/Menu.js): `src/cli/Menu.js`
- [Terminal output](https://github.com/gianse/zapchat/blob/main/src/cli/Terminal.js): `src/cli/Terminal.js`
- [Web test UI](https://github.com/gianse/zapchat/blob/main/web/publico/app.js): `web/publico/app.js`
- [Web server](https://github.com/gianse/zapchat/blob/main/web/ServidorWeb.js): `web/ServidorWeb.js`
- [Web routes](https://github.com/gianse/zapchat/blob/main/web/rotas.js): `web/rotas.js`
- [Application lifecycle](https://github.com/gianse/zapchat/blob/main/src/Aplicacao.js): `src/Aplicacao.js`

### Messaging domain

- [Chat workflows](https://github.com/gianse/zapchat/blob/main/src/services/ChatService.js): `src/services/ChatService.js`
- [User accounts](https://github.com/gianse/zapchat/blob/main/src/models/Usuario.js): `src/models/Usuario.js`
- [Contacts](https://github.com/gianse/zapchat/blob/main/src/models/Contato.js): `src/models/Contato.js`
- [Conversations](https://github.com/gianse/zapchat/blob/main/src/models/Conversa.js): `src/models/Conversa.js`
- [Messages](https://github.com/gianse/zapchat/blob/main/src/models/Mensagem.js): `src/models/Mensagem.js`
- [Reactions](https://github.com/gianse/zapchat/blob/main/src/models/Reacao.js): `src/models/Reacao.js`

### Persistence

- [Entity CRUD](https://github.com/gianse/zapchat/blob/main/src/models/Modelo.js): `src/models/Modelo.js`
- [MongoDB connection](https://github.com/gianse/zapchat/blob/main/src/database/Database.js): `src/database/Database.js`
- [Database maintenance](https://github.com/gianse/zapchat/blob/main/src/database/Manutencao.js): `src/database/Manutencao.js`

### Shared services

- [Validation](https://github.com/gianse/zapchat/blob/main/src/utils/Validador.js): `src/utils/Validador.js`
- [Password security](https://github.com/gianse/zapchat/blob/main/src/utils/Seguranca.js): `src/utils/Seguranca.js`
- [Logging](https://github.com/gianse/zapchat/blob/main/src/utils/Logger.js): `src/utils/Logger.js`

### Other components

- **User**
- **MongoDB**

## Connections

- User → Terminal menu: uses (evidence: `README.md`)
- Terminal menu → Chat workflows: invokes (evidence: `src/cli/Menu.js`)
- Terminal menu → Terminal output: displays through (evidence: `src/cli/Menu.js`)
- User → Web test UI: uses optionally (evidence: `README.md`)
- Web test UI → Web server: sends requests
- Web server → Web routes: dispatches (evidence: `web/ServidorWeb.js`)
- Web routes → Chat workflows: invokes (evidence: `web/rotas.js`)
- Web routes → User accounts: uses (evidence: `web/rotas.js`)
- Web routes → Database maintenance: uses (evidence: `web/rotas.js`)
- Application lifecycle → MongoDB connection: connects (evidence: `src/Aplicacao.js`)
- Application lifecycle → Terminal output: reports errors (evidence: `src/Aplicacao.js`)
- Chat workflows → User accounts: coordinates (evidence: `src/services/ChatService.js`)
- Chat workflows → Contacts: coordinates (evidence: `src/services/ChatService.js`)
- Chat workflows → Conversations: coordinates (evidence: `src/services/ChatService.js`)
- Chat workflows → Messages: coordinates (evidence: `src/services/ChatService.js`)
- Chat workflows → Reactions: coordinates (evidence: `src/services/ChatService.js`)
- Chat workflows → MongoDB connection: accesses (evidence: `src/services/ChatService.js`)
- User accounts → Entity CRUD: inherits CRUD (evidence: `README.md`)
- Contacts → Entity CRUD: inherits CRUD (evidence: `README.md`)
- Conversations → Entity CRUD: inherits CRUD (evidence: `README.md`)
- Messages → Entity CRUD: inherits CRUD (evidence: `README.md`)
- Reactions → Entity CRUD: inherits CRUD (evidence: `README.md`)
- Entity CRUD → MongoDB connection: reads and writes (evidence: `src/models/Modelo.js`)
- MongoDB connection → MongoDB: connects to (evidence: `src/database/Database.js`)
- Database maintenance → User accounts: maintains indices (evidence: `src/database/Manutencao.js`)
- Database maintenance → Contacts: maintains indices (evidence: `src/database/Manutencao.js`)
- Database maintenance → Conversations: maintains indices (evidence: `src/database/Manutencao.js`)
- Database maintenance → Messages: maintains indices (evidence: `src/database/Manutencao.js`)
- Database maintenance → Reactions: maintains indices (evidence: `src/database/Manutencao.js`)
- User accounts → Validation: validates with (evidence: `src/models/Usuario.js`)
- User accounts → Password security: hashes passwords (evidence: `src/models/Usuario.js`)
- Entity CRUD → Validation: validates through (evidence: `src/models/Modelo.js`)
- Application lifecycle → Logging: records events (evidence: `src/Aplicacao.js`)
- Chat workflows → Logging: records events (evidence: `src/services/ChatService.js`)
