# otumian-empire/arms architecture

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

- Interactive diagram: https://gitdiagram.com/otumian-empire/arms
- Repository: https://github.com/otumian-empire/arms

## Overview

ARMS is an apartment-rental management API: landlords administer apartment listings, tenants register and authenticate, tenant payments are recorded as cash entries, and a rent record associates a tenant, apartment, and payment after occupancy checks. Express mounts the API route families; controllers implement the domain operations and use Mongoose models, with Redis caching on several read paths. The supplied excerpts show selected controllers and wiring, not route-handler mappings or database/cache connection behavior, so those links are not inferred.

Main entry points: [`src/model/index.js`](https://github.com/otumian-empire/arms/blob/main/src/model/index.js) (Model registry), [`src/route/index.js`](https://github.com/otumian-empire/arms/blob/main/src/route/index.js) (Route registry), [`src/caching/index.js`](https://github.com/otumian-empire/arms/blob/main/src/caching/index.js) (Redis client), [`src/controller/admin.controller.js`](https://github.com/otumian-empire/arms/blob/main/src/controller/admin.controller.js) (Admin operations)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_api["API entry"]
  node_app["Express app<br/>[app.js]"]
  node_routes["Route registry<br/>[index.js]"]
  node_adminroute["Admin routes<br/>[admin.route.js]"]
  node_apartmentroute["Apartment routes<br/>[apartment.route.js]"]
  node_tenantroute["Tenant routes<br/>[tenant.route.js]"]
  node_cashroute["Cash routes<br/>[cash.route.js]"]
  node_rentroute["Rent routes<br/>[rent.route.js]"]
end

subgraph group_identity["Accounts"]
  node_adminctl["Admin operations"]
  node_tenantctl["Tenant operations"]
  node_auth["JWT authentication<br/>[jwt.auth.js]"]
end

subgraph group_rental["Rental operations"]
  node_apartmentctl["Apartment listings"]
  node_cashctl["Payment records<br/>[cash.controller.js]"]
  node_rentctl["Rental assignment<br/>[rent.controller.js]"]
end

subgraph group_storage["Persistence and cache"]
  node_models["Model registry<br/>[index.js]"]
  node_adminmodel["Admin model<br/>[admin.model.js]"]
  node_tenantmodel["Tenant model<br/>[tenant.model.js]"]
  node_apartmentmodel["Apartment model<br/>[apartment.model.js]"]
  node_cashmodel["Cash model<br/>[cash.model.js]"]
  node_rentmodel["Rent model<br/>[rent.model.js]"]
  node_cache["Redis client<br/>[index.js]"]
end

node_caller(("API client"))

node_caller -->|"sends requests"| node_app
node_app -->|"mounts routes"| node_routes
node_routes -->|"exports"| node_adminroute
node_routes -->|"exports"| node_apartmentroute
node_routes -->|"exports"| node_tenantroute
node_routes -->|"exports"| node_cashroute
node_routes -->|"exports"| node_rentroute
node_adminctl -->|"queries"| node_models
node_tenantctl -->|"queries"| node_models
node_apartmentctl -->|"queries"| node_models
node_cashctl -->|"queries"| node_models
node_rentctl -->|"queries"| node_models
node_adminctl -->|"creates tokens"| node_auth
node_tenantctl -->|"creates tokens"| node_auth
node_adminctl -->|"writes cache"| node_cache
node_tenantctl -->|"writes cache"| node_cache
node_apartmentctl -->|"writes cache"| node_cache
node_cashctl -->|"writes cache"| node_cache
node_rentctl -->|"writes cache"| node_cache
node_models -->|"exports"| node_adminmodel
node_models -->|"exports"| node_tenantmodel
node_models -->|"exports"| node_apartmentmodel
node_models -->|"exports"| node_cashmodel
node_models -->|"exports"| node_rentmodel

click node_app "https://github.com/otumian-empire/arms/blob/main/src/app.js"
click node_routes "https://github.com/otumian-empire/arms/blob/main/src/route/index.js"
click node_adminroute "https://github.com/otumian-empire/arms/blob/main/src/route/admin.route.js"
click node_apartmentroute "https://github.com/otumian-empire/arms/blob/main/src/route/apartment.route.js"
click node_tenantroute "https://github.com/otumian-empire/arms/blob/main/src/route/tenant.route.js"
click node_cashroute "https://github.com/otumian-empire/arms/blob/main/src/route/cash.route.js"
click node_rentroute "https://github.com/otumian-empire/arms/blob/main/src/route/rent.route.js"
click node_adminctl "https://github.com/otumian-empire/arms/blob/main/src/controller/admin.controller.js"
click node_tenantctl "https://github.com/otumian-empire/arms/blob/main/src/controller/tenant.controller.js"
click node_auth "https://github.com/otumian-empire/arms/blob/main/src/authentication/jwt.auth.js"
click node_apartmentctl "https://github.com/otumian-empire/arms/blob/main/src/controller/apartment.controller.js"
click node_cashctl "https://github.com/otumian-empire/arms/blob/main/src/controller/cash.controller.js"
click node_rentctl "https://github.com/otumian-empire/arms/blob/main/src/controller/rent.controller.js"
click node_models "https://github.com/otumian-empire/arms/blob/main/src/model/index.js"
click node_adminmodel "https://github.com/otumian-empire/arms/blob/main/src/model/admin.model.js"
click node_tenantmodel "https://github.com/otumian-empire/arms/blob/main/src/model/tenant.model.js"
click node_apartmentmodel "https://github.com/otumian-empire/arms/blob/main/src/model/apartment.model.js"
click node_cashmodel "https://github.com/otumian-empire/arms/blob/main/src/model/cash.model.js"
click node_rentmodel "https://github.com/otumian-empire/arms/blob/main/src/model/rent.model.js"
click node_cache "https://github.com/otumian-empire/arms/blob/main/src/caching/index.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_routes,node_adminroute,node_apartmentroute,node_tenantroute,node_cashroute,node_rentroute,node_caller toneBlue
class node_adminctl,node_tenantctl,node_auth toneAmber
class node_apartmentctl,node_cashctl,node_rentctl toneMint
class node_models,node_adminmodel,node_tenantmodel,node_apartmentmodel,node_cashmodel,node_rentmodel,node_cache toneRose
```

## Components

### API entry

- [Express app](https://github.com/otumian-empire/arms/blob/main/src/app.js): `src/app.js`
- [Route registry](https://github.com/otumian-empire/arms/blob/main/src/route/index.js): `src/route/index.js`
- [Admin routes](https://github.com/otumian-empire/arms/blob/main/src/route/admin.route.js): `src/route/admin.route.js`
- [Apartment routes](https://github.com/otumian-empire/arms/blob/main/src/route/apartment.route.js): `src/route/apartment.route.js`
- [Tenant routes](https://github.com/otumian-empire/arms/blob/main/src/route/tenant.route.js): `src/route/tenant.route.js`
- [Cash routes](https://github.com/otumian-empire/arms/blob/main/src/route/cash.route.js): `src/route/cash.route.js`
- [Rent routes](https://github.com/otumian-empire/arms/blob/main/src/route/rent.route.js): `src/route/rent.route.js`

### Accounts

- [Admin operations](https://github.com/otumian-empire/arms/blob/main/src/controller/admin.controller.js): `src/controller/admin.controller.js`
- [Tenant operations](https://github.com/otumian-empire/arms/blob/main/src/controller/tenant.controller.js): `src/controller/tenant.controller.js`
- [JWT authentication](https://github.com/otumian-empire/arms/blob/main/src/authentication/jwt.auth.js): `src/authentication/jwt.auth.js`

### Rental operations

- [Apartment listings](https://github.com/otumian-empire/arms/blob/main/src/controller/apartment.controller.js): `src/controller/apartment.controller.js`
- [Payment records](https://github.com/otumian-empire/arms/blob/main/src/controller/cash.controller.js): `src/controller/cash.controller.js`
- [Rental assignment](https://github.com/otumian-empire/arms/blob/main/src/controller/rent.controller.js): `src/controller/rent.controller.js`

### Persistence and cache

- [Model registry](https://github.com/otumian-empire/arms/blob/main/src/model/index.js): `src/model/index.js`
- [Admin model](https://github.com/otumian-empire/arms/blob/main/src/model/admin.model.js): `src/model/admin.model.js`
- [Tenant model](https://github.com/otumian-empire/arms/blob/main/src/model/tenant.model.js): `src/model/tenant.model.js`
- [Apartment model](https://github.com/otumian-empire/arms/blob/main/src/model/apartment.model.js): `src/model/apartment.model.js`
- [Cash model](https://github.com/otumian-empire/arms/blob/main/src/model/cash.model.js): `src/model/cash.model.js`
- [Rent model](https://github.com/otumian-empire/arms/blob/main/src/model/rent.model.js): `src/model/rent.model.js`
- [Redis client](https://github.com/otumian-empire/arms/blob/main/src/caching/index.js): `src/caching/index.js`

### Other components

- **API client**

## Connections

- API client → Express app: sends requests
- Express app → Route registry: mounts routes
- Route registry → Admin routes: exports
- Route registry → Apartment routes: exports
- Route registry → Tenant routes: exports
- Route registry → Cash routes: exports
- Route registry → Rent routes: exports
- Admin operations → Model registry: queries
- Tenant operations → Model registry: queries
- Apartment listings → Model registry: queries
- Payment records → Model registry: queries
- Rental assignment → Model registry: queries
- Admin operations → JWT authentication: creates tokens
- Tenant operations → JWT authentication: creates tokens
- Admin operations → Redis client: writes cache
- Tenant operations → Redis client: writes cache
- Apartment listings → Redis client: writes cache
- Payment records → Redis client: writes cache
- Rental assignment → Redis client: writes cache
- Model registry → Admin model: exports
- Model registry → Tenant model: exports
- Model registry → Apartment model: exports
- Model registry → Cash model: exports
- Model registry → Rent model: exports
