# tanvir1017/task-management architecture

> Architecture diagram of the GitHub repository tanvir1017/task-management, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-06-28). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/tanvir1017/task-management
- Repository: https://github.com/tanvir1017/task-management

## Overview

1. **Overall shape**
   - This is a NestJS backend API for task management.
   - The application is organized by domain modules: `auth`, `users`, `task`, and `audit`, with shared infrastructure under `src/common`.
   - The core request path is: HTTP controller → service layer → Prisma persistence → response/filter/interceptor pipeline.

2. **Runtime and deployment boundary**
   - The repo is designed to run either locally or via Docker Compose.
   - The documented stack includes the API, PostgreSQL, Redis, and PgAdmin.
   - The API is exposed under `/api/v1`, and Swagger docs under `/api/docs`.

3. **Composition root**
   - `src/main.ts` bootstraps the Nest application.
   - `src/main/app.module.ts` is the main wiring point that imports feature modules.
   - `app.controller.ts` and `app.service.ts` appear to be the minimal root endpoint layer, while most business logic lives in feature modules.

4. **Shared platform layer**
   - `src/common/providers/prisma.module.ts` and `prisma.service.ts` provide the database client as a shared infrastructure dependency.
   - `src/common/filters/http-exception.filter.ts` standardizes API error handling.
   - `src/common/interceptors/response.interceptor.ts` suggests a consistent response envelope or output shaping across endpoints.
   - `src/common/interfaces/api-response.interface.ts` defines that shared API response contract.

5. **Security and authorization**
   - Authentication is JWT-based, with `jwt.strategy.ts` and `jwt-auth.guard.ts` enforcing identity checks.
   - Authorization is role-driven through `roles.decorator.ts` and `roles.guard.ts`.
   - `public.decorator.ts` marks endpoints that bypass auth, so the access control boundary is explicit at the controller level.

6. **Auth module**
   - `auth.controller.ts` and `auth.service.ts` handle login, registration, profile update, and user lookup flows.
   - DTOs such as `login.dto.ts`, `register.dto.ts`, and `update-profile.dto.ts` show that input validation is part of the API boundary.
   - The module also owns the JWT payload contract and strategy integration, making it the identity source for the rest of the system.

7. **Users module**
   - `users` looks like the administrative/user-management boundary separate from authentication.
   - It likely supports user listing and user updates, with DTOs for query filtering and edits.
   - This separation keeps identity concerns in `auth` and CRUD/admin concerns in `users`.

8. **Task module**
   - `task` is the primary business module.
   - The DTO set indicates task creation, full updates, status changes, and two list modes: “all tasks” and “my tasks”.
   - That implies both admin-wide task views and user-scoped task views, with authorization determining which controller paths are allowed.

9. **Audit module**
   - `audit` is a dedicated subsystem for tracking system activity.
   - The presence of `audit.controller.ts`, `audit.service.ts`, and `audit.processor.ts` suggests audit events are collected centrally and may be processed separately from the main request path.
   - `get-audit-logs-query.dto.ts` indicates filtered audit-log retrieval for administrative inspection.

10. **Persistence and data lifecycle**
   - Prisma is the single persistence layer, with schema in `prisma/schema.prisma` and migrations in `prisma/migrations`.
   - `prisma/seed.ts` loads demo data, including seeded admin and regular users described in the README.
   - The database is therefore a first-class architectural boundary: modules talk to Prisma, not directly to SQL.

11. **Configuration and environment**
   - Environment-driven setup is present via `.env` / `.env.example`.
   - `src/configs/request.config.ts` likely centralizes runtime request or connection configuration, tying the app to environment-specific settings.
   - Docker files plus compose define the production-like local topology, while local development relies on Node.js, PostgreSQL, and Redis.

12. **How to draw the architecture**
   - Put NestJS at the center with four domain boxes: Auth, Users, Tasks, Audit.
   - Draw shared cross-cutting boxes around them for Prisma, JWT/roles security, response/error handling, and Swagger/API docs.
   - Show PostgreSQL as the primary data store, Redis as supporting infrastructure in the dockerized stack, and seed/migration scripts as the database initialization path.

