# once-1296/dbms_minmax_proj_1 architecture

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

## Overview

TPQA is a full-stack platform for academic consultancy and third-party audit projects. Clients and faculty authenticate, then projects move through request, faculty response, client acceptance, director approval, invoicing, completion, revenue distribution, and closure. The Next.js dashboards and workflow forms use a FastAPI API backed by SQLAlchemy models and PostgreSQL. The graph includes documented capabilities such as admin access, receipts, and reference data. Some frontend-to-API wiring and unsampled admin implementation details are not shown, so those links are omitted.

Main entry points: [`backend/routers/consultancy.py`](https://github.com/once-1296/dbms_minmax_proj_1/blob/main/backend/routers/consultancy.py) (Consultancy routes), [`backend/models/tables.py`](https://github.com/once-1296/dbms_minmax_proj_1/blob/main/backend/models/tables.py) (Domain models), [`backend/routers/auth.py`](https://github.com/once-1296/dbms_minmax_proj_1/blob/main/backend/routers/auth.py) (Authentication routes), [`backend/core/database.py`](https://github.com/once-1296/dbms_minmax_proj_1/blob/main/backend/core/database.py) (Database sessions)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_frontend["Web application"]
  node_web_auth["Login and signup<br/>[page.tsx]"]
  node_dashboards["Role dashboards<br/>[page.tsx]"]
  node_project_view["Project workflow view<br/>[page.tsx]"]
  node_workflow_ui["Workflow forms"]
  node_step_modals["Step dialogs<br/>[StepModals.tsx]"]
  node_progress["Step progress<br/>[StepIndicator.tsx]"]
  node_auth_state["Session context<br/>[auth-context.tsx]"]
  node_http_client["HTTP client<br/>[api.ts]"]
end

subgraph group_api["API and access"]
  node_api_entry["FastAPI entry<br/>[main.py]"]
  node_auth_routes["Authentication routes<br/>[auth.py]"]
  node_consult_routes["Consultancy routes<br/>[consultancy.py]"]
  node_admin_routes["Admin routes<br/>[admin.py]"]
  node_project_schema["Project schemas<br/>[project.py]"]
  node_auth_schema["Auth schemas<br/>[auth.py]"]
end

subgraph group_workflow["Consultancy workflow"]
  node_request["Request<br/>[step_1_request.py]"]
  node_faculty_response["Faculty response<br/>[step_2_response.py]"]
  node_acceptance["Agency acceptance"]
  node_approval["Director approval<br/>[step_4_approval.py]"]
  node_proforma["Proforma invoice<br/>[step_5_proforma.py]"]
  node_tax_receipt["Tax and receipt<br/>[step_6_tax.py]"]
  node_completion["Completion report"]
  node_distribution["Revenue distribution"]
  node_close["Project closure<br/>[step_9_close.py]"]
  node_revert["Step reversal<br/>[step_revert.py]"]
end

subgraph group_data["Persistence and security"]
  node_auth_guard["JWT user guard<br/>[deps.py]"]
  node_security["Token and password security<br/>[security.py]"]
  node_db_session["Database sessions<br/>[database.py]"]
  node_orm["Domain models<br/>[tables.py]"]
  node_postgres[("PostgreSQL")]
end

node_client(("Client"))
node_faculty(("Faculty"))

node_client -->|"signs up or logs in"| node_web_auth
node_faculty -->|"signs up or logs in"| node_web_auth
node_client -->|"manages projects"| node_dashboards
node_faculty -->|"manages projects"| node_dashboards
node_dashboards -.->|"opens project"| node_project_view
node_project_view -->|"presents workflow"| node_workflow_ui
node_workflow_ui -->|"uses dialogs"| node_step_modals
node_project_view -->|"shows progress"| node_progress
node_web_auth -.->|"sets session"| node_auth_state
node_auth_state -->|"sends auth requests"| node_http_client
node_api_entry -->|"mounts router"| node_auth_routes
node_api_entry -->|"mounts router"| node_consult_routes
node_api_entry -->|"mounts router"| node_admin_routes
node_http_client -->|"calls auth endpoints"| node_auth_routes
node_workflow_ui -.->|"submits workflow actions"| node_consult_routes
node_consult_routes -->|"dispatches request"| node_request
node_consult_routes -->|"dispatches response"| node_faculty_response
node_consult_routes -->|"dispatches acceptance"| node_acceptance
node_consult_routes -->|"dispatches approval"| node_approval
node_consult_routes -->|"dispatches invoice"| node_proforma
node_consult_routes -->|"dispatches tax receipt"| node_tax_receipt
node_consult_routes -->|"dispatches completion"| node_completion
node_consult_routes -->|"dispatches distribution"| node_distribution
node_consult_routes -->|"dispatches closure"| node_close
node_consult_routes -->|"dispatches reversal"| node_revert
node_consult_routes -->|"validates workflow payloads"| node_project_schema
node_auth_routes -->|"validates auth payloads"| node_auth_schema
node_auth_routes -->|"hashes and issues tokens"| node_security
node_auth_routes -->|"uses sessions"| node_db_session
node_auth_guard -->|"decodes token"| node_security
node_auth_guard -->|"loads user"| node_db_session
node_auth_routes -->|"protects profile routes"| node_auth_guard
node_consult_routes -->|"protects endpoints"| node_auth_guard
node_request -->|"reads and writes models"| node_orm
node_faculty_response -->|"reads and writes models"| node_orm
node_acceptance -->|"updates models"| node_orm
node_approval -->|"updates models"| node_orm
node_proforma -->|"creates invoice"| node_orm
node_tax_receipt -->|"records payment"| node_orm
node_completion -->|"updates project"| node_orm
node_distribution -->|"records allocations"| node_orm
node_close -->|"updates project"| node_orm
node_revert -->|"cleans workflow records"| node_orm
node_db_session -->|"connects to"| node_postgres
node_orm -->|"uses base"| node_db_session
node_consult_routes -->|"queries data"| node_db_session

click node_web_auth "https://github.com/once-1296/dbms_minmax_proj_1/blob/main/frontend/app/login/page.tsx"
click node_dashboards "https://github.com/once-1296/dbms_minmax_proj_1/blob/main/frontend/app/dashboard/organization/page.tsx"
click node_project_view "https://github.com/once-1296/dbms_minmax_proj_1/blob/main/frontend/app/dashboard/projects/%5Bid%5D/page.tsx"
click node_workflow_ui "https://github.com/once-1296/dbms_minmax_proj_1/blob/main/frontend/components/workflow/WorkflowContainer.tsx"
click node_step_modals "https://github.com/once-1296/dbms_minmax_proj_1/blob/main/frontend/components/workflow/modals/StepModals.tsx"
click node_progress "https://github.com/once-1296/dbms_minmax_proj_1/blob/main/frontend/components/ui/StepIndicator.tsx"
click node_auth_state "https://github.com/once-1296/dbms_minmax_proj_1/blob/main/frontend/lib/auth-context.tsx"
click node_http_client "https://github.com/once-1296/dbms_minmax_proj_1/blob/main/frontend/lib/api.ts"
click node_api_entry "https://github.com/once-1296/dbms_minmax_proj_1/blob/main/backend/main.py"
click node_auth_routes "https://github.com/once-1296/dbms_minmax_proj_1/blob/main/backend/routers/auth.py"
click node_consult_routes "https://github.com/once-1296/dbms_minmax_proj_1/blob/main/backend/routers/consultancy.py"
click node_admin_routes "https://github.com/once-1296/dbms_minmax_proj_1/blob/main/backend/routers/admin.py"
click node_request "https://github.com/once-1296/dbms_minmax_proj_1/blob/main/backend/consultancy_steps/step_1_request.py"
click node_faculty_response "https://github.com/once-1296/dbms_minmax_proj_1/blob/main/backend/consultancy_steps/step_2_response.py"
click node_acceptance "https://github.com/once-1296/dbms_minmax_proj_1/blob/main/backend/consultancy_steps/step_3_acceptance.py"
click node_approval "https://github.com/once-1296/dbms_minmax_proj_1/blob/main/backend/consultancy_steps/step_4_approval.py"
click node_proforma "https://github.com/once-1296/dbms_minmax_proj_1/blob/main/backend/consultancy_steps/step_5_proforma.py"
click node_tax_receipt "https://github.com/once-1296/dbms_minmax_proj_1/blob/main/backend/consultancy_steps/step_6_tax.py"
click node_completion "https://github.com/once-1296/dbms_minmax_proj_1/blob/main/backend/consultancy_steps/step_7_completion.py"
click node_distribution "https://github.com/once-1296/dbms_minmax_proj_1/blob/main/backend/consultancy_steps/step_8_distribution.py"
click node_close "https://github.com/once-1296/dbms_minmax_proj_1/blob/main/backend/consultancy_steps/step_9_close.py"
click node_revert "https://github.com/once-1296/dbms_minmax_proj_1/blob/main/backend/consultancy_steps/step_revert.py"
click node_auth_guard "https://github.com/once-1296/dbms_minmax_proj_1/blob/main/backend/deps.py"
click node_security "https://github.com/once-1296/dbms_minmax_proj_1/blob/main/backend/core/security.py"
click node_db_session "https://github.com/once-1296/dbms_minmax_proj_1/blob/main/backend/core/database.py"
click node_orm "https://github.com/once-1296/dbms_minmax_proj_1/blob/main/backend/models/tables.py"
click node_project_schema "https://github.com/once-1296/dbms_minmax_proj_1/blob/main/backend/schemas/project.py"
click node_auth_schema "https://github.com/once-1296/dbms_minmax_proj_1/blob/main/backend/schemas/auth.py"

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_web_auth,node_dashboards,node_project_view,node_workflow_ui,node_step_modals,node_progress,node_auth_state,node_http_client,node_client toneBlue
class node_api_entry,node_auth_routes,node_consult_routes,node_admin_routes,node_project_schema,node_auth_schema toneAmber
class node_request,node_faculty_response,node_acceptance,node_approval,node_proforma,node_tax_receipt,node_completion,node_distribution,node_close,node_revert toneMint
class node_auth_guard,node_security,node_db_session,node_orm,node_postgres toneRose
class node_faculty toneIndigo
```

## Components

### Web application

- [Login and signup](https://github.com/once-1296/dbms_minmax_proj_1/blob/main/frontend/app/login/page.tsx): `frontend/app/login/page.tsx`
- [Role dashboards](https://github.com/once-1296/dbms_minmax_proj_1/blob/main/frontend/app/dashboard/organization/page.tsx): `frontend/app/dashboard/organization/page.tsx`
- [Project workflow view](https://github.com/once-1296/dbms_minmax_proj_1/blob/main/frontend/app/dashboard/projects/%5Bid%5D/page.tsx): `frontend/app/dashboard/projects/[id]/page.tsx`
- [Workflow forms](https://github.com/once-1296/dbms_minmax_proj_1/blob/main/frontend/components/workflow/WorkflowContainer.tsx): `frontend/components/workflow/WorkflowContainer.tsx`
- [Step dialogs](https://github.com/once-1296/dbms_minmax_proj_1/blob/main/frontend/components/workflow/modals/StepModals.tsx): `frontend/components/workflow/modals/StepModals.tsx`
- [Step progress](https://github.com/once-1296/dbms_minmax_proj_1/blob/main/frontend/components/ui/StepIndicator.tsx): `frontend/components/ui/StepIndicator.tsx`
- [Session context](https://github.com/once-1296/dbms_minmax_proj_1/blob/main/frontend/lib/auth-context.tsx): `frontend/lib/auth-context.tsx`
- [HTTP client](https://github.com/once-1296/dbms_minmax_proj_1/blob/main/frontend/lib/api.ts): `frontend/lib/api.ts`

### API and access

- [FastAPI entry](https://github.com/once-1296/dbms_minmax_proj_1/blob/main/backend/main.py): `backend/main.py`
- [Authentication routes](https://github.com/once-1296/dbms_minmax_proj_1/blob/main/backend/routers/auth.py): `backend/routers/auth.py`
- [Consultancy routes](https://github.com/once-1296/dbms_minmax_proj_1/blob/main/backend/routers/consultancy.py): `backend/routers/consultancy.py`
- [Admin routes](https://github.com/once-1296/dbms_minmax_proj_1/blob/main/backend/routers/admin.py): `backend/routers/admin.py`
- [Project schemas](https://github.com/once-1296/dbms_minmax_proj_1/blob/main/backend/schemas/project.py): `backend/schemas/project.py`
- [Auth schemas](https://github.com/once-1296/dbms_minmax_proj_1/blob/main/backend/schemas/auth.py): `backend/schemas/auth.py`

### Consultancy workflow

- [Request](https://github.com/once-1296/dbms_minmax_proj_1/blob/main/backend/consultancy_steps/step_1_request.py): `backend/consultancy_steps/step_1_request.py`
- [Faculty response](https://github.com/once-1296/dbms_minmax_proj_1/blob/main/backend/consultancy_steps/step_2_response.py): `backend/consultancy_steps/step_2_response.py`
- [Agency acceptance](https://github.com/once-1296/dbms_minmax_proj_1/blob/main/backend/consultancy_steps/step_3_acceptance.py): `backend/consultancy_steps/step_3_acceptance.py`
- [Director approval](https://github.com/once-1296/dbms_minmax_proj_1/blob/main/backend/consultancy_steps/step_4_approval.py): `backend/consultancy_steps/step_4_approval.py`
- [Proforma invoice](https://github.com/once-1296/dbms_minmax_proj_1/blob/main/backend/consultancy_steps/step_5_proforma.py): `backend/consultancy_steps/step_5_proforma.py`
- [Tax and receipt](https://github.com/once-1296/dbms_minmax_proj_1/blob/main/backend/consultancy_steps/step_6_tax.py): `backend/consultancy_steps/step_6_tax.py`
- [Completion report](https://github.com/once-1296/dbms_minmax_proj_1/blob/main/backend/consultancy_steps/step_7_completion.py): `backend/consultancy_steps/step_7_completion.py`
- [Revenue distribution](https://github.com/once-1296/dbms_minmax_proj_1/blob/main/backend/consultancy_steps/step_8_distribution.py): `backend/consultancy_steps/step_8_distribution.py`
- [Project closure](https://github.com/once-1296/dbms_minmax_proj_1/blob/main/backend/consultancy_steps/step_9_close.py): `backend/consultancy_steps/step_9_close.py`
- [Step reversal](https://github.com/once-1296/dbms_minmax_proj_1/blob/main/backend/consultancy_steps/step_revert.py): `backend/consultancy_steps/step_revert.py`

### Persistence and security

- [JWT user guard](https://github.com/once-1296/dbms_minmax_proj_1/blob/main/backend/deps.py): `backend/deps.py`
- [Token and password security](https://github.com/once-1296/dbms_minmax_proj_1/blob/main/backend/core/security.py): `backend/core/security.py`
- [Database sessions](https://github.com/once-1296/dbms_minmax_proj_1/blob/main/backend/core/database.py): `backend/core/database.py`
- [Domain models](https://github.com/once-1296/dbms_minmax_proj_1/blob/main/backend/models/tables.py): `backend/models/tables.py`
- **PostgreSQL**

### Other components

- **Client**
- **Faculty**

## Connections

- Client → Login and signup: signs up or logs in
- Faculty → Login and signup: signs up or logs in
- Client → Role dashboards: manages projects
- Faculty → Role dashboards: manages projects
- Role dashboards → Project workflow view: opens project
- Project workflow view → Workflow forms: presents workflow
- Workflow forms → Step dialogs: uses dialogs (evidence: `frontend/components/workflow/WorkflowContainer.tsx`)
- Project workflow view → Step progress: shows progress
- Login and signup → Session context: sets session
- Session context → HTTP client: sends auth requests (evidence: `frontend/lib/auth-context.tsx`)
- FastAPI entry → Authentication routes: mounts router (evidence: `backend/main.py`)
- FastAPI entry → Consultancy routes: mounts router (evidence: `backend/main.py`)
- FastAPI entry → Admin routes: mounts router (evidence: `backend/main.py`)
- HTTP client → Authentication routes: calls auth endpoints
- Workflow forms → Consultancy routes: submits workflow actions
- Consultancy routes → Request: dispatches request (evidence: `backend/routers/consultancy.py`)
- Consultancy routes → Faculty response: dispatches response (evidence: `backend/routers/consultancy.py`)
- Consultancy routes → Agency acceptance: dispatches acceptance (evidence: `backend/routers/consultancy.py`)
- Consultancy routes → Director approval: dispatches approval (evidence: `backend/routers/consultancy.py`)
- Consultancy routes → Proforma invoice: dispatches invoice (evidence: `backend/routers/consultancy.py`)
- Consultancy routes → Tax and receipt: dispatches tax receipt (evidence: `backend/routers/consultancy.py`)
- Consultancy routes → Completion report: dispatches completion (evidence: `backend/routers/consultancy.py`)
- Consultancy routes → Revenue distribution: dispatches distribution (evidence: `backend/routers/consultancy.py`)
- Consultancy routes → Project closure: dispatches closure (evidence: `backend/routers/consultancy.py`)
- Consultancy routes → Step reversal: dispatches reversal (evidence: `backend/routers/consultancy.py`)
- Consultancy routes → Project schemas: validates workflow payloads (evidence: `backend/routers/consultancy.py`)
- Authentication routes → Auth schemas: validates auth payloads (evidence: `backend/routers/auth.py`)
- Authentication routes → Token and password security: hashes and issues tokens (evidence: `backend/routers/auth.py`)
- Authentication routes → Database sessions: uses sessions (evidence: `backend/routers/auth.py`)
- JWT user guard → Token and password security: decodes token (evidence: `backend/deps.py`)
- JWT user guard → Database sessions: loads user (evidence: `backend/deps.py`)
- Authentication routes → JWT user guard: protects profile routes (evidence: `backend/routers/auth.py`)
- Consultancy routes → JWT user guard: protects endpoints (evidence: `backend/routers/consultancy.py`)
- Request → Domain models: reads and writes models (evidence: `backend/consultancy_steps/step_1_request.py`)
- Faculty response → Domain models: reads and writes models (evidence: `backend/consultancy_steps/step_2_response.py`)
- Agency acceptance → Domain models: updates models (evidence: `backend/consultancy_steps/step_3_acceptance.py`)
- Director approval → Domain models: updates models (evidence: `backend/consultancy_steps/step_4_approval.py`)
- Proforma invoice → Domain models: creates invoice (evidence: `backend/consultancy_steps/step_5_proforma.py`)
- Tax and receipt → Domain models: records payment (evidence: `backend/consultancy_steps/step_6_tax.py`)
- Completion report → Domain models: updates project (evidence: `backend/consultancy_steps/step_7_completion.py`)
- Revenue distribution → Domain models: records allocations (evidence: `backend/consultancy_steps/step_8_distribution.py`)
- Project closure → Domain models: updates project (evidence: `backend/consultancy_steps/step_9_close.py`)
- Step reversal → Domain models: cleans workflow records (evidence: `backend/consultancy_steps/step_revert.py`)
- Database sessions → PostgreSQL: connects to (evidence: `backend/core/database.py`)
- Domain models → Database sessions: uses base (evidence: `backend/models/tables.py`)
- Consultancy routes → Database sessions: queries data (evidence: `backend/routers/consultancy.py`)
