This project for beginners made of Nest combined with some powerful libraries such as: Fastify, Sequelize, JWT... written in Typescript and uses PostgreSQL as the database.
This source code to help you get started with Nestjs.
Source code works on Node version 14.17.1
and Yarn version 1.22.10
. If you don't have it, install it first.
The setup and startup steps I describe in the Installation section.
1. Open Git bash.
2. git clone https://github.com/pktai/nestjs-starter.git.
3. cd nestjs-starter.
4. yarn. // install library.
5. setup .env file. Please open the file `env.example` and set the environment variables properly.
Below are the variables in env.
NODE_ENV=development
DB_DIALECT=postgres
DB_USER=postgres
DB_PASSWORD=postgres
DB_NAME=language
DB_HOST=127.0.0.1
DB_PORT=5432
SECRET_TOKEN=jsonwebtoken
EXPIRESIN_ACCESS_TOKEN=5m
EXPIRESIN_REFRESH_TOKEN=15m
RATE_LIMIT_TIME_WINDOW=30000
RATE_LIMIT_MAX=100
DEFAULT_LIMIT_PAGE=10
SERVICE_PORT=3001
SERVICE_NAME='0.0.0.0'
MONGO_DB=mongodb://localhost:27017/?readPreference=primary&appname=MongoDB%20Compass&directConnection=true&ssl=false
# development
$ yarn start
# watch mode
$ yarn start:dev
# production mode
$ yarn start:prod
Before running the test command. you need to run command yarn db:migrate
to init data
# unit tests
$ yarn test
# e2e tests
$ yarn test:e2e
# test coverage
$ yarn test:cov
.
├───.github
│ └───workflows
├───.husky
│ └───_
├───.vscode
├───assets
├───db
│ ├───migrations
│ └───seeders
├───src
│ ├───entities
│ ├───modules
│ │ ├───auth
│ │ │ ├───dto
│ │ │ └───roles
│ │ ├───database
│ │ ├───language
│ │ │ └───dto
│ │ └───user
│ │ └───dto
│ └───shared
│ ├───config
│ │ └───interfaces
│ ├───errors
│ ├───filters
│ ├───interfaces
│ ├───models
│ ├───paginate
│ │ └───interfaces
│ └───utils
└───tests
├───auth
├───database
├───languages
├───shared
└───users
To prove the source code is really good. I have set up and run unit tests almost all the functionality in the source code. below are the results.
----------------------------------|---------|----------|---------|---------|-------------------
File | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s
----------------------------------|---------|----------|---------|---------|-------------------
All files | 97.67 | 93.55 | 100 | 97.4 |
src/entities | 100 | 100 | 100 | 100 |
index.ts | 100 | 100 | 100 | 100 |
languages.ts | 100 | 100 | 100 | 100 |
users.ts | 100 | 100 | 100 | 100 |
src/modules/auth | 100 | 100 | 100 | 100 |
auth.controller.ts | 100 | 100 | 100 | 100 |
auth.module.ts | 100 | 100 | 100 | 100 |
auth.service.ts | 100 | 100 | 100 | 100 |
jwt-auth.guard.ts | 100 | 100 | 100 | 100 |
jwt.strategy.ts | 100 | 100 | 100 | 100 |
src/modules/auth/dto | 100 | 100 | 100 | 100 |
create-session.ts | 100 | 100 | 100 | 100 |
update-session.ts | 100 | 100 | 100 | 100 |
src/modules/auth/roles | 100 | 100 | 100 | 100 |
roles.decorator.ts | 100 | 100 | 100 | 100 |
roles.enum.ts | 100 | 100 | 100 | 100 |
src/modules/database | 100 | 100 | 100 | 100 |
UnitOfWork.ts | 100 | 100 | 100 | 100 |
database.module.ts | 100 | 100 | 100 | 100 |
database.provider.ts | 100 | 100 | 100 | 100 |
repository.database.provider.ts | 100 | 100 | 100 | 100 |
src/modules/language | 100 | 100 | 100 | 100 |
language.controller.ts | 100 | 100 | 100 | 100 |
language.module.ts | 100 | 100 | 100 | 100 |
language.service.ts | 100 | 100 | 100 | 100 |
src/modules/language/dto | 100 | 100 | 100 | 100 |
index.ts | 100 | 100 | 100 | 100 |
query-language.ts | 100 | 100 | 100 | 100 |
remove-language.ts | 100 | 100 | 100 | 100 |
upsert-language.ts | 100 | 100 | 100 | 100 |
src/modules/user | 100 | 100 | 100 | 100 |
user.controller.ts | 100 | 100 | 100 | 100 |
user.module.ts | 100 | 100 | 100 | 100 |
user.service.ts | 100 | 100 | 100 | 100 |
src/modules/user/dto | 100 | 100 | 100 | 100 |
create-user.ts | 100 | 100 | 100 | 100 |
index.ts | 100 | 100 | 100 | 100 |
src/shared | 100 | 100 | 100 | 100 |
index.ts | 100 | 100 | 100 | 100 |
src/shared/config | 100 | 100 | 100 | 100 |
database.ts | 100 | 100 | 100 | 100 |
error-message.ts | 100 | 100 | 100 | 100 |
src/shared/errors | 100 | 100 | 100 | 100 |
index.ts | 100 | 100 | 100 | 100 |
message-code-error.ts | 100 | 100 | 100 | 100 |
src/shared/filters | 76.74 | 60 | 100 | 75.61 |
dispatch-error.ts | 76.74 | 60 | 100 | 75.61 | 43-52,86,105
src/shared/paginate | 100 | 100 | 100 | 100 |
index.ts | 100 | 100 | 100 | 100 |
paginate.ts | 100 | 100 | 100 | 100 |
pagination.ts | 100 | 100 | 100 | 100 |
src/shared/utils | 100 | 100 | 100 | 100 |
crypto.ts | 100 | 100 | 100 | 100 |
reponse.ts | 100 | 100 | 100 | 100 |
tests/auth | 100 | 100 | 100 | 100 |
data-example.ts | 100 | 100 | 100 | 100 |
tests/languages | 100 | 100 | 100 | 100 |
data-example.ts | 100 | 100 | 100 | 100 |
tests/users | 100 | 100 | 100 | 100 |
data-example.ts | 100 | 100 | 100 | 100 |
----------------------------------|---------|----------|---------|---------|-------------------
Test Suites: 6 passed, 6 total
Tests: 24 passed, 24 total
Snapshots: 0 total
Time: 8.371 s
Ran all test suites.
Done in 9.07s.
If there is a problem in the source code, please open the Issues tab or click here. I'm really grateful to the contributors. It motivates me to go further.
- Author - Tai Pham