# mariyamnavila/emnex-backend architecture

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

- Interactive diagram: https://gitdiagram.com/mariyamnavila/emnex-backend
- Repository: https://github.com/mariyamnavila/emnex-backend

## Overview

EmNex is a multi-tenant workforce, project, and payroll API. Clients call the Express server; feature routes dispatch through controllers to services, which implement organization and employee administration, project/task work, submission review, payroll, and payments. Authentication and permission checks protect requests, while PostgreSQL/Prisma stores product state. The README documents service integrations and audit logging; sampled sources confirm controller-to-service calls and several authentication operations. Route wiring and unsampled service internals are represented only where documented, so uncertain feature-specific dependencies are omitted.

Main entry points: [`src/app.ts`](https://github.com/mariyamnavila/emnex-backend/blob/main/src/app.ts) (App Setup), [`src/app/lib/prisma.ts`](https://github.com/mariyamnavila/emnex-backend/blob/main/src/app/lib/prisma.ts) (PostgreSQL / Prisma), [`src/app/middleware/checkAuth.ts`](https://github.com/mariyamnavila/emnex-backend/blob/main/src/app/middleware/checkAuth.ts) (Auth & RBAC), [`src/app/module/auth/auth.service.ts`](https://github.com/mariyamnavila/emnex-backend/blob/main/src/app/module/auth/auth.service.ts) (Auth Service)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_runtime["API Runtime"]
  node_server["Express API<br/>[server.ts]"]
  node_app["App Setup<br/>[app.ts]"]
  node_authmw["Auth &amp; RBAC<br/>[checkAuth.ts]"]
  node_validation["Request Validation<br/>[validateRequest.ts]"]
  node_db[("PostgreSQL / Prisma<br/>[prisma.ts]")]
end

subgraph group_identity["Identity &amp; Tenancy"]
  node_auth["Authentication<br/>[auth.route.ts]"]
  node_authcontroller["Auth Controller<br/>[auth.controller.ts]"]
  node_authservice["Auth Service<br/>[auth.service.ts]"]
  node_org["Organization"]
  node_employee["Employee Lifecycle<br/>[employee.route.ts]"]
  node_department["Departments"]
  node_roles["Roles &amp; Permissions<br/>[role.route.ts]"]
end

subgraph group_work["Work Management"]
  node_projects["Projects<br/>[project.route.ts]"]
  node_tasks["Tasks<br/>[task.route.ts]"]
  node_submissions["Work Submissions"]
end

subgraph group_finance["Payroll &amp; Payments"]
  node_payroll["Payroll<br/>[payroll.route.ts]"]
  node_payments["Payments<br/>[payment.route.ts]"]
end

subgraph group_insight["Insights &amp; Governance"]
  node_analytics["Analytics<br/>[analytics.route.ts]"]
  node_audit["Audit Logs<br/>[audit-log.route.ts]"]
  node_auditutil["Audit Logger<br/>[auditLog.ts]"]
end

node_client(("API Client"))
node_stripe["Stripe"]
node_google["Google OAuth"]
node_cloudinary["Cloudinary"]

node_client -->|"sends HTTPS"| node_server
node_server -->|"starts app"| node_app
node_app -->|"mounts routes"| node_auth
node_app -->|"mounts routes"| node_org
node_app -->|"mounts routes"| node_employee
node_app -->|"mounts routes"| node_department
node_app -->|"mounts routes"| node_roles
node_app -->|"mounts routes"| node_projects
node_app -->|"mounts routes"| node_tasks
node_app -->|"mounts routes"| node_submissions
node_app -->|"mounts routes"| node_payroll
node_app -->|"mounts routes"| node_payments
node_app -->|"mounts routes"| node_analytics
node_app -->|"mounts routes"| node_audit
node_auth -->|"protects requests"| node_authmw
node_auth -->|"validates input"| node_validation
node_auth -->|"dispatches"| node_authcontroller
node_authcontroller -->|"calls"| node_authservice
node_authservice -->|"reads and writes"| node_db
node_authservice -.->|"verifies identity"| node_google
node_authservice -.->|"uploads avatars"| node_cloudinary
node_authservice -->|"records actions"| node_auditutil
node_org -->|"protects requests"| node_authmw
node_employee -->|"protects requests"| node_authmw
node_department -->|"protects requests"| node_authmw
node_roles -->|"protects requests"| node_authmw
node_projects -->|"protects requests"| node_authmw
node_tasks -->|"protects requests"| node_authmw
node_submissions -->|"protects requests"| node_authmw
node_payroll -->|"protects requests"| node_authmw
node_payments -->|"protects requests"| node_authmw
node_analytics -->|"protects requests"| node_authmw
node_audit -->|"protects requests"| node_authmw
node_org -->|"service persists data"| node_db
node_employee -->|"service persists data"| node_db
node_department -->|"service persists data"| node_db
node_roles -->|"service persists data"| node_db
node_projects -->|"service persists data"| node_db
node_tasks -->|"service persists data"| node_db
node_submissions -->|"service persists data"| node_db
node_payroll -->|"service persists data"| node_db
node_payments -->|"service persists data"| node_db
node_payments -.->|"creates checkout"| node_stripe
node_stripe -.->|"sends webhook"| node_payments
node_analytics -->|"service queries metrics"| node_db
node_audit -->|"service queries logs"| node_db
node_auditutil -->|"writes audit events"| node_db

click node_server "https://github.com/mariyamnavila/emnex-backend/blob/main/src/server.ts"
click node_app "https://github.com/mariyamnavila/emnex-backend/blob/main/src/app.ts"
click node_authmw "https://github.com/mariyamnavila/emnex-backend/blob/main/src/app/middleware/checkAuth.ts"
click node_validation "https://github.com/mariyamnavila/emnex-backend/blob/main/src/app/middleware/validateRequest.ts"
click node_auth "https://github.com/mariyamnavila/emnex-backend/blob/main/src/app/module/auth/auth.route.ts"
click node_authcontroller "https://github.com/mariyamnavila/emnex-backend/blob/main/src/app/module/auth/auth.controller.ts"
click node_authservice "https://github.com/mariyamnavila/emnex-backend/blob/main/src/app/module/auth/auth.service.ts"
click node_org "https://github.com/mariyamnavila/emnex-backend/blob/main/src/app/module/organization/organization.route.ts"
click node_employee "https://github.com/mariyamnavila/emnex-backend/blob/main/src/app/module/employee/employee.route.ts"
click node_department "https://github.com/mariyamnavila/emnex-backend/blob/main/src/app/module/department/department.route.ts"
click node_roles "https://github.com/mariyamnavila/emnex-backend/blob/main/src/app/module/role/role.route.ts"
click node_projects "https://github.com/mariyamnavila/emnex-backend/blob/main/src/app/module/project/project.route.ts"
click node_tasks "https://github.com/mariyamnavila/emnex-backend/blob/main/src/app/module/task/task.route.ts"
click node_submissions "https://github.com/mariyamnavila/emnex-backend/blob/main/src/app/module/submission/submission.route.ts"
click node_payroll "https://github.com/mariyamnavila/emnex-backend/blob/main/src/app/module/payroll/payroll.route.ts"
click node_payments "https://github.com/mariyamnavila/emnex-backend/blob/main/src/app/module/payment/payment.route.ts"
click node_analytics "https://github.com/mariyamnavila/emnex-backend/blob/main/src/app/module/analytics/analytics.route.ts"
click node_audit "https://github.com/mariyamnavila/emnex-backend/blob/main/src/app/module/audit-log/audit-log.route.ts"
click node_auditutil "https://github.com/mariyamnavila/emnex-backend/blob/main/src/app/utils/auditLog.ts"
click node_db "https://github.com/mariyamnavila/emnex-backend/blob/main/src/app/lib/prisma.ts"

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_app,node_authmw,node_validation,node_db,node_client toneBlue
class node_auth,node_authcontroller,node_authservice,node_org,node_employee,node_department,node_roles toneAmber
class node_projects,node_tasks,node_submissions toneMint
class node_payroll,node_payments toneRose
class node_analytics,node_audit,node_auditutil,node_stripe,node_google,node_cloudinary toneIndigo
```

## Components

### API Runtime

- [Express API](https://github.com/mariyamnavila/emnex-backend/blob/main/src/server.ts): `src/server.ts`
- [App Setup](https://github.com/mariyamnavila/emnex-backend/blob/main/src/app.ts): `src/app.ts`
- [Auth & RBAC](https://github.com/mariyamnavila/emnex-backend/blob/main/src/app/middleware/checkAuth.ts): `src/app/middleware/checkAuth.ts`
- [Request Validation](https://github.com/mariyamnavila/emnex-backend/blob/main/src/app/middleware/validateRequest.ts): `src/app/middleware/validateRequest.ts`
- [PostgreSQL / Prisma](https://github.com/mariyamnavila/emnex-backend/blob/main/src/app/lib/prisma.ts): `src/app/lib/prisma.ts`

### Identity & Tenancy

- [Authentication](https://github.com/mariyamnavila/emnex-backend/blob/main/src/app/module/auth/auth.route.ts): `src/app/module/auth/auth.route.ts`
- [Auth Controller](https://github.com/mariyamnavila/emnex-backend/blob/main/src/app/module/auth/auth.controller.ts): `src/app/module/auth/auth.controller.ts`
- [Auth Service](https://github.com/mariyamnavila/emnex-backend/blob/main/src/app/module/auth/auth.service.ts): `src/app/module/auth/auth.service.ts`
- [Organization](https://github.com/mariyamnavila/emnex-backend/blob/main/src/app/module/organization/organization.route.ts): `src/app/module/organization/organization.route.ts`
- [Employee Lifecycle](https://github.com/mariyamnavila/emnex-backend/blob/main/src/app/module/employee/employee.route.ts): `src/app/module/employee/employee.route.ts`
- [Departments](https://github.com/mariyamnavila/emnex-backend/blob/main/src/app/module/department/department.route.ts): `src/app/module/department/department.route.ts`
- [Roles & Permissions](https://github.com/mariyamnavila/emnex-backend/blob/main/src/app/module/role/role.route.ts): `src/app/module/role/role.route.ts`

### Work Management

- [Projects](https://github.com/mariyamnavila/emnex-backend/blob/main/src/app/module/project/project.route.ts): `src/app/module/project/project.route.ts`
- [Tasks](https://github.com/mariyamnavila/emnex-backend/blob/main/src/app/module/task/task.route.ts): `src/app/module/task/task.route.ts`
- [Work Submissions](https://github.com/mariyamnavila/emnex-backend/blob/main/src/app/module/submission/submission.route.ts): `src/app/module/submission/submission.route.ts`

### Payroll & Payments

- [Payroll](https://github.com/mariyamnavila/emnex-backend/blob/main/src/app/module/payroll/payroll.route.ts): `src/app/module/payroll/payroll.route.ts`
- [Payments](https://github.com/mariyamnavila/emnex-backend/blob/main/src/app/module/payment/payment.route.ts): `src/app/module/payment/payment.route.ts`

### Insights & Governance

- [Analytics](https://github.com/mariyamnavila/emnex-backend/blob/main/src/app/module/analytics/analytics.route.ts): `src/app/module/analytics/analytics.route.ts`
- [Audit Logs](https://github.com/mariyamnavila/emnex-backend/blob/main/src/app/module/audit-log/audit-log.route.ts): `src/app/module/audit-log/audit-log.route.ts`
- [Audit Logger](https://github.com/mariyamnavila/emnex-backend/blob/main/src/app/utils/auditLog.ts): `src/app/utils/auditLog.ts`

### Other components

- **API Client**
- **Stripe**
- **Google OAuth**
- **Cloudinary**

## Connections

- API Client → Express API: sends HTTPS
- Express API → App Setup: starts app
- App Setup → Authentication: mounts routes
- App Setup → Organization: mounts routes
- App Setup → Employee Lifecycle: mounts routes
- App Setup → Departments: mounts routes
- App Setup → Roles & Permissions: mounts routes
- App Setup → Projects: mounts routes
- App Setup → Tasks: mounts routes
- App Setup → Work Submissions: mounts routes
- App Setup → Payroll: mounts routes
- App Setup → Payments: mounts routes
- App Setup → Analytics: mounts routes
- App Setup → Audit Logs: mounts routes
- Authentication → Auth & RBAC: protects requests
- Authentication → Request Validation: validates input
- Authentication → Auth Controller: dispatches
- Auth Controller → Auth Service: calls
- Auth Service → PostgreSQL / Prisma: reads and writes
- Auth Service → Google OAuth: verifies identity
- Auth Service → Cloudinary: uploads avatars
- Auth Service → Audit Logger: records actions
- Organization → Auth & RBAC: protects requests
- Employee Lifecycle → Auth & RBAC: protects requests
- Departments → Auth & RBAC: protects requests
- Roles & Permissions → Auth & RBAC: protects requests
- Projects → Auth & RBAC: protects requests
- Tasks → Auth & RBAC: protects requests
- Work Submissions → Auth & RBAC: protects requests
- Payroll → Auth & RBAC: protects requests
- Payments → Auth & RBAC: protects requests
- Analytics → Auth & RBAC: protects requests
- Audit Logs → Auth & RBAC: protects requests
- Organization → PostgreSQL / Prisma: service persists data
- Employee Lifecycle → PostgreSQL / Prisma: service persists data
- Departments → PostgreSQL / Prisma: service persists data
- Roles & Permissions → PostgreSQL / Prisma: service persists data
- Projects → PostgreSQL / Prisma: service persists data
- Tasks → PostgreSQL / Prisma: service persists data
- Work Submissions → PostgreSQL / Prisma: service persists data
- Payroll → PostgreSQL / Prisma: service persists data
- Payments → PostgreSQL / Prisma: service persists data
- Payments → Stripe: creates checkout
- Stripe → Payments: sends webhook
- Analytics → PostgreSQL / Prisma: service queries metrics
- Audit Logs → PostgreSQL / Prisma: service queries logs
- Audit Logger → PostgreSQL / Prisma: writes audit events