Main entry points: [`src/main/app.module.ts`](https://github.com/tanvir1017/task-management/blob/main/src/main/app.module.ts) (App module), [`src/common/providers/prisma.service.ts`](https://github.com/tanvir1017/task-management/blob/main/src/common/providers/prisma.service.ts) (Prisma service), [`src/modules/auth/auth.module.ts`](https://github.com/tanvir1017/task-management/blob/main/src/modules/auth/auth.module.ts) (Auth module), [`src/modules/users/users.controller.ts`](https://github.com/tanvir1017/task-management/blob/main/src/modules/users/users.controller.ts) (Users controller)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_runtime["Runtime"]
  node_main["Main<br/>bootstrap<br/>[main.ts]"]
  node_appmodule["App module<br/>composition root<br/>[app.module.ts]"]
  node_appcontroller["Root controller<br/>http root<br/>[app.controller.ts]"]
  node_appservice["Root service<br/>root logic<br/>[app.service.ts]"]
end

subgraph group_platform["Platform"]
  node_prismamodule["Prisma module<br/>db provider<br/>[prisma.module.ts]"]
  node_prismaservice["Prisma service<br/>db client<br/>[prisma.service.ts]"]
  node_responseinterceptor["Response interceptor<br/>api pipeline"]
  node_httpexceptionfilter["HTTP filter<br/>error handling"]
  node_apiresponse["API contract<br/>response schema"]
end

subgraph group_security["Security"]
  node_publicdecorator{{"Public<br/>access marker"}}
  node_rolesdecorator{{"Roles<br/>access marker<br/>[roles.decorator.ts]"}}
  node_jwtauthguard["JWT guard<br/>auth guard<br/>[jwt-auth.guard.ts]"]
  node_rolesguard["Roles guard<br/>auth guard<br/>[roles.guard.ts]"]
  node_jwtstrategy["JWT strategy<br/>auth strategy<br/>[jwt.strategy.ts]"]
end

subgraph group_domains["Domains"]
  node_authmodule["Auth module<br/>feature module<br/>[auth.module.ts]"]
  node_authcontroller["Auth controller<br/>http api<br/>[auth.controller.ts]"]
  node_authservice["Auth service<br/>domain service<br/>[auth.service.ts]"]
  node_usersmodule["Users module<br/>feature module<br/>[users.module.ts]"]
  node_userscontroller["Users controller<br/>http api"]
  node_usersservice["Users service<br/>domain service<br/>[users.service.ts]"]
  node_taskmodule["Task module<br/>feature module<br/>[task.module.ts]"]
  node_taskcontroller["Task controller<br/>http api<br/>[task.controller.ts]"]
  node_taskservice["Task service<br/>domain service<br/>[task.service.ts]"]
  node_auditmodule["Audit module<br/>feature module<br/>[audit.module.ts]"]
  node_auditcontroller["Audit controller<br/>http api"]
  node_auditservice["Audit service<br/>domain service<br/>[audit.service.ts]"]
  node_auditprocessor["Audit processor<br/>async worker<br/>[audit.processor.ts]"]
end

subgraph group_data["Data"]
  node_prismaschema["Schema<br/>[schema.prisma]"]
  node_seed["Seed data<br/>bootstrap data<br/>[seed.ts]"]
  node_migrations[("Migrations")]
  node_postgres[("PostgreSQL<br/>database")]
  node_redis["Redis<br/>cache/queue"]
  node_compose["Compose<br/>deployment<br/>[docker-compose.yml]"]
  node_dockerfile["Dockerfile<br/>deployment"]
end

node_main -->|"boots"| node_appmodule
node_appmodule -->|"hosts"| node_appcontroller
node_appmodule -->|"provides"| node_appservice
node_appmodule -->|"imports"| node_prismamodule
node_appmodule -->|"imports"| node_authmodule
node_appmodule -->|"imports"| node_usersmodule
node_appmodule -->|"imports"| node_taskmodule
node_appmodule -->|"imports"| node_auditmodule
node_authmodule -->|"exposes"| node_authcontroller
node_authmodule -->|"provides"| node_authservice
node_authmodule -->|"uses"| node_jwtstrategy
node_authcontroller -.->|"marks"| node_publicdecorator
node_authcontroller -->|"protected by"| node_jwtauthguard
node_authservice -->|"queries"| node_prismaservice
node_usersmodule -->|"exposes"| node_userscontroller
node_usersmodule -->|"provides"| node_usersservice
node_userscontroller -->|"protected by"| node_jwtauthguard
node_userscontroller -->|"protected by"| node_rolesguard
node_userscontroller -.->|"declares"| node_rolesdecorator
node_usersservice -->|"queries"| node_prismaservice
node_taskmodule -->|"exposes"| node_taskcontroller
node_taskmodule -->|"provides"| node_taskservice
node_taskcontroller -->|"protected by"| node_jwtauthguard
node_taskcontroller -->|"protected by"| node_rolesguard
node_taskcontroller -.->|"declares"| node_rolesdecorator
node_taskservice -->|"queries"| node_prismaservice
node_auditmodule -->|"exposes"| node_auditcontroller
node_auditmodule -->|"provides"| node_auditservice
node_auditmodule -->|"runs"| node_auditprocessor
node_auditcontroller -->|"protected by"| node_jwtauthguard
node_auditcontroller -->|"protected by"| node_rolesguard
node_auditservice -->|"stores"| node_prismaservice
node_auditprocessor -->|"persists"| node_prismaservice
node_prismamodule -->|"provides"| node_prismaservice
node_prismaservice -->|"maps to"| node_prismaschema
node_prismaservice -->|"connects to"| node_postgres
node_seed -.->|"initializes"| node_postgres
node_migrations -.->|"evolves"| node_postgres
node_responseinterceptor -->|"enforces"| node_apiresponse
node_httpexceptionfilter -->|"standardizes"| node_apiresponse
node_compose -->|"runs"| node_postgres
node_compose -->|"runs"| node_redis
node_compose -.->|"builds"| node_dockerfile
node_main -->|"registers"| node_responseinterceptor
node_main -->|"registers"| node_httpexceptionfilter

click node_main "https://github.com/tanvir1017/task-management/blob/main/src/main.ts"
click node_appmodule "https://github.com/tanvir1017/task-management/blob/main/src/main/app.module.ts"
click node_appcontroller "https://github.com/tanvir1017/task-management/blob/main/src/main/app.controller.ts"
click node_appservice "https://github.com/tanvir1017/task-management/blob/main/src/main/app.service.ts"
click node_prismamodule "https://github.com/tanvir1017/task-management/blob/main/src/common/providers/prisma.module.ts"
click node_prismaservice "https://github.com/tanvir1017/task-management/blob/main/src/common/providers/prisma.service.ts"
click node_responseinterceptor "https://github.com/tanvir1017/task-management/blob/main/src/common/interceptors/response.interceptor.ts"
click node_httpexceptionfilter "https://github.com/tanvir1017/task-management/blob/main/src/common/filters/http-exception.filter.ts"
click node_apiresponse "https://github.com/tanvir1017/task-management/blob/main/src/common/interfaces/api-response.interface.ts"
click node_publicdecorator "https://github.com/tanvir1017/task-management/blob/main/src/common/decorators/public.decorator.ts"
click node_rolesdecorator "https://github.com/tanvir1017/task-management/blob/main/src/common/decorators/roles.decorator.ts"
click node_jwtauthguard "https://github.com/tanvir1017/task-management/blob/main/src/common/guards/jwt-auth.guard.ts"
click node_rolesguard "https://github.com/tanvir1017/task-management/blob/main/src/common/guards/roles.guard.ts"
click node_jwtstrategy "https://github.com/tanvir1017/task-management/blob/main/src/modules/auth/jwt.strategy.ts"
click node_authmodule "https://github.com/tanvir1017/task-management/blob/main/src/modules/auth/auth.module.ts"
click node_authcontroller "https://github.com/tanvir1017/task-management/blob/main/src/modules/auth/auth.controller.ts"
click node_authservice "https://github.com/tanvir1017/task-management/blob/main/src/modules/auth/auth.service.ts"
click node_usersmodule "https://github.com/tanvir1017/task-management/blob/main/src/modules/users/users.module.ts"
click node_userscontroller "https://github.com/tanvir1017/task-management/blob/main/src/modules/users/users.controller.ts"
click node_usersservice "https://github.com/tanvir1017/task-management/blob/main/src/modules/users/users.service.ts"
click node_taskmodule "https://github.com/tanvir1017/task-management/blob/main/src/modules/task/task.module.ts"
click node_taskcontroller "https://github.com/tanvir1017/task-management/blob/main/src/modules/task/task.controller.ts"
click node_taskservice "https://github.com/tanvir1017/task-management/blob/main/src/modules/task/task.service.ts"
click node_auditmodule "https://github.com/tanvir1017/task-management/blob/main/src/modules/audit/audit.module.ts"
click node_auditcontroller "https://github.com/tanvir1017/task-management/blob/main/src/modules/audit/audit.controller.ts"
click node_auditservice "https://github.com/tanvir1017/task-management/blob/main/src/modules/audit/audit.service.ts"
click node_auditprocessor "https://github.com/tanvir1017/task-management/blob/main/src/modules/audit/audit.processor.ts"
click node_prismaschema "https://github.com/tanvir1017/task-management/blob/main/prisma/schema.prisma"
click node_seed "https://github.com/tanvir1017/task-management/blob/main/prisma/seed.ts"
click node_migrations "https://github.com/tanvir1017/task-management/tree/main/prisma/migrations"
click node_compose "https://github.com/tanvir1017/task-management/blob/main/docker-compose.yml"
click node_dockerfile "https://github.com/tanvir1017/task-management/tree/main/dockerfile"

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_main,node_appmodule,node_appcontroller,node_appservice toneBlue
class node_prismamodule,node_prismaservice,node_responseinterceptor,node_httpexceptionfilter,node_apiresponse toneAmber
class node_publicdecorator,node_rolesdecorator,node_jwtauthguard,node_rolesguard,node_jwtstrategy toneMint
class node_authmodule,node_authcontroller,node_authservice,node_usersmodule,node_userscontroller,node_usersservice,node_taskmodule,node_taskcontroller,node_taskservice,node_auditmodule,node_auditcontroller,node_auditservice,node_auditprocessor toneRose
class node_prismaschema,node_seed,node_migrations,node_postgres,node_redis,node_compose,node_dockerfile toneIndigo
```

## Components

### Runtime

NestJS bootstrapping and root API layer

- [Main](https://github.com/tanvir1017/task-management/blob/main/src/main.ts): bootstrap · Starts the Nest application · `src/main.ts`
- [App module](https://github.com/tanvir1017/task-management/blob/main/src/main/app.module.ts): composition root · Wires application modules together · `src/main/app.module.ts`
- [Root controller](https://github.com/tanvir1017/task-management/blob/main/src/main/app.controller.ts): http root · Minimal top-level endpoint layer · `src/main/app.controller.ts`
- [Root service](https://github.com/tanvir1017/task-management/blob/main/src/main/app.service.ts): root logic · Minimal root application service · `src/main/app.service.ts`

### Platform

Shared infrastructure and API pipeline

- [Prisma module](https://github.com/tanvir1017/task-management/blob/main/src/common/providers/prisma.module.ts): db provider · Registers the shared Prisma provider · `src/common/providers/prisma.module.ts`
- [Prisma service](https://github.com/tanvir1017/task-management/blob/main/src/common/providers/prisma.service.ts): db client · Database client wrapper used by modules · `src/common/providers/prisma.service.ts`
- [Response interceptor](https://github.com/tanvir1017/task-management/blob/main/src/common/interceptors/response.interceptor.ts): api pipeline · Shapes outgoing responses consistently · `src/common/interceptors/response.interceptor.ts`
- [HTTP filter](https://github.com/tanvir1017/task-management/blob/main/src/common/filters/http-exception.filter.ts): error handling · Standardizes API exception responses · `src/common/filters/http-exception.filter.ts`
- [API contract](https://github.com/tanvir1017/task-management/blob/main/src/common/interfaces/api-response.interface.ts): response schema · Shared response envelope interface · `src/common/interfaces/api-response.interface.ts`

### Security

Identity and authorization boundary

- [Public](https://github.com/tanvir1017/task-management/blob/main/src/common/decorators/public.decorator.ts): access marker · Marks endpoints that bypass auth · `src/common/decorators/public.decorator.ts`
- [Roles](https://github.com/tanvir1017/task-management/blob/main/src/common/decorators/roles.decorator.ts): access marker · Declares role requirements on handlers · `src/common/decorators/roles.decorator.ts`
- [JWT guard](https://github.com/tanvir1017/task-management/blob/main/src/common/guards/jwt-auth.guard.ts): auth guard · Enforces authenticated access · `src/common/guards/jwt-auth.guard.ts`
- [Roles guard](https://github.com/tanvir1017/task-management/blob/main/src/common/guards/roles.guard.ts): auth guard · Enforces role-based authorization · `src/common/guards/roles.guard.ts`
- [JWT strategy](https://github.com/tanvir1017/task-management/blob/main/src/modules/auth/jwt.strategy.ts): auth strategy · Validates JWT payloads and identity · `src/modules/auth/jwt.strategy.ts`

### Domains

Feature modules for business workflows

- [Auth module](https://github.com/tanvir1017/task-management/blob/main/src/modules/auth/auth.module.ts): feature module · Authentication and identity workflows · `src/modules/auth/auth.module.ts`
- [Auth controller](https://github.com/tanvir1017/task-management/blob/main/src/modules/auth/auth.controller.ts): http api · Login, register, profile, and user lookup endpoints · `src/modules/auth/auth.controller.ts`
- [Auth service](https://github.com/tanvir1017/task-management/blob/main/src/modules/auth/auth.service.ts): domain service · Implements authentication and profile flows · `src/modules/auth/auth.service.ts`
- [Users module](https://github.com/tanvir1017/task-management/blob/main/src/modules/users/users.module.ts): feature module · Administrative user management · `src/modules/users/users.module.ts`
- [Users controller](https://github.com/tanvir1017/task-management/blob/main/src/modules/users/users.controller.ts): http api · User management endpoints · `src/modules/users/users.controller.ts`
- [Users service](https://github.com/tanvir1017/task-management/blob/main/src/modules/users/users.service.ts): domain service · Implements user administration logic · `src/modules/users/users.service.ts`
- [Task module](https://github.com/tanvir1017/task-management/blob/main/src/modules/task/task.module.ts): feature module · Primary task management domain · `src/modules/task/task.module.ts`
- [Task controller](https://github.com/tanvir1017/task-management/blob/main/src/modules/task/task.controller.ts): http api · Task list and mutation endpoints · `src/modules/task/task.controller.ts`
- [Task service](https://github.com/tanvir1017/task-management/blob/main/src/modules/task/task.service.ts): domain service · Implements task workflows and queries · `src/modules/task/task.service.ts`
- [Audit module](https://github.com/tanvir1017/task-management/blob/main/src/modules/audit/audit.module.ts): feature module · Audit logging and retrieval subsystem · `src/modules/audit/audit.module.ts`
- [Audit controller](https://github.com/tanvir1017/task-management/blob/main/src/modules/audit/audit.controller.ts): http api · Audit log query endpoints · `src/modules/audit/audit.controller.ts`
- [Audit service](https://github.com/tanvir1017/task-management/blob/main/src/modules/audit/audit.service.ts): domain service · Coordinates audit log operations · `src/modules/audit/audit.service.ts`
- [Audit processor](https://github.com/tanvir1017/task-management/blob/main/src/modules/audit/audit.processor.ts): async worker · Processes audit events separately from requests · `src/modules/audit/audit.processor.ts`

### Data

Persistence and local deployment

- [Schema](https://github.com/tanvir1017/task-management/blob/main/prisma/schema.prisma): prisma schema · Database schema definition · `prisma/schema.prisma`
- [Seed data](https://github.com/tanvir1017/task-management/blob/main/prisma/seed.ts): bootstrap data · Loads initial demo users and sample data · `prisma/seed.ts`
- [Migrations](https://github.com/tanvir1017/task-management/tree/main/prisma/migrations): db migrations · Database evolution scripts · `prisma/migrations`
- **PostgreSQL**: database · Primary persistent data store
- **Redis**: cache/queue · Supporting runtime infrastructure in compose
- [Compose](https://github.com/tanvir1017/task-management/blob/main/docker-compose.yml): deployment · Local multi-service runtime definition · `docker-compose.yml`
- [Dockerfile](https://github.com/tanvir1017/task-management/tree/main/dockerfile): deployment · Container build for the API service · `dockerfile`

## Connections

- Main → App module: boots · Entry point creates the Nest application
- App module → Root controller: hosts · Wires the root controller into the app
- App module → Root service: provides · Registers the root application service
- App module → Prisma module: imports · Shares the database provider across modules
- App module → Auth module: imports · Composes authentication features
- App module → Users module: imports · Composes user-management features
- App module → Task module: imports · Composes task-management features
- App module → Audit module: imports · Composes audit features
- Auth module → Auth controller: exposes · Serves authentication endpoints
- Auth module → Auth service: provides · Contains auth business logic
- Auth module → JWT strategy: uses · Adds JWT validation to the auth boundary
- Auth controller → Public: marks · Some routes bypass authentication
- Auth controller → JWT guard: protected by · Authenticated routes use the JWT guard
- Auth service → Prisma service: queries · Auth flows read and update users through Prisma
- Users module → Users controller: exposes · Serves user-management endpoints
- Users module → Users service: provides · Contains user administration logic
- Users controller → JWT guard: protected by · User admin endpoints require authentication
- Users controller → Roles guard: protected by · Sensitive routes require role checks
- Users controller → Roles: declares · Routes declare required roles
- Users service → Prisma service: queries · Reads and updates users in the database
- Task module → Task controller: exposes · Serves task endpoints
- Task module → Task service: provides · Contains task business logic
- Task controller → JWT guard: protected by · Task routes require authenticated access
- Task controller → Roles guard: protected by · Task routes are role-scoped where needed
- Task controller → Roles: declares · Task handlers declare access roles
- Task service → Prisma service: queries · Task workflows persist via Prisma
- Audit module → Audit controller: exposes · Serves audit-log query endpoints
- Audit module → Audit service: provides · Contains audit coordination logic
- Audit module → Audit processor: runs · Processes audit events asynchronously
- Audit controller → JWT guard: protected by · Audit visibility is authenticated
- Audit controller → Roles guard: protected by · Audit access is role restricted
- Audit service → Prisma service: stores · Writes and retrieves audit records
- Audit processor → Prisma service: persists · Worker writes audit data through Prisma
- Prisma module → Prisma service: provides · Registers the shared Prisma client
- Prisma service → Schema: maps to · Client is generated from the schema
- Prisma service → PostgreSQL: connects to · Primary persistence target
- Seed data → PostgreSQL: initializes · Loads demo data into the database
- Migrations → PostgreSQL: evolves · Applies schema changes to the database
- Response interceptor → API contract: enforces · Shapes responses to the shared contract
- HTTP filter → API contract: standardizes · Error responses align with API conventions
- Compose → PostgreSQL: runs · Local stack includes PostgreSQL
- Compose → Redis: runs · Local stack includes Redis
- Compose → Dockerfile: builds · Compose uses the API container build
- Main → Response interceptor: registers · Global response shaping is applied at bootstrap
- Main → HTTP filter: registers · Global error handling is applied at bootstrap
