# senaye2003/project-manager-api architecture

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

- Interactive diagram: https://gitdiagram.com/senaye2003/project-manager-api
- Repository: https://github.com/senaye2003/project-manager-api

## Overview

This is a student project-management API template with implemented Express routes for users, projects, tasks, and teams. Clients enter through the server’s mounted routers; route middleware handles authentication, authorization, and validation before controllers invoke services and repositories to perform domain operations against Prisma-backed storage. The source index supports the main service/repository relationships, while excerpts show selected routing and controller calls. The README describes a template, not additional product capabilities; unsampled implementation details are not inferred.

Main entry points: [`src/server.js`](https://github.com/senaye2003/project-manager-api/blob/main/src/server.js) (HTTP server), [`src/routes/teamRoutes.js`](https://github.com/senaye2003/project-manager-api/blob/main/src/routes/teamRoutes.js) (Team routes), [`src/routes/projectRoutes.js`](https://github.com/senaye2003/project-manager-api/blob/main/src/routes/projectRoutes.js) (Project routes), [`src/routes/taskRoutes.js`](https://github.com/senaye2003/project-manager-api/blob/main/src/routes/taskRoutes.js) (Task routes)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_api["API entry and routing"]
  node_server["HTTP server<br/>[server.js]"]
  node_user_routes["User routes<br/>[userRoutes.js]"]
  node_project_routes["Project routes<br/>[projectRoutes.js]"]
  node_task_routes["Task routes<br/>[taskRoutes.js]"]
  node_team_routes["Team routes<br/>[teamRoutes.js]"]
end

subgraph group_access["Identity and access"]
  node_auth["Token authentication<br/>[authenticate.js]"]
  node_role["Role authorization<br/>[authorizeRole.js]"]
  node_membership["Team membership check"]
end

subgraph group_domain["Project management domains"]
  node_user_controller["User handlers<br/>[userController.js]"]
  node_user_service["User operations<br/>[userService.js]"]
  node_project_controller["Project handlers"]
  node_project_service["Project operations<br/>[projectService.js]"]
  node_task_controller["Task handlers<br/>[taskController.js]"]
  node_task_service["Task operations<br/>[taskService.js]"]
  node_team_controller["Team handlers<br/>[teamController.js]"]
  node_team_service["Team operations<br/>[teamService.js]"]
end

subgraph group_data["Persistence"]
  node_user_repo["User repository<br/>[userRepo.js]"]
  node_project_repo["Project repository<br/>[projectRepo.js]"]
  node_task_repo["Task repository<br/>[taskRepo.js]"]
  node_team_repo["Team repository<br/>[teamRepo.js]"]
  node_prisma[("Prisma client<br/>[db.js]")]
end

node_client(("API client"))

node_client -->|"sends requests"| node_server
node_server -->|"mounts routes"| node_user_routes
node_server -->|"mounts routes"| node_project_routes
node_server -->|"mounts routes"| node_task_routes
node_server -->|"mounts routes"| node_team_routes
node_user_routes -->|"dispatches"| node_user_controller
node_project_routes -->|"dispatches"| node_project_controller
node_task_routes -->|"dispatches"| node_task_controller
node_team_routes -->|"dispatches"| node_team_controller
node_user_routes -->|"authenticates"| node_auth
node_project_routes -->|"authenticates"| node_auth
node_task_routes -->|"authenticates"| node_auth
node_team_routes -->|"authenticates"| node_auth
node_project_routes -->|"checks roles"| node_role
node_task_routes -->|"checks roles"| node_role
node_team_routes -->|"checks roles"| node_role
node_team_routes -->|"checks membership"| node_membership
node_project_controller -->|"calls"| node_project_service
node_task_controller -->|"calls"| node_task_service
node_team_controller -->|"calls"| node_team_service
node_user_controller -->|"calls"| node_user_service
node_team_controller -->|"checks team"| node_team_repo
node_membership -->|"checks member"| node_team_service
node_project_service -->|"calls"| node_project_repo
node_task_service -->|"calls"| node_task_repo
node_team_service -->|"calls"| node_team_repo
node_user_service -->|"calls"| node_user_repo
node_project_repo -->|"queries"| node_prisma
node_task_repo -->|"queries"| node_prisma
node_team_repo -->|"queries"| node_prisma
node_user_repo -->|"queries"| node_prisma

click node_server "https://github.com/senaye2003/project-manager-api/blob/main/src/server.js"
click node_user_routes "https://github.com/senaye2003/project-manager-api/blob/main/src/routes/userRoutes.js"
click node_project_routes "https://github.com/senaye2003/project-manager-api/blob/main/src/routes/projectRoutes.js"
click node_task_routes "https://github.com/senaye2003/project-manager-api/blob/main/src/routes/taskRoutes.js"
click node_team_routes "https://github.com/senaye2003/project-manager-api/blob/main/src/routes/teamRoutes.js"
click node_auth "https://github.com/senaye2003/project-manager-api/blob/main/src/middleware/authenticate.js"
click node_role "https://github.com/senaye2003/project-manager-api/blob/main/src/middleware/authorizeRole.js"
click node_membership "https://github.com/senaye2003/project-manager-api/blob/main/src/middleware/authorizeTeamMembership.js"
click node_user_controller "https://github.com/senaye2003/project-manager-api/blob/main/src/controllers/userController.js"
click node_user_service "https://github.com/senaye2003/project-manager-api/blob/main/src/services/userService.js"
click node_project_controller "https://github.com/senaye2003/project-manager-api/blob/main/src/controllers/projectController.js"
click node_project_service "https://github.com/senaye2003/project-manager-api/blob/main/src/services/projectService.js"
click node_task_controller "https://github.com/senaye2003/project-manager-api/blob/main/src/controllers/taskController.js"
click node_task_service "https://github.com/senaye2003/project-manager-api/blob/main/src/services/taskService.js"
click node_team_controller "https://github.com/senaye2003/project-manager-api/blob/main/src/controllers/teamController.js"
click node_team_service "https://github.com/senaye2003/project-manager-api/blob/main/src/services/teamService.js"
click node_user_repo "https://github.com/senaye2003/project-manager-api/blob/main/src/repositories/userRepo.js"
click node_project_repo "https://github.com/senaye2003/project-manager-api/blob/main/src/repositories/projectRepo.js"
click node_task_repo "https://github.com/senaye2003/project-manager-api/blob/main/src/repositories/taskRepo.js"
click node_team_repo "https://github.com/senaye2003/project-manager-api/blob/main/src/repositories/teamRepo.js"
click node_prisma "https://github.com/senaye2003/project-manager-api/blob/main/src/config/db.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_server,node_user_routes,node_project_routes,node_task_routes,node_team_routes,node_client toneBlue
class node_auth,node_role,node_membership toneAmber
class node_user_controller,node_user_service,node_project_controller,node_project_service,node_task_controller,node_task_service,node_team_controller,node_team_service toneMint
class node_user_repo,node_project_repo,node_task_repo,node_team_repo,node_prisma toneRose
```

## Components

### API entry and routing

- [HTTP server](https://github.com/senaye2003/project-manager-api/blob/main/src/server.js): `src/server.js`
- [User routes](https://github.com/senaye2003/project-manager-api/blob/main/src/routes/userRoutes.js): `src/routes/userRoutes.js`
- [Project routes](https://github.com/senaye2003/project-manager-api/blob/main/src/routes/projectRoutes.js): `src/routes/projectRoutes.js`
- [Task routes](https://github.com/senaye2003/project-manager-api/blob/main/src/routes/taskRoutes.js): `src/routes/taskRoutes.js`
- [Team routes](https://github.com/senaye2003/project-manager-api/blob/main/src/routes/teamRoutes.js): `src/routes/teamRoutes.js`

### Identity and access

- [Token authentication](https://github.com/senaye2003/project-manager-api/blob/main/src/middleware/authenticate.js): `src/middleware/authenticate.js`
- [Role authorization](https://github.com/senaye2003/project-manager-api/blob/main/src/middleware/authorizeRole.js): `src/middleware/authorizeRole.js`
- [Team membership check](https://github.com/senaye2003/project-manager-api/blob/main/src/middleware/authorizeTeamMembership.js): `src/middleware/authorizeTeamMembership.js`

### Project management domains

- [User handlers](https://github.com/senaye2003/project-manager-api/blob/main/src/controllers/userController.js): `src/controllers/userController.js`
- [User operations](https://github.com/senaye2003/project-manager-api/blob/main/src/services/userService.js): `src/services/userService.js`
- [Project handlers](https://github.com/senaye2003/project-manager-api/blob/main/src/controllers/projectController.js): `src/controllers/projectController.js`
- [Project operations](https://github.com/senaye2003/project-manager-api/blob/main/src/services/projectService.js): `src/services/projectService.js`
- [Task handlers](https://github.com/senaye2003/project-manager-api/blob/main/src/controllers/taskController.js): `src/controllers/taskController.js`
- [Task operations](https://github.com/senaye2003/project-manager-api/blob/main/src/services/taskService.js): `src/services/taskService.js`
- [Team handlers](https://github.com/senaye2003/project-manager-api/blob/main/src/controllers/teamController.js): `src/controllers/teamController.js`
- [Team operations](https://github.com/senaye2003/project-manager-api/blob/main/src/services/teamService.js): `src/services/teamService.js`

### Persistence

- [User repository](https://github.com/senaye2003/project-manager-api/blob/main/src/repositories/userRepo.js): `src/repositories/userRepo.js`
- [Project repository](https://github.com/senaye2003/project-manager-api/blob/main/src/repositories/projectRepo.js): `src/repositories/projectRepo.js`
- [Task repository](https://github.com/senaye2003/project-manager-api/blob/main/src/repositories/taskRepo.js): `src/repositories/taskRepo.js`
- [Team repository](https://github.com/senaye2003/project-manager-api/blob/main/src/repositories/teamRepo.js): `src/repositories/teamRepo.js`
- [Prisma client](https://github.com/senaye2003/project-manager-api/blob/main/src/config/db.js): `src/config/db.js`

### Other components

- **API client**

## Connections

- API client → HTTP server: sends requests
- HTTP server → User routes: mounts routes (evidence: `src/server.js`)
- HTTP server → Project routes: mounts routes (evidence: `src/server.js`)
- HTTP server → Task routes: mounts routes (evidence: `src/server.js`)
- HTTP server → Team routes: mounts routes (evidence: `src/server.js`)
- User routes → User handlers: dispatches (evidence: `src/routes/userRoutes.js`)
- Project routes → Project handlers: dispatches (evidence: `src/routes/projectRoutes.js`)
- Task routes → Task handlers: dispatches (evidence: `src/routes/taskRoutes.js`)
- Team routes → Team handlers: dispatches (evidence: `src/routes/teamRoutes.js`)
- User routes → Token authentication: authenticates (evidence: `src/routes/userRoutes.js`)
- Project routes → Token authentication: authenticates (evidence: `src/routes/projectRoutes.js`)
- Task routes → Token authentication: authenticates (evidence: `src/routes/taskRoutes.js`)
- Team routes → Token authentication: authenticates (evidence: `src/routes/teamRoutes.js`)
- Project routes → Role authorization: checks roles (evidence: `src/routes/projectRoutes.js`)
- Task routes → Role authorization: checks roles (evidence: `src/routes/taskRoutes.js`)
- Team routes → Role authorization: checks roles (evidence: `src/routes/teamRoutes.js`)
- Team routes → Team membership check: checks membership (evidence: `src/routes/teamRoutes.js`)
- Project handlers → Project operations: calls (evidence: `src/controllers/projectController.js`)
- Task handlers → Task operations: calls (evidence: `src/controllers/taskController.js`)
- Team handlers → Team operations: calls (evidence: `src/controllers/teamController.js`)
- User handlers → User operations: calls (evidence: `src/controllers/userController.js`)
- Team handlers → Team repository: checks team (evidence: `src/controllers/teamController.js`)
- Team membership check → Team operations: checks member (evidence: `src/middleware/authorizeTeamMembership.js`)
- Project operations → Project repository: calls (evidence: `src/services/projectService.js`)
- Task operations → Task repository: calls (evidence: `src/services/taskService.js`)
- Team operations → Team repository: calls (evidence: `src/services/teamService.js`)
- User operations → User repository: calls (evidence: `src/services/userService.js`)
- Project repository → Prisma client: queries (evidence: `src/repositories/projectRepo.js`)
- Task repository → Prisma client: queries (evidence: `src/repositories/taskRepo.js`)
- Team repository → Prisma client: queries (evidence: `src/repositories/teamRepo.js`)
- User repository → Prisma client: queries (evidence: `src/repositories/userRepo.js`)
