Monorepo boilerplate using Nestjs, authentication, docker, redis, secrets service, logs service, libs structure, anti corruption layer pattern, adapter pattern, dependency inversion pattern, mongodb, redis, swagger and tests.
Check
Statements | Branches | Functions | Lines |
---|---|---|---|
Docker
Secrets Service
Logs Service
Observability
Authentication
Error Handler
Libs Structure
Dependency Inversion Pattern
Anti Corruption Layer Pattern
Interface Adapter Pattern
Generic Repository Pattern
Swaggger Documentation
Redis
Mongodb
Tests
$ yarn monorepo:install
$ yarn workspace <workspaceName> install
$ yarn workspace <workspaceName> add <libName>
$ yarn infra:local
# http://0.0.0.0:8082/ to access mongo
# http://0.0.0.0:8081/ to access redis
# http://0.0.0.0:5601/app/home to access kibana
# http://0.0.0.0:16686/search to access jeager
local
$ yarn start:auth-api:dev
$ yarn start:cats-api:dev
dev/hml/prd environment
$ docker-compose up --build
{
"_id": ObjectID(),
"login": "<user>",
"pass": "<pass>"
}
curl -X 'POST' 'http://0.0.0.0:4000/api/login' -H 'accept: application/json' -H 'Content-Type: application/json' -d '{ "login": "<user>", "pass": "<pass>" }'
$ yarn workspaces info
$ npm i -g @mikemajesty/monorepo-nestjs-cli
# type and choose your template
$ monorepo-nestjs-cli
unit
# Run monorepo tests
$ yarn test
# Run project tests
$ yarn test main.api
$ yarn test auth.api
$ yarn test libs
e2e
$ yarn test:e2e
$ yarn test:coverage
Run monorepo lint
$ yarn lint
Run project lint
$ yarn workspace <workspaceName> lint
$ yarn build <workspaceName>
-- App Skeleton
.
├── apps
│ ├── auth-api
│ │ ├── Dockerfile
│ │ ├── jest.config.js
│ │ ├── package.json
│ │ ├── src
│ │ │ ├── main.ts
│ │ │ └── modules
│ │ │ ├── health
│ │ │ │ ├── adapter.ts
│ │ │ │ ├── controller.ts
│ │ │ │ ├── module.ts
│ │ │ │ ├── service.ts
│ │ │ │ ├── swagger.ts
│ │ │ │ └── __tests__
│ │ │ │ ├── controller.e2e.spec.ts
│ │ │ │ ├── module.spec.ts
│ │ │ │ └── service.spec.ts
│ │ │ ├── login
│ │ │ │ ├── adapter.ts
│ │ │ │ ├── controller.ts
│ │ │ │ ├── module.ts
│ │ │ │ ├── service.ts
│ │ │ │ ├── swagger.ts
│ │ │ │ └── __tests__
│ │ │ │ ├── controller.e2e.spec.ts
│ │ │ │ └── service.spec.ts
│ │ │ ├── module.ts
│ │ │ ├── __tests__
│ │ │ │ └── module.spec.ts
│ │ │ └── user
│ │ │ ├── adapter.ts
│ │ │ ├── entity.ts
│ │ │ ├── module.ts
│ │ │ ├── repository.ts
│ │ │ ├── schema.ts
│ │ │ └── __tests__
│ │ │ └── repository.spec.ts
│ │ ├── tests
│ │ │ └── initialization.js
│ │ ├── tsconfig.build.json
│ │ ├── tsconfig.json
│ │ └── yarn.lock
│ └── cats-api
│ ├── Dockerfile
│ ├── jest.config.js
│ ├── node_modules
│ ├── package.json
│ ├── src
│ │ ├── main.ts
│ │ └── modules
│ │ ├── cats
│ │ │ ├── adapter.ts
│ │ │ ├── controller.ts
│ │ │ ├── entity.ts
│ │ │ ├── module.ts
│ │ │ ├── repository.ts
│ │ │ ├── schema.ts
│ │ │ ├── swagger.ts
│ │ │ └── __tests__
│ │ │ ├── controller.e2e.spec.ts
│ │ │ └── repository.spec.ts
│ │ ├── health
│ │ │ ├── adapter.ts
│ │ │ ├── controller.ts
│ │ │ ├── module.ts
│ │ │ ├── service.ts
│ │ │ ├── swagger.ts
│ │ │ └── __tests__
│ │ │ ├── controller.e2e.spec.ts
│ │ │ ├── module.spec.ts
│ │ │ └── service.spec.ts
│ │ ├── module.ts
│ │ └── __tests__
│ │ └── module.spec.ts
│ ├── tests
│ │ └── initialization.js
│ ├── tsconfig.build.json
│ └── tsconfig.json
├── CHANGELOG.md
├── commitlint.config.ts
├── CONTRIBUTING.md
├── deploy
│ └── production-version.sh
├── docker-compose-local.yml
├── docker-compose.yml
├── jest.config.e2e.ts
├── jest.config.ts
├── libs
│ ├── core
│ │ ├── index.ts
│ │ ├── jest.config.js
│ │ ├── package.json
│ │ ├── tests
│ │ │ └── initialization.js
│ │ └── tsconfig.json
│ ├── modules
│ │ ├── auth
│ │ │ └── token
│ │ │ ├── adapter.ts
│ │ │ ├── module.ts
│ │ │ ├── service.ts
│ │ │ ├── __tests__
│ │ │ │ └── service.spec.ts
│ │ │ └── types.ts
│ │ ├── common
│ │ │ ├── http
│ │ │ │ ├── adapter.ts
│ │ │ │ ├── module.ts
│ │ │ │ ├── service.ts
│ │ │ │ └── __tests__
│ │ │ │ ├── module.spec.ts
│ │ │ │ └── service.spec.ts
│ │ │ ├── module.ts
│ │ │ └── __tests__
│ │ │ └── module.spec.ts
│ │ ├── database
│ │ │ ├── adapter.ts
│ │ │ ├── connection
│ │ │ │ ├── auth.ts
│ │ │ │ └── cats.ts
│ │ │ ├── entity.ts
│ │ │ ├── enum.ts
│ │ │ ├── repository.ts
│ │ │ ├── service.ts
│ │ │ └── __tests__
│ │ │ ├── repository.spec.ts
│ │ │ └── service.spec.ts
│ │ ├── global
│ │ │ ├── logger
│ │ │ │ ├── adapter.ts
│ │ │ │ ├── module.ts
│ │ │ │ ├── service.ts
│ │ │ │ ├── __tests__
│ │ │ │ │ ├── module.spec.ts
│ │ │ │ │ └── service.spec.ts
│ │ │ │ └── type.ts
│ │ │ ├── module.ts
│ │ │ ├── secrets
│ │ │ │ ├── adapter.ts
│ │ │ │ ├── enum.ts
│ │ │ │ ├── module.ts
│ │ │ │ ├── service.ts
│ │ │ │ └── __tests__
│ │ │ │ ├── module.spec.ts
│ │ │ │ └── service.spec.ts
│ │ │ └── __tests__
│ │ │ └── module.spec.ts
│ │ ├── index.ts
│ │ ├── jest.config.js
│ │ ├── package.json
│ │ ├── redis
│ │ │ ├── adapter.ts
│ │ │ ├── module.ts
│ │ │ ├── service.ts
│ │ │ ├── __tests__
│ │ │ │ └── service.spec.ts
│ │ │ └── types.ts
│ │ ├── __tests__
│ │ │ └── module.spec.ts
│ │ ├── tests
│ │ │ └── initialization.js
│ │ └── tsconfig.json
│ └── utils
│ ├── documentation
│ │ ├── constants.ts
│ │ └── swagger.ts
│ ├── exception.ts
│ ├── filters
│ │ ├── http-exception.filter.ts
│ │ └── __tests__
│ │ └── http-exception.filter.spec.ts
│ ├── index.ts
│ ├── interceptors
│ │ ├── exception
│ │ │ ├── http-exception.interceptor.ts
│ │ │ └── __tests__
│ │ │ └── http-exception.interceptor.spec.ts
│ │ └── logger
│ │ ├── http-logger.interceptor.ts
│ │ ├── http-tracing.interceptor.ts
│ │ └── __tests__
│ │ └── http-logger.interceptor.spec.ts
│ ├── jest.config.js
│ ├── middleware
│ │ └── auth
│ │ ├── is-logged.middleware.ts
│ │ └── __tests__
│ │ └── is-logged.middleware.spec.ts
│ ├── package.json
│ ├── request.ts
│ ├── static
│ │ └── htttp-status.json
│ ├── __tests__
│ │ └── exception.spec.ts
│ ├── tests
│ │ ├── initialization.js
│ │ ├── mock-utils.ts
│ │ └── __tests__
│ │ └── mock-utils.spec.ts
│ └── tsconfig.json
├── nest-cli.json
├── package.json
├── README.md
├── tests
│ └── common-initialization.js
├── tools
│ └── eslint
│ └── package.json
├── tsconfig.build.json
├── tsconfig.json
└── update-version.sh
├── tools
: Project tools like: eslint, prettier and etc.
├── tests
: Monorepo tests initializer like: env, mocks and configs.
├── apps
: Monorepo Applications.
├── apps ├── auth-api
: Authentication api, use to getting token to navigate between other projects.
├── apps ├── cats-api
: Use this API like an example to create other APIs.
├── libs
: Application shared libs.
├── libs ├── core
: Core business rules, don't use nestjs dependecies here, only class and rules that will be shared with other projects
├── libs ├── modules
: Application modules, use only nestjs modules here, you can add modules like: http, databse etc.
├── libs ├── utils
: Application utils, utilities that will shared with your monorepo.
├── libs ├── modules ├── global ├── secrets
: Monorepo secrets.
The following is a list of all the people that have contributed Nestjs monorepo boilerplate. Thanks for your contributions!
It is available under the MIT license. License