# hovog83/nestjs_api architecture

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

- Interactive diagram: https://gitdiagram.com/hovog83/nestjs_api
- Repository: https://github.com/hovog83/nestjs_api

## Overview

This is a NestJS API for authentication and managing users, albums, and products. The main workflow is an HTTP request entering through a controller, passing applicable guards, reaching a service, and reading or changing PostgreSQL-backed records. Authentication also issues JWTs and sends a verification email through SendGrid. The README describes a generic Nest starter rather than these application capabilities; the graph follows the sampled source and tree, so unsampled module wiring and guard behavior are shown only where explicitly supported.

Main entry points: [`src/app.module.ts`](https://github.com/hovog83/nestjs_api/blob/master/src/app.module.ts) (App configuration), [`src/auth/auth.service.ts`](https://github.com/hovog83/nestjs_api/blob/master/src/auth/auth.service.ts) (Authentication), [`src/user/user.controller.ts`](https://github.com/hovog83/nestjs_api/blob/master/src/user/user.controller.ts) (User routes), [`src/albom/albom.controller.ts`](https://github.com/hovog83/nestjs_api/blob/master/src/albom/albom.controller.ts) (Album routes)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_runtime["Application runtime"]
  node_bootstrap["HTTP bootstrap<br/>[main.ts]"]
  node_appmodule["App configuration<br/>[app.module.ts]"]
  node_validation["Request validation<br/>[validation.pipe.ts]"]
end

subgraph group_identity["Identity and access"]
  node_authcontroller["Auth routes<br/>[auth.controller.ts]"]
  node_authservice["Authentication<br/>[auth.service.ts]"]
  node_authguard["Auth guard<br/>[auth-guard.ts]"]
  node_adminguard["Admin guard<br/>[admin-guard.ts]"]
end

subgraph group_catalog["User and catalog"]
  node_usercontroller["User routes<br/>[user.controller.ts]"]
  node_userservice["User operations<br/>[user.service.ts]"]
  node_usermodel["User model<br/>[user.model.ts]"]
  node_albomcontroller["Album routes"]
  node_albomservice["Album operations<br/>[albom.service.ts]"]
  node_albommodel["Album model<br/>[albom.model.ts]"]
  node_productcontroller["Product routes"]
  node_productservice["Product operations<br/>[product.service.ts]"]
  node_productmodel["Product model<br/>[product.model.ts]"]
end

subgraph group_integrations["Persistence and messaging"]
  node_postgres[("PostgreSQL")]
  node_jwt["JWT service"]
  node_mailer["Verification mail<br/>[mailer.service.ts]"]
  node_sendgrid["SendGrid"]
end

node_client(("API client"))

node_bootstrap -->|"creates app"| node_appmodule
node_bootstrap -->|"installs pipe"| node_validation
node_client -->|"sends requests"| node_authcontroller
node_client -->|"sends requests"| node_usercontroller
node_client -->|"sends requests"| node_albomcontroller
node_client -->|"sends requests"| node_productcontroller
node_authcontroller -->|"calls"| node_authservice
node_authservice -->|"queries and creates"| node_usermodel
node_authservice -->|"signs token"| node_jwt
node_authservice -->|"sends verification"| node_mailer
node_mailer -->|"sends email"| node_sendgrid
node_usercontroller -->|"guards routes"| node_authguard
node_usercontroller -->|"guards admin routes"| node_adminguard
node_albomcontroller -->|"guards routes"| node_authguard
node_albomcontroller -->|"guards admin route"| node_adminguard
node_usercontroller -->|"calls"| node_userservice
node_userservice -->|"queries and updates"| node_usermodel
node_albomcontroller -->|"calls"| node_albomservice
node_albomservice -->|"queries and updates"| node_albommodel
node_productcontroller -->|"calls"| node_productservice
node_productservice -->|"queries and creates"| node_productmodel
node_appmodule -->|"configures connection"| node_postgres
node_appmodule -->|"registers model"| node_usermodel
node_appmodule -->|"registers model"| node_albommodel
node_appmodule -->|"registers model"| node_productmodel
node_usermodel -->|"maps records"| node_postgres
node_albommodel -->|"maps records"| node_postgres
node_productmodel -->|"maps records"| node_postgres

click node_bootstrap "https://github.com/hovog83/nestjs_api/blob/master/src/main.ts"
click node_appmodule "https://github.com/hovog83/nestjs_api/blob/master/src/app.module.ts"
click node_validation "https://github.com/hovog83/nestjs_api/blob/master/src/helpers/validation.pipe.ts"
click node_authcontroller "https://github.com/hovog83/nestjs_api/blob/master/src/auth/auth.controller.ts"
click node_authservice "https://github.com/hovog83/nestjs_api/blob/master/src/auth/auth.service.ts"
click node_authguard "https://github.com/hovog83/nestjs_api/blob/master/src/auth/auth-guard.ts"
click node_adminguard "https://github.com/hovog83/nestjs_api/blob/master/src/helpers/admin-guard.ts"
click node_usercontroller "https://github.com/hovog83/nestjs_api/blob/master/src/user/user.controller.ts"
click node_userservice "https://github.com/hovog83/nestjs_api/blob/master/src/user/user.service.ts"
click node_usermodel "https://github.com/hovog83/nestjs_api/blob/master/src/user/user.model.ts"
click node_albomcontroller "https://github.com/hovog83/nestjs_api/blob/master/src/albom/albom.controller.ts"
click node_albomservice "https://github.com/hovog83/nestjs_api/blob/master/src/albom/albom.service.ts"
click node_albommodel "https://github.com/hovog83/nestjs_api/blob/master/src/albom/albom.model.ts"
click node_productcontroller "https://github.com/hovog83/nestjs_api/blob/master/src/product/product.controller.ts"
click node_productservice "https://github.com/hovog83/nestjs_api/blob/master/src/product/product.service.ts"
click node_productmodel "https://github.com/hovog83/nestjs_api/blob/master/src/product/product.model.ts"
click node_mailer "https://github.com/hovog83/nestjs_api/blob/master/src/helpers/mailer.service.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_bootstrap,node_appmodule,node_validation,node_client toneBlue
class node_authcontroller,node_authservice,node_authguard,node_adminguard toneAmber
class node_usercontroller,node_userservice,node_usermodel,node_albomcontroller,node_albomservice,node_albommodel,node_productcontroller,node_productservice,node_productmodel toneMint
class node_postgres,node_jwt,node_mailer,node_sendgrid toneRose
```

## Components

### Application runtime

- [HTTP bootstrap](https://github.com/hovog83/nestjs_api/blob/master/src/main.ts): `src/main.ts`
- [App configuration](https://github.com/hovog83/nestjs_api/blob/master/src/app.module.ts): `src/app.module.ts`
- [Request validation](https://github.com/hovog83/nestjs_api/blob/master/src/helpers/validation.pipe.ts): `src/helpers/validation.pipe.ts`

### Identity and access

- [Auth routes](https://github.com/hovog83/nestjs_api/blob/master/src/auth/auth.controller.ts): `src/auth/auth.controller.ts`
- [Authentication](https://github.com/hovog83/nestjs_api/blob/master/src/auth/auth.service.ts): `src/auth/auth.service.ts`
- [Auth guard](https://github.com/hovog83/nestjs_api/blob/master/src/auth/auth-guard.ts): `src/auth/auth-guard.ts`
- [Admin guard](https://github.com/hovog83/nestjs_api/blob/master/src/helpers/admin-guard.ts): `src/helpers/admin-guard.ts`

### User and catalog

- [User routes](https://github.com/hovog83/nestjs_api/blob/master/src/user/user.controller.ts): `src/user/user.controller.ts`
- [User operations](https://github.com/hovog83/nestjs_api/blob/master/src/user/user.service.ts): `src/user/user.service.ts`
- [User model](https://github.com/hovog83/nestjs_api/blob/master/src/user/user.model.ts): `src/user/user.model.ts`
- [Album routes](https://github.com/hovog83/nestjs_api/blob/master/src/albom/albom.controller.ts): `src/albom/albom.controller.ts`
- [Album operations](https://github.com/hovog83/nestjs_api/blob/master/src/albom/albom.service.ts): `src/albom/albom.service.ts`
- [Album model](https://github.com/hovog83/nestjs_api/blob/master/src/albom/albom.model.ts): `src/albom/albom.model.ts`
- [Product routes](https://github.com/hovog83/nestjs_api/blob/master/src/product/product.controller.ts): `src/product/product.controller.ts`
- [Product operations](https://github.com/hovog83/nestjs_api/blob/master/src/product/product.service.ts): `src/product/product.service.ts`
- [Product model](https://github.com/hovog83/nestjs_api/blob/master/src/product/product.model.ts): `src/product/product.model.ts`

### Persistence and messaging

- **PostgreSQL**
- **JWT service**
- [Verification mail](https://github.com/hovog83/nestjs_api/blob/master/src/helpers/mailer.service.ts): `src/helpers/mailer.service.ts`
- **SendGrid**

### Other components

- **API client**

## Connections

- HTTP bootstrap → App configuration: creates app
- HTTP bootstrap → Request validation: installs pipe
- API client → Auth routes: sends requests
- API client → User routes: sends requests
- API client → Album routes: sends requests
- API client → Product routes: sends requests
- Auth routes → Authentication: calls
- Authentication → User model: queries and creates
- Authentication → JWT service: signs token
- Authentication → Verification mail: sends verification
- Verification mail → SendGrid: sends email
- User routes → Auth guard: guards routes
- User routes → Admin guard: guards admin routes
- Album routes → Auth guard: guards routes
- Album routes → Admin guard: guards admin route
- User routes → User operations: calls
- User operations → User model: queries and updates
- Album routes → Album operations: calls
- Album operations → Album model: queries and updates
- Product routes → Product operations: calls
- Product operations → Product model: queries and creates
- App configuration → PostgreSQL: configures connection
- App configuration → User model: registers model
- App configuration → Album model: registers model
- App configuration → Product model: registers model
- User model → PostgreSQL: maps records
- Album model → PostgreSQL: maps records
- Product model → PostgreSQL: maps records
