# dimasdompit/skuytalk-api architecture

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

## Overview

This repository implements an Express messaging API: clients enter through the server, use login or user/contact/chat routes, and receive JSON responses; chat handlers also emit socket events. The main domain stages are authentication, user management, contacts, and chat, backed by MySQL and image-upload helpers. Relationships below are limited to README/SOURCE INDEX references and shown excerpts; several route-to-controller and model-to-database links are supported by the index rather than inspected implementations.

Main entry points: [`src/helpers/mysql.js`](https://github.com/dimasdompit/skuytalk-api/blob/master/src/helpers/mysql.js) (MySQL connection), [`src/routes/main_routes.js`](https://github.com/dimasdompit/skuytalk-api/blob/master/src/routes/main_routes.js) (Route dispatcher), [`src/controllers/controllers_users.js`](https://github.com/dimasdompit/skuytalk-api/blob/master/src/controllers/controllers_users.js) (User management), [`src/middleware/auth_middleware.js`](https://github.com/dimasdompit/skuytalk-api/blob/master/src/middleware/auth_middleware.js) (JWT verification)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_entry["API entry"]
  node_server["Express server<br/>[app.js]"]
  node_routes["Route dispatcher<br/>[main_routes.js]"]
end

subgraph group_identity["Identity and users"]
  node_auth_routes["Auth routes<br/>[auth_router.js]"]
  node_auth_controller["Login handler"]
  node_auth_model["Credential lookup<br/>[model_auth.js]"]
  node_auth_middleware["JWT verification<br/>[auth_middleware.js]"]
  node_users_routes["User routes<br/>[users_router.js]"]
  node_users_controller["User management"]
  node_users_model["User records<br/>[model_users.js]"]
end

subgraph group_messaging["Messaging"]
  node_chat_routes["Chat routes<br/>[chat_routes.js]"]
  node_chat_controller["Chat handler"]
  node_chat_model["Chat records<br/>[model_chat.js]"]
  node_contact_routes["Contact routes<br/>[contact_router.js]"]
  node_contact_controller["Contact handler"]
  node_contact_model["Contact records<br/>[model_contacts.js]"]
end

subgraph group_storage["Persistence and media"]
  node_mysql["MySQL connection<br/>[mysql.js]"]
  node_database[("MySQL database")]
  node_config["Runtime config<br/>[global.js]"]
  node_upload["Image upload<br/>[upload.js]"]
  node_images["Image files"]
  node_response["JSON response helper<br/>[myResponse.js]"]
end

node_client(("API client"))
node_socket_clients(("Socket clients"))

node_client -->|"sends requests"| node_server
node_server -->|"mounts routes"| node_routes
node_server -->|"loads connection"| node_mysql
node_routes -->|"mounts auth"| node_auth_routes
node_routes -->|"mounts chat"| node_chat_routes
node_routes -->|"mounts users"| node_users_routes
node_routes -->|"mounts contacts"| node_contact_routes
node_routes -->|"guards routes"| node_auth_middleware
node_auth_routes -->|"dispatches login"| node_auth_controller
node_auth_routes -->|"parses form"| node_upload
node_auth_controller -->|"looks up credentials"| node_auth_model
node_auth_controller -->|"signs tokens with"| node_config
node_auth_controller -->|"formats result"| node_response
node_auth_middleware -->|"verifies with keys"| node_config
node_auth_middleware -->|"formats errors"| node_response
node_users_routes -->|"dispatches requests"| node_users_controller
node_users_routes -->|"guards routes"| node_auth_middleware
node_users_routes -->|"parses uploads"| node_upload
node_users_controller -->|"manages users"| node_users_model
node_users_controller -->|"checks username"| node_auth_model
node_users_controller -->|"formats result"| node_response
node_users_controller -->|"deletes images"| node_images
node_chat_routes -->|"dispatches requests"| node_chat_controller
node_chat_routes -->|"imports guard"| node_auth_middleware
node_chat_routes -->|"parses forms"| node_upload
node_chat_controller -->|"reads and writes"| node_chat_model
node_chat_controller -->|"formats result"| node_response
node_chat_controller -->|"emits chat events"| node_socket_clients
node_contact_routes -->|"dispatches requests"| node_contact_controller
node_contact_routes -->|"parses uploads"| node_upload
node_contact_controller -->|"manages contacts"| node_contact_model
node_contact_controller -->|"formats result"| node_response
node_auth_model -->|"queries database"| node_mysql
node_users_model -->|"queries database"| node_mysql
node_chat_model -->|"queries database"| node_mysql
node_contact_model -->|"queries database"| node_mysql
node_mysql -->|"reads settings"| node_config
node_mysql -.->|"connects to"| node_database
node_upload -->|"stores uploads"| node_images

click node_server "https://github.com/dimasdompit/skuytalk-api/blob/master/app.js"
click node_routes "https://github.com/dimasdompit/skuytalk-api/blob/master/src/routes/main_routes.js"
click node_auth_routes "https://github.com/dimasdompit/skuytalk-api/blob/master/src/routes/auth_router.js"
click node_auth_controller "https://github.com/dimasdompit/skuytalk-api/blob/master/src/controllers/controllers_auth.js"
click node_auth_model "https://github.com/dimasdompit/skuytalk-api/blob/master/src/models/model_auth.js"
click node_auth_middleware "https://github.com/dimasdompit/skuytalk-api/blob/master/src/middleware/auth_middleware.js"
click node_users_routes "https://github.com/dimasdompit/skuytalk-api/blob/master/src/routes/users_router.js"
click node_users_controller "https://github.com/dimasdompit/skuytalk-api/blob/master/src/controllers/controllers_users.js"
click node_users_model "https://github.com/dimasdompit/skuytalk-api/blob/master/src/models/model_users.js"
click node_chat_routes "https://github.com/dimasdompit/skuytalk-api/blob/master/src/routes/chat_routes.js"
click node_chat_controller "https://github.com/dimasdompit/skuytalk-api/blob/master/src/controllers/controllers_chat.js"
click node_chat_model "https://github.com/dimasdompit/skuytalk-api/blob/master/src/models/model_chat.js"
click node_contact_routes "https://github.com/dimasdompit/skuytalk-api/blob/master/src/routes/contact_router.js"
click node_contact_controller "https://github.com/dimasdompit/skuytalk-api/blob/master/src/controllers/controllers_contact.js"
click node_contact_model "https://github.com/dimasdompit/skuytalk-api/blob/master/src/models/model_contacts.js"
click node_mysql "https://github.com/dimasdompit/skuytalk-api/blob/master/src/helpers/mysql.js"
click node_config "https://github.com/dimasdompit/skuytalk-api/blob/master/src/config/global.js"
click node_upload "https://github.com/dimasdompit/skuytalk-api/blob/master/src/helpers/upload.js"
click node_images "https://github.com/dimasdompit/skuytalk-api/tree/master/assets/images"
click node_response "https://github.com/dimasdompit/skuytalk-api/blob/master/src/helpers/myResponse.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_server,node_routes,node_client,node_socket_clients toneBlue
class node_auth_routes,node_auth_controller,node_auth_model,node_auth_middleware,node_users_routes,node_users_controller,node_users_model toneAmber
class node_chat_routes,node_chat_controller,node_chat_model,node_contact_routes,node_contact_controller,node_contact_model toneMint
class node_mysql,node_database,node_config,node_upload,node_images,node_response toneRose
```

## Components

### API entry

- [Express server](https://github.com/dimasdompit/skuytalk-api/blob/master/app.js): `app.js`
- [Route dispatcher](https://github.com/dimasdompit/skuytalk-api/blob/master/src/routes/main_routes.js): `src/routes/main_routes.js`

### Identity and users

- [Auth routes](https://github.com/dimasdompit/skuytalk-api/blob/master/src/routes/auth_router.js): `src/routes/auth_router.js`
- [Login handler](https://github.com/dimasdompit/skuytalk-api/blob/master/src/controllers/controllers_auth.js): `src/controllers/controllers_auth.js`
- [Credential lookup](https://github.com/dimasdompit/skuytalk-api/blob/master/src/models/model_auth.js): `src/models/model_auth.js`
- [JWT verification](https://github.com/dimasdompit/skuytalk-api/blob/master/src/middleware/auth_middleware.js): `src/middleware/auth_middleware.js`
- [User routes](https://github.com/dimasdompit/skuytalk-api/blob/master/src/routes/users_router.js): `src/routes/users_router.js`
- [User management](https://github.com/dimasdompit/skuytalk-api/blob/master/src/controllers/controllers_users.js): `src/controllers/controllers_users.js`
- [User records](https://github.com/dimasdompit/skuytalk-api/blob/master/src/models/model_users.js): `src/models/model_users.js`

### Messaging

- [Chat routes](https://github.com/dimasdompit/skuytalk-api/blob/master/src/routes/chat_routes.js): `src/routes/chat_routes.js`
- [Chat handler](https://github.com/dimasdompit/skuytalk-api/blob/master/src/controllers/controllers_chat.js): `src/controllers/controllers_chat.js`
- [Chat records](https://github.com/dimasdompit/skuytalk-api/blob/master/src/models/model_chat.js): `src/models/model_chat.js`
- [Contact routes](https://github.com/dimasdompit/skuytalk-api/blob/master/src/routes/contact_router.js): `src/routes/contact_router.js`
- [Contact handler](https://github.com/dimasdompit/skuytalk-api/blob/master/src/controllers/controllers_contact.js): `src/controllers/controllers_contact.js`
- [Contact records](https://github.com/dimasdompit/skuytalk-api/blob/master/src/models/model_contacts.js): `src/models/model_contacts.js`

### Persistence and media

- [MySQL connection](https://github.com/dimasdompit/skuytalk-api/blob/master/src/helpers/mysql.js): `src/helpers/mysql.js`
- **MySQL database**
- [Runtime config](https://github.com/dimasdompit/skuytalk-api/blob/master/src/config/global.js): `src/config/global.js`
- [Image upload](https://github.com/dimasdompit/skuytalk-api/blob/master/src/helpers/upload.js): `src/helpers/upload.js`
- [Image files](https://github.com/dimasdompit/skuytalk-api/tree/master/assets/images): `assets/images`
- [JSON response helper](https://github.com/dimasdompit/skuytalk-api/blob/master/src/helpers/myResponse.js): `src/helpers/myResponse.js`

### Other components

- **API client**
- **Socket clients**

## Connections

- API client → Express server: sends requests
- Express server → Route dispatcher: mounts routes (evidence: `app.js`)
- Express server → MySQL connection: loads connection (evidence: `app.js`)
- Route dispatcher → Auth routes: mounts auth (evidence: `src/routes/main_routes.js`)
- Route dispatcher → Chat routes: mounts chat (evidence: `src/routes/main_routes.js`)
- Route dispatcher → User routes: mounts users (evidence: `src/routes/main_routes.js`)
- Route dispatcher → Contact routes: mounts contacts (evidence: `src/routes/main_routes.js`)
- Route dispatcher → JWT verification: guards routes (evidence: `src/routes/main_routes.js`)
- Auth routes → Login handler: dispatches login (evidence: `src/routes/auth_router.js`)
- Auth routes → Image upload: parses form (evidence: `src/routes/auth_router.js`)
- Login handler → Credential lookup: looks up credentials (evidence: `src/controllers/controllers_auth.js`)
- Login handler → Runtime config: signs tokens with (evidence: `src/controllers/controllers_auth.js`)
- Login handler → JSON response helper: formats result (evidence: `src/controllers/controllers_auth.js`)
- JWT verification → Runtime config: verifies with keys (evidence: `src/middleware/auth_middleware.js`)
- JWT verification → JSON response helper: formats errors (evidence: `src/middleware/auth_middleware.js`)
- User routes → User management: dispatches requests (evidence: `src/routes/users_router.js`)
- User routes → JWT verification: guards routes (evidence: `src/routes/users_router.js`)
- User routes → Image upload: parses uploads (evidence: `src/routes/users_router.js`)
- User management → User records: manages users (evidence: `src/controllers/controllers_users.js`)
- User management → Credential lookup: checks username (evidence: `src/controllers/controllers_users.js`)
- User management → JSON response helper: formats result (evidence: `src/controllers/controllers_users.js`)
- User management → Image files: deletes images (evidence: `src/controllers/controllers_users.js`)
- Chat routes → Chat handler: dispatches requests (evidence: `src/routes/chat_routes.js`)
- Chat routes → JWT verification: imports guard (evidence: `src/routes/chat_routes.js`)
- Chat routes → Image upload: parses forms (evidence: `src/routes/chat_routes.js`)
- Chat handler → Chat records: reads and writes (evidence: `src/controllers/controllers_chat.js`)
- Chat handler → JSON response helper: formats result (evidence: `src/controllers/controllers_chat.js`)
- Chat handler → Socket clients: emits chat events (evidence: `src/controllers/controllers_chat.js`)
- Contact routes → Contact handler: dispatches requests (evidence: `src/routes/contact_router.js`)
- Contact routes → Image upload: parses uploads (evidence: `src/routes/contact_router.js`)
- Contact handler → Contact records: manages contacts (evidence: `src/controllers/controllers_contact.js`)
- Contact handler → JSON response helper: formats result (evidence: `src/controllers/controllers_contact.js`)
- Credential lookup → MySQL connection: queries database (evidence: `src/models/model_auth.js`)
- User records → MySQL connection: queries database (evidence: `src/models/model_users.js`)
- Chat records → MySQL connection: queries database (evidence: `src/models/model_chat.js`)
- Contact records → MySQL connection: queries database (evidence: `src/models/model_contacts.js`)
- MySQL connection → Runtime config: reads settings (evidence: `src/helpers/mysql.js`)
- MySQL connection → MySQL database: connects to
- Image upload → Image files: stores uploads (evidence: `src/helpers/upload.js`)
