Coder Social home page Coder Social logo

vivianeflowt / nestjs-monorepo-1 Goto Github PK

View Code? Open in Web Editor NEW

This project forked from mikemajesty/nestjs-monorepo

0.0 0.0 0.0 607 KB

Monorepo boilerplate(template) with Nestjs, authentication, docker, redis, secrets service, logs service, libs structure, anti corruption layer pattern, adapter pattern, dependency inversion pattern, mongodb, redis, swagger and tests.

Shell 2.80% JavaScript 5.02% TypeScript 91.18% Dockerfile 1.00%

nestjs-monorepo-1's Introduction

Nestjs Monorepo Boilerplate

Check

Statements Branches Functions Lines
Statements Branches Functions Lines
Monorepo with nestjs
  • Docker

  • Secrets Service

  • Logs Service

    • Pinojs
    • Elastic
  • Observability

    • Jeager
    • Opentracing
  • Authentication

  • Error Handler

  • Libs Structure

  • Dependency Inversion Pattern

  • Anti Corruption Layer Pattern

  • Interface Adapter Pattern

  • Generic Repository Pattern

  • Swaggger Documentation

  • Redis

  • Mongodb

    • mongoose
    • multiples databases
  • Tests

    • unit
    • e2e
    • 90% coverage

Prerequisite

  • Node: 14 => <= 16
  • Docker
  • npm install -g commitizen
  • npm install -g changelog

Instalation

  • install monorepo dependencies
    $ yarn monorepo:install
  • install project dependencies
    $ yarn workspace <workspaceName> install
  • install lib on project
    $ yarn workspace <workspaceName> add <libName>

Running local mongodb/redis/kibana/jeager

$ 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

Running the app

  • local

    $ yarn start:auth-api:dev
    $ yarn start:cats-api:dev
  • dev/hml/prd environment

    $ docker-compose up --build

Create Access User

  • http://0.0.0.0:8082/db/monorepo_auth/users
  • Click [New Document]
    {
       "_id": ObjectID(),
       "login": "<user>",
       "pass": "<pass>"
    }
    
  • now use this curl to get your access token
    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>" }'
    
  • use this token to access all monorepo internal APIs

workspace list
$ yarn workspaces info
  • @app/cats.api
  • @app/auth.api
  • @tools/eslint.config
  • @libs/utils
  • @libs/modules
  • @libs/core

Add new features

$ npm i -g @mikemajesty/monorepo-nestjs-cli
  • # type and choose your template
    $ monorepo-nestjs-cli

Tests

  • unit

    # Run monorepo tests
    $ yarn test
    # Run project tests
    $ yarn test main.api
    $ yarn test auth.api
    $ yarn test libs
  • e2e

    $ yarn test:e2e
    
    • coverage
    $ yarn test:coverage
    

Lint

  • Run monorepo lint

    $ yarn lint
  • Run project lint

    $ yarn workspace <workspaceName> lint
    

Build

  • Run project build
    $ 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

Architecture

monorepo-diagram

  • ├── 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!

mikemajesty

License

It is available under the MIT license. License

nestjs-monorepo-1's People

Contributors

mikemajesty avatar

Stargazers

Roman avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.