# mehedi-m/supershop_pos_system architecture

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

- Interactive diagram: https://gitdiagram.com/mehedi-m/supershop_pos_system
- Repository: https://github.com/mehedi-m/supershop_pos_system

## Overview

This is a Super Shop API centered on business setup and account lifecycle: clients submit setup or registration requests, admins review pending users, and approved users can log in for token-based access. Authentication routes are the only sampled route family; the tree and source index also show organization, session, role, and access-control components, but do not establish broader business workflows. Edges reflect the sampled route wiring and service references; unsampled behavior is not inferred.

Main entry points: [`src/services/auth.service.js`](https://github.com/mehedi-m/supershop_pos_system/blob/main/src/services/auth.service.js) (Auth service), [`src/routes/auth.routes.js`](https://github.com/mehedi-m/supershop_pos_system/blob/main/src/routes/auth.routes.js) (Auth routes), [`src/app.js`](https://github.com/mehedi-m/supershop_pos_system/blob/main/src/app.js) (Express app), [`src/server.js`](https://github.com/mehedi-m/supershop_pos_system/blob/main/src/server.js) (Server startup)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_http["API and routing"]
  node_app["Express app<br/>[app.js]"]
  node_route_index["Route index<br/>[index.js]"]
  node_auth_routes["Auth routes<br/>[auth.routes.js]"]
  node_validation["Auth validation<br/>[auth.validation.js]"]
  node_async_handler["Async handler<br/>[async-handler.js]"]
end

subgraph group_identity["Identity workflows"]
  node_auth_controller["Auth controller<br/>[auth.controller.js]"]
  node_auth_service["Auth service<br/>[auth.service.js]"]
  node_auth_middleware["Authentication<br/>[auth.middleware.js]"]
  node_role_middleware["Role checks<br/>[role.middleware.js]"]
  node_token_utils["Token utilities<br/>[token.js]"]
  node_cookie_utils["Cookie options<br/>[cookie.js]"]
  node_session_model[("Sessions<br/>[session.model.js]")]
end

subgraph group_organization["Organization and access"]
  node_permissions["Permissions<br/>[permission.js]"]
  node_branch_access["Branch access"]
  node_counter_access["Counter access"]
  node_user_model[("Users<br/>[user.model.js]")]
  node_business_model[("Businesses<br/>[business.model.js]")]
  node_branch_model[("Branches<br/>[branch.model.js]")]
  node_counter_model[("Counters<br/>[counter.model.js]")]
  node_cashier_model[("Cashiers<br/>[cashier.model.js]")]
end

subgraph group_runtime["Runtime and persistence"]
  node_server["Server startup<br/>[server.js]"]
  node_db_config["Database connector<br/>[db.js]"]
  node_env_config["Environment config<br/>[env.js]"]
end

node_client(("API client"))

node_client -.->|"sends requests"| node_app
node_app -->|"mounts API routes"| node_route_index
node_route_index -->|"registers routes"| node_auth_routes
node_auth_routes -->|"dispatches requests"| node_auth_controller
node_auth_routes -->|"validates input"| node_validation
node_auth_routes -->|"authenticates protected routes"| node_auth_middleware
node_auth_routes -->|"checks admin role"| node_role_middleware
node_auth_routes -->|"wraps handlers"| node_async_handler
node_auth_controller -->|"calls workflows"| node_auth_service
node_auth_controller -->|"sets refresh cookie"| node_cookie_utils
node_auth_service -->|"reads and writes users"| node_user_model
node_auth_service -->|"creates business"| node_business_model
node_auth_service -->|"creates sessions"| node_session_model
node_auth_service -->|"checks and assigns branches"| node_branch_model
node_auth_service -->|"checks and assigns counters"| node_counter_model
node_auth_service -->|"generates and hashes tokens"| node_token_utils
node_auth_middleware -->|"loads user"| node_user_model
node_branch_access -->|"checks counter"| node_counter_model
node_branch_access -->|"checks branch"| node_branch_model
node_counter_access -->|"checks counter"| node_counter_model
node_server -->|"starts server"| node_app
node_server -->|"connects before listen"| node_db_config
node_server -->|"reads settings"| node_env_config
node_app -->|"configures CORS"| node_env_config
node_db_config -->|"reads database settings"| node_env_config

click node_app "https://github.com/mehedi-m/supershop_pos_system/blob/main/src/app.js"
click node_route_index "https://github.com/mehedi-m/supershop_pos_system/blob/main/src/routes/index.js"
click node_auth_routes "https://github.com/mehedi-m/supershop_pos_system/blob/main/src/routes/auth.routes.js"
click node_validation "https://github.com/mehedi-m/supershop_pos_system/blob/main/src/validations/auth.validation.js"
click node_async_handler "https://github.com/mehedi-m/supershop_pos_system/blob/main/src/utils/async-handler.js"
click node_auth_controller "https://github.com/mehedi-m/supershop_pos_system/blob/main/src/controllers/auth.controller.js"
click node_auth_service "https://github.com/mehedi-m/supershop_pos_system/blob/main/src/services/auth.service.js"
click node_auth_middleware "https://github.com/mehedi-m/supershop_pos_system/blob/main/src/middlewares/auth.middleware.js"
click node_role_middleware "https://github.com/mehedi-m/supershop_pos_system/blob/main/src/middlewares/role.middleware.js"
click node_token_utils "https://github.com/mehedi-m/supershop_pos_system/blob/main/src/utils/token.js"
click node_cookie_utils "https://github.com/mehedi-m/supershop_pos_system/blob/main/src/utils/cookie.js"
click node_permissions "https://github.com/mehedi-m/supershop_pos_system/blob/main/src/constants/permission.js"
click node_branch_access "https://github.com/mehedi-m/supershop_pos_system/blob/main/src/middlewares/brach-access.middleware.js"
click node_counter_access "https://github.com/mehedi-m/supershop_pos_system/blob/main/src/middlewares/counter-access.middleware.js"
click node_user_model "https://github.com/mehedi-m/supershop_pos_system/blob/main/src/models/user.model.js"
click node_business_model "https://github.com/mehedi-m/supershop_pos_system/blob/main/src/models/business.model.js"
click node_branch_model "https://github.com/mehedi-m/supershop_pos_system/blob/main/src/models/branch.model.js"
click node_counter_model "https://github.com/mehedi-m/supershop_pos_system/blob/main/src/models/counter.model.js"
click node_cashier_model "https://github.com/mehedi-m/supershop_pos_system/blob/main/src/models/cashier.model.js"
click node_session_model "https://github.com/mehedi-m/supershop_pos_system/blob/main/src/models/session.model.js"
click node_server "https://github.com/mehedi-m/supershop_pos_system/blob/main/src/server.js"
click node_db_config "https://github.com/mehedi-m/supershop_pos_system/blob/main/src/config/db.js"
click node_env_config "https://github.com/mehedi-m/supershop_pos_system/blob/main/src/config/env.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_app,node_route_index,node_auth_routes,node_validation,node_async_handler,node_client toneBlue
class node_auth_controller,node_auth_service,node_auth_middleware,node_role_middleware,node_token_utils,node_cookie_utils,node_session_model toneAmber
class node_permissions,node_branch_access,node_counter_access,node_user_model,node_business_model,node_branch_model,node_counter_model,node_cashier_model toneMint
class node_server,node_db_config,node_env_config toneRose
```

## Components

### API and routing

- [Express app](https://github.com/mehedi-m/supershop_pos_system/blob/main/src/app.js): `src/app.js`
- [Route index](https://github.com/mehedi-m/supershop_pos_system/blob/main/src/routes/index.js): `src/routes/index.js`
- [Auth routes](https://github.com/mehedi-m/supershop_pos_system/blob/main/src/routes/auth.routes.js): `src/routes/auth.routes.js`
- [Auth validation](https://github.com/mehedi-m/supershop_pos_system/blob/main/src/validations/auth.validation.js): `src/validations/auth.validation.js`
- [Async handler](https://github.com/mehedi-m/supershop_pos_system/blob/main/src/utils/async-handler.js): `src/utils/async-handler.js`

### Identity workflows

- [Auth controller](https://github.com/mehedi-m/supershop_pos_system/blob/main/src/controllers/auth.controller.js): `src/controllers/auth.controller.js`
- [Auth service](https://github.com/mehedi-m/supershop_pos_system/blob/main/src/services/auth.service.js): `src/services/auth.service.js`
- [Authentication](https://github.com/mehedi-m/supershop_pos_system/blob/main/src/middlewares/auth.middleware.js): `src/middlewares/auth.middleware.js`
- [Role checks](https://github.com/mehedi-m/supershop_pos_system/blob/main/src/middlewares/role.middleware.js): `src/middlewares/role.middleware.js`
- [Token utilities](https://github.com/mehedi-m/supershop_pos_system/blob/main/src/utils/token.js): `src/utils/token.js`
- [Cookie options](https://github.com/mehedi-m/supershop_pos_system/blob/main/src/utils/cookie.js): `src/utils/cookie.js`
- [Sessions](https://github.com/mehedi-m/supershop_pos_system/blob/main/src/models/session.model.js): `src/models/session.model.js`

### Organization and access

- [Permissions](https://github.com/mehedi-m/supershop_pos_system/blob/main/src/constants/permission.js): `src/constants/permission.js`
- [Branch access](https://github.com/mehedi-m/supershop_pos_system/blob/main/src/middlewares/brach-access.middleware.js): `src/middlewares/brach-access.middleware.js`
- [Counter access](https://github.com/mehedi-m/supershop_pos_system/blob/main/src/middlewares/counter-access.middleware.js): `src/middlewares/counter-access.middleware.js`
- [Users](https://github.com/mehedi-m/supershop_pos_system/blob/main/src/models/user.model.js): `src/models/user.model.js`
- [Businesses](https://github.com/mehedi-m/supershop_pos_system/blob/main/src/models/business.model.js): `src/models/business.model.js`
- [Branches](https://github.com/mehedi-m/supershop_pos_system/blob/main/src/models/branch.model.js): `src/models/branch.model.js`
- [Counters](https://github.com/mehedi-m/supershop_pos_system/blob/main/src/models/counter.model.js): `src/models/counter.model.js`
- [Cashiers](https://github.com/mehedi-m/supershop_pos_system/blob/main/src/models/cashier.model.js): `src/models/cashier.model.js`

### Runtime and persistence

- [Server startup](https://github.com/mehedi-m/supershop_pos_system/blob/main/src/server.js): `src/server.js`
- [Database connector](https://github.com/mehedi-m/supershop_pos_system/blob/main/src/config/db.js): `src/config/db.js`
- [Environment config](https://github.com/mehedi-m/supershop_pos_system/blob/main/src/config/env.js): `src/config/env.js`

### Other components

- **API client**

## Connections

- API client → Express app: sends requests
- Express app → Route index: mounts API routes (evidence: `src/app.js`)
- Route index → Auth routes: registers routes (evidence: `src/routes/index.js`)
- Auth routes → Auth controller: dispatches requests (evidence: `src/routes/auth.routes.js`)
- Auth routes → Auth validation: validates input (evidence: `src/routes/auth.routes.js`)
- Auth routes → Authentication: authenticates protected routes (evidence: `src/routes/auth.routes.js`)
- Auth routes → Role checks: checks admin role (evidence: `src/routes/auth.routes.js`)
- Auth routes → Async handler: wraps handlers (evidence: `src/routes/auth.routes.js`)
- Auth controller → Auth service: calls workflows (evidence: `src/controllers/auth.controller.js`)
- Auth controller → Cookie options: sets refresh cookie (evidence: `src/controllers/auth.controller.js`)
- Auth service → Users: reads and writes users (evidence: `src/services/auth.service.js`)
- Auth service → Businesses: creates business (evidence: `src/services/auth.service.js`)
- Auth service → Sessions: creates sessions (evidence: `src/services/auth.service.js`)
- Auth service → Branches: checks and assigns branches (evidence: `src/services/auth.service.js`)
- Auth service → Counters: checks and assigns counters (evidence: `src/services/auth.service.js`)
- Auth service → Token utilities: generates and hashes tokens (evidence: `src/services/auth.service.js`)
- Authentication → Users: loads user (evidence: `src/middlewares/auth.middleware.js`)
- Branch access → Counters: checks counter (evidence: `src/middlewares/brach-access.middleware.js`)
- Branch access → Branches: checks branch (evidence: `src/middlewares/brach-access.middleware.js`)
- Counter access → Counters: checks counter (evidence: `src/middlewares/counter-access.middleware.js`)
- Server startup → Express app: starts server (evidence: `src/server.js`)
- Server startup → Database connector: connects before listen (evidence: `src/server.js`)
- Server startup → Environment config: reads settings (evidence: `src/server.js`)
- Express app → Environment config: configures CORS (evidence: `src/app.js`)
- Database connector → Environment config: reads database settings (evidence: `src/config/db.js`)
