# ayush16110/project-camp-backend architecture

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

- Interactive diagram: https://gitdiagram.com/ayush16110/project-camp-backend
- Repository: https://github.com/ayush16110/project-camp-backend

## Overview

Project Camp is a REST backend for collaborative project management. Clients enter through Express routes; authentication, role checks, and request validation gate controller operations, which manage users, projects and memberships, tasks and subtasks, and shared notes in MongoDB. Task routes also accept attachment uploads, while account workflows send email. The README documents the broader feature set; some subsystems are represented by their exact source directories because their implementations were not excerpted.

Main entry points: [`src/app.js`](https://github.com/ayush16110/project-camp-backend/blob/main/src/app.js) (Express app), [`src/routes/task.routes.js`](https://github.com/ayush16110/project-camp-backend/blob/main/src/routes/task.routes.js) (Task routes), [`src/controllers/task.controllers.js`](https://github.com/ayush16110/project-camp-backend/blob/main/src/controllers/task.controllers.js) (Task and subtask workflows), [`src/middlewares/auth.middlewares.js`](https://github.com/ayush16110/project-camp-backend/blob/main/src/middlewares/auth.middlewares.js) (JWT and project access)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_api["HTTP API"]
  node_express["Express app<br/>[app.js]"]
  node_auth_routes["Auth routes<br/>[auth.routes.js]"]
  node_project_routes["Project routes<br/>[project.routes.js]"]
  node_task_routes["Task routes<br/>[task.routes.js]"]
  node_note_routes["Note routes<br/>[note.routes.js]"]
  node_health_routes["Health route"]
  node_validation["Request validation<br/>[index.js]"]
  node_validator["Validation middleware"]
  node_health["Health check"]
end

subgraph group_identity["Identity and access"]
  node_auth["Account workflows"]
  node_user[("User records<br/>[user.models.js]")]
  node_authorization["JWT and project access"]
  node_email["Email delivery<br/>[mail.js]"]
end

subgraph group_projects["Projects and membership"]
  node_project["Project workflows"]
  node_project_model[("Project records<br/>[project.models.js]")]
  node_membership[("Project memberships")]
end

subgraph group_work["Tasks and collaboration"]
  node_task["Task and subtask workflows"]
  node_task_model[("Task records<br/>[task.models.js]")]
  node_subtask_model[("Subtask records<br/>[subtask.models.js]")]
  node_notes["Note workflows"]
  node_note_model[("Note records<br/>[note.models.js]")]
  node_upload["Attachment upload"]
end

node_client(("API client"))
node_mongo[("MongoDB")]
node_mail_service["Email service"]

node_client -->|"sends requests"| node_express
node_express -->|"mounts routes"| node_auth_routes
node_express -->|"mounts routes"| node_project_routes
node_express -->|"mounts routes"| node_task_routes
node_express -->|"mounts routes"| node_note_routes
node_express -->|"mounts routes"| node_health_routes
node_auth_routes -->|"dispatches"| node_auth
node_project_routes -->|"dispatches"| node_project
node_task_routes -->|"dispatches"| node_task
node_note_routes -->|"dispatches"| node_notes
node_health_routes -->|"dispatches"| node_health
node_auth_routes -->|"uses JWT checks"| node_authorization
node_project_routes -->|"checks permissions"| node_authorization
node_task_routes -->|"checks permissions"| node_authorization
node_note_routes -->|"uses JWT checks"| node_authorization
node_auth_routes -->|"uses validators"| node_validation
node_project_routes -->|"uses validators"| node_validation
node_task_routes -->|"uses validators"| node_validation
node_note_routes -->|"uses validators"| node_validation
node_auth_routes -->|"runs validation"| node_validator
node_project_routes -->|"runs validation"| node_validator
node_task_routes -->|"runs validation"| node_validator
node_note_routes -->|"runs validation"| node_validator
node_task_routes -->|"uploads attachments"| node_upload
node_auth -->|"reads and writes"| node_user
node_auth -->|"sends account mail"| node_email
node_email -.->|"delivers email"| node_mail_service
node_authorization -->|"loads user"| node_user
node_authorization -->|"checks membership"| node_membership
node_project -->|"reads and writes"| node_project_model
node_project -->|"manages membership"| node_membership
node_project -->|"looks up users"| node_user
node_task -->|"reads and writes"| node_task_model
node_task -->|"manages subtasks"| node_subtask_model
node_task -->|"checks project"| node_project_model
node_task -->|"checks assignee"| node_membership
node_task -->|"looks up users"| node_user
node_notes -->|"reads and writes"| node_note_model
node_notes -->|"checks project"| node_project_model

click node_express "https://github.com/ayush16110/project-camp-backend/blob/main/src/app.js"
click node_auth_routes "https://github.com/ayush16110/project-camp-backend/blob/main/src/routes/auth.routes.js"
click node_project_routes "https://github.com/ayush16110/project-camp-backend/blob/main/src/routes/project.routes.js"
click node_task_routes "https://github.com/ayush16110/project-camp-backend/blob/main/src/routes/task.routes.js"
click node_note_routes "https://github.com/ayush16110/project-camp-backend/blob/main/src/routes/note.routes.js"
click node_health_routes "https://github.com/ayush16110/project-camp-backend/blob/main/src/routes/healthcheck.routes.js"
click node_auth "https://github.com/ayush16110/project-camp-backend/blob/main/src/controllers/auth.controllers.js"
click node_user "https://github.com/ayush16110/project-camp-backend/blob/main/src/models/user.models.js"
click node_authorization "https://github.com/ayush16110/project-camp-backend/blob/main/src/middlewares/auth.middlewares.js"
click node_email "https://github.com/ayush16110/project-camp-backend/blob/main/src/utils/mail.js"
click node_project "https://github.com/ayush16110/project-camp-backend/blob/main/src/controllers/project.controllers.js"
click node_project_model "https://github.com/ayush16110/project-camp-backend/blob/main/src/models/project.models.js"
click node_membership "https://github.com/ayush16110/project-camp-backend/blob/main/src/models/projectmember.models.js"
click node_task "https://github.com/ayush16110/project-camp-backend/blob/main/src/controllers/task.controllers.js"
click node_task_model "https://github.com/ayush16110/project-camp-backend/blob/main/src/models/task.models.js"
click node_subtask_model "https://github.com/ayush16110/project-camp-backend/blob/main/src/models/subtask.models.js"
click node_notes "https://github.com/ayush16110/project-camp-backend/blob/main/src/controllers/note.controllers.js"
click node_note_model "https://github.com/ayush16110/project-camp-backend/blob/main/src/models/note.models.js"
click node_upload "https://github.com/ayush16110/project-camp-backend/blob/main/src/middlewares/multer.middlewares.js"
click node_validation "https://github.com/ayush16110/project-camp-backend/blob/main/src/validators/index.js"
click node_validator "https://github.com/ayush16110/project-camp-backend/blob/main/src/middlewares/validator.middlewares.js"
click node_health "https://github.com/ayush16110/project-camp-backend/blob/main/src/controllers/healthcheck.controllers.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_express,node_auth_routes,node_project_routes,node_task_routes,node_note_routes,node_health_routes,node_validation,node_validator,node_health,node_client toneBlue
class node_auth,node_user,node_authorization,node_email,node_mongo toneAmber
class node_project,node_project_model,node_membership toneMint
class node_task,node_task_model,node_subtask_model,node_notes,node_note_model,node_upload toneRose
class node_mail_service toneIndigo
```

## Components

### HTTP API

- [Express app](https://github.com/ayush16110/project-camp-backend/blob/main/src/app.js): `src/app.js`
- [Auth routes](https://github.com/ayush16110/project-camp-backend/blob/main/src/routes/auth.routes.js): `src/routes/auth.routes.js`
- [Project routes](https://github.com/ayush16110/project-camp-backend/blob/main/src/routes/project.routes.js): `src/routes/project.routes.js`
- [Task routes](https://github.com/ayush16110/project-camp-backend/blob/main/src/routes/task.routes.js): `src/routes/task.routes.js`
- [Note routes](https://github.com/ayush16110/project-camp-backend/blob/main/src/routes/note.routes.js): `src/routes/note.routes.js`
- [Health route](https://github.com/ayush16110/project-camp-backend/blob/main/src/routes/healthcheck.routes.js): `src/routes/healthcheck.routes.js`
- [Request validation](https://github.com/ayush16110/project-camp-backend/blob/main/src/validators/index.js): `src/validators/index.js`
- [Validation middleware](https://github.com/ayush16110/project-camp-backend/blob/main/src/middlewares/validator.middlewares.js): `src/middlewares/validator.middlewares.js`
- [Health check](https://github.com/ayush16110/project-camp-backend/blob/main/src/controllers/healthcheck.controllers.js): `src/controllers/healthcheck.controllers.js`

### Identity and access

- [Account workflows](https://github.com/ayush16110/project-camp-backend/blob/main/src/controllers/auth.controllers.js): `src/controllers/auth.controllers.js`
- [User records](https://github.com/ayush16110/project-camp-backend/blob/main/src/models/user.models.js): `src/models/user.models.js`
- [JWT and project access](https://github.com/ayush16110/project-camp-backend/blob/main/src/middlewares/auth.middlewares.js): `src/middlewares/auth.middlewares.js`
- [Email delivery](https://github.com/ayush16110/project-camp-backend/blob/main/src/utils/mail.js): `src/utils/mail.js`

### Projects and membership

- [Project workflows](https://github.com/ayush16110/project-camp-backend/blob/main/src/controllers/project.controllers.js): `src/controllers/project.controllers.js`
- [Project records](https://github.com/ayush16110/project-camp-backend/blob/main/src/models/project.models.js): `src/models/project.models.js`
- [Project memberships](https://github.com/ayush16110/project-camp-backend/blob/main/src/models/projectmember.models.js): `src/models/projectmember.models.js`

### Tasks and collaboration

- [Task and subtask workflows](https://github.com/ayush16110/project-camp-backend/blob/main/src/controllers/task.controllers.js): `src/controllers/task.controllers.js`
- [Task records](https://github.com/ayush16110/project-camp-backend/blob/main/src/models/task.models.js): `src/models/task.models.js`
- [Subtask records](https://github.com/ayush16110/project-camp-backend/blob/main/src/models/subtask.models.js): `src/models/subtask.models.js`
- [Note workflows](https://github.com/ayush16110/project-camp-backend/blob/main/src/controllers/note.controllers.js): `src/controllers/note.controllers.js`
- [Note records](https://github.com/ayush16110/project-camp-backend/blob/main/src/models/note.models.js): `src/models/note.models.js`
- [Attachment upload](https://github.com/ayush16110/project-camp-backend/blob/main/src/middlewares/multer.middlewares.js): `src/middlewares/multer.middlewares.js`

### Other components

- **API client**
- **MongoDB**
- **Email service**

## Connections

- API client → Express app: sends requests (evidence: `README.md`)
- Express app → Auth routes: mounts routes (evidence: `src/app.js`)
- Express app → Project routes: mounts routes (evidence: `src/app.js`)
- Express app → Task routes: mounts routes (evidence: `src/app.js`)
- Express app → Note routes: mounts routes (evidence: `src/app.js`)
- Express app → Health route: mounts routes (evidence: `src/app.js`)
- Auth routes → Account workflows: dispatches (evidence: `src/routes/auth.routes.js`)
- Project routes → Project workflows: dispatches (evidence: `src/routes/project.routes.js`)
- Task routes → Task and subtask workflows: dispatches (evidence: `src/routes/task.routes.js`)
- Note routes → Note workflows: dispatches (evidence: `src/routes/note.routes.js`)
- Health route → Health check: dispatches (evidence: `src/routes/healthcheck.routes.js`)
- Auth routes → JWT and project access: uses JWT checks (evidence: `src/routes/auth.routes.js`)
- Project routes → JWT and project access: checks permissions (evidence: `src/routes/project.routes.js`)
- Task routes → JWT and project access: checks permissions (evidence: `src/routes/task.routes.js`)
- Note routes → JWT and project access: uses JWT checks (evidence: `src/routes/note.routes.js`)
- Auth routes → Request validation: uses validators (evidence: `src/routes/auth.routes.js`)
- Project routes → Request validation: uses validators (evidence: `src/routes/project.routes.js`)
- Task routes → Request validation: uses validators (evidence: `src/routes/task.routes.js`)
- Note routes → Request validation: uses validators (evidence: `src/routes/note.routes.js`)
- Auth routes → Validation middleware: runs validation (evidence: `src/routes/auth.routes.js`)
- Project routes → Validation middleware: runs validation (evidence: `src/routes/project.routes.js`)
- Task routes → Validation middleware: runs validation (evidence: `src/routes/task.routes.js`)
- Note routes → Validation middleware: runs validation (evidence: `src/routes/note.routes.js`)
- Task routes → Attachment upload: uploads attachments (evidence: `src/routes/task.routes.js`)
- Account workflows → User records: reads and writes (evidence: `src/controllers/auth.controllers.js`)
- Account workflows → Email delivery: sends account mail (evidence: `src/controllers/auth.controllers.js`)
- Email delivery → Email service: delivers email
- JWT and project access → User records: loads user (evidence: `src/middlewares/auth.middlewares.js`)
- JWT and project access → Project memberships: checks membership (evidence: `src/middlewares/auth.middlewares.js`)
- Project workflows → Project records: reads and writes (evidence: `src/controllers/project.controllers.js`)
- Project workflows → Project memberships: manages membership (evidence: `src/controllers/project.controllers.js`)
- Project workflows → User records: looks up users (evidence: `src/controllers/project.controllers.js`)
- Task and subtask workflows → Task records: reads and writes (evidence: `src/controllers/task.controllers.js`)
- Task and subtask workflows → Subtask records: manages subtasks (evidence: `src/controllers/task.controllers.js`)
- Task and subtask workflows → Project records: checks project (evidence: `src/controllers/task.controllers.js`)
- Task and subtask workflows → Project memberships: checks assignee (evidence: `src/controllers/task.controllers.js`)
- Task and subtask workflows → User records: looks up users (evidence: `src/controllers/task.controllers.js`)
- Note workflows → Note records: reads and writes (evidence: `src/controllers/note.controllers.js`)
- Note workflows → Project records: checks project (evidence: `src/controllers/note.controllers.js`)
