{"id":19972606,"url":"https://github.com/jpb06/nest-prisma-monorepo","last_synced_at":"2025-10-22T03:07:17.406Z","repository":{"id":41890562,"uuid":"429206459","full_name":"jpb06/nest-prisma-monorepo","owner":"jpb06","description":"Multiple databases POC built with nestjs \u0026 prisma","archived":false,"fork":false,"pushed_at":"2024-12-01T15:18:55.000Z","size":524,"stargazers_count":38,"open_issues_count":0,"forks_count":6,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-04-08T01:01:43.874Z","etag":null,"topics":["monorepo","multiple-databases","nestjs","prisma","proof-of-concept","rxjs"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/jpb06.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2021-11-17T21:29:47.000Z","updated_at":"2025-03-02T17:38:24.000Z","dependencies_parsed_at":"2023-12-27T13:27:10.545Z","dependency_job_id":"da9ceac0-3b72-44d3-a0ea-1fe4a1ecdd10","html_url":"https://github.com/jpb06/nest-prisma-monorepo","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jpb06%2Fnest-prisma-monorepo","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jpb06%2Fnest-prisma-monorepo/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jpb06%2Fnest-prisma-monorepo/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jpb06%2Fnest-prisma-monorepo/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/jpb06","download_url":"https://codeload.github.com/jpb06/nest-prisma-monorepo/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":252276955,"owners_count":21722447,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["monorepo","multiple-databases","nestjs","prisma","proof-of-concept","rxjs"],"created_at":"2024-11-13T03:08:40.910Z","updated_at":"2025-10-22T03:07:17.400Z","avatar_url":"https://github.com/jpb06.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# nest-prisma-monorepo\n\n[![Open in Visual Studio Code](https://img.shields.io/static/v1?logo=visualstudiocode\u0026label=\u0026message=Open%20in%20Visual%20Studio%20Code\u0026labelColor=2c2c32\u0026color=007acc\u0026logoColor=007acc)](https://github.dev/jpb06/nest-prisma-monorepo)\n![Github workflow](https://img.shields.io/github/actions/workflow/status/jpb06/nest-prisma-monorepo/tests-scan.yml?branch=main\u0026logo=github-actions\u0026label=last%20workflow)\n[![Quality Gate Status](https://sonarcloud.io/api/project_badges/measure?project=jpb06_nest-prisma-monorepo\u0026metric=alert_status)](https://sonarcloud.io/summary/new_code?id=jpb06_nest-prisma-monorepo)\n[![Maintainability Rating](https://sonarcloud.io/api/project_badges/measure?project=jpb06_nest-prisma-monorepo\u0026metric=sqale_rating)](https://sonarcloud.io/summary/new_code?id=jpb06_nest-prisma-monorepo)\n[![Security Rating](https://sonarcloud.io/api/project_badges/measure?project=jpb06_nest-prisma-monorepo\u0026metric=security_rating)](https://sonarcloud.io/summary/new_code?id=jpb06_nest-prisma-monorepo)\n[![Reliability Rating](https://sonarcloud.io/api/project_badges/measure?project=jpb06_nest-prisma-monorepo\u0026metric=reliability_rating)](https://sonarcloud.io/summary/new_code?id=jpb06_nest-prisma-monorepo)\n[![Coverage](https://sonarcloud.io/api/project_badges/measure?project=jpb06_nest-prisma-monorepo\u0026metric=coverage)](https://sonarcloud.io/summary/new_code?id=jpb06_nest-prisma-monorepo)\n[![Technical Debt](https://sonarcloud.io/api/project_badges/measure?project=jpb06_nest-prisma-monorepo\u0026metric=sqale_index)](https://sonarcloud.io/summary/new_code?id=jpb06_nest-prisma-monorepo)\n[![Code Smells](https://sonarcloud.io/api/project_badges/measure?project=jpb06_nest-prisma-monorepo\u0026metric=code_smells)](https://sonarcloud.io/summary/new_code?id=jpb06_nest-prisma-monorepo)\n[![Bugs](https://sonarcloud.io/api/project_badges/measure?project=jpb06_nest-prisma-monorepo\u0026metric=bugs)](https://sonarcloud.io/summary/new_code?id=jpb06_nest-prisma-monorepo)\n[![Vulnerabilities](https://sonarcloud.io/api/project_badges/measure?project=jpb06_nest-prisma-monorepo\u0026metric=vulnerabilities)](https://sonarcloud.io/summary/new_code?id=jpb06_nest-prisma-monorepo)\n[![Duplicated Lines (%)](https://sonarcloud.io/api/project_badges/measure?project=jpb06_nest-prisma-monorepo\u0026metric=duplicated_lines_density)](https://sonarcloud.io/summary/new_code?id=jpb06_nest-prisma-monorepo)\n![Last commit](https://img.shields.io/github/last-commit/jpb06/nest-prisma-monorepo?logo=git)\n\nHere is the POC of a monorepo built with nestjs and prisma used to expose several apps, relying on several databases.\n\n\u003c!-- readme-package-icons start --\u003e\n\n\u003cp align=\"left\"\u003e\u003ca href=\"https://docs.github.com/en/actions\" target=\"_blank\"\u003e\u003cimg height=\"50\" width=\"50\" src=\"https://raw.githubusercontent.com/jpb06/jpb06/master/icons/GithubActions-Dark.svg\" /\u003e\u003c/a\u003e\u0026nbsp;\u003ca href=\"https://www.typescriptlang.org/docs/\" target=\"_blank\"\u003e\u003cimg height=\"50\" width=\"50\" src=\"https://raw.githubusercontent.com/jpb06/jpb06/master/icons/TypeScript.svg\" /\u003e\u003c/a\u003e\u0026nbsp;\u003ca href=\"https://nodejs.org/en/docs/\" target=\"_blank\"\u003e\u003cimg height=\"50\" width=\"50\" src=\"https://raw.githubusercontent.com/jpb06/jpb06/master/icons/NodeJS-Dark.svg\" /\u003e\u003c/a\u003e\u0026nbsp;\u003ca href=\"https://bun.sh/docs\" target=\"_blank\"\u003e\u003cimg height=\"50\" width=\"50\" src=\"https://raw.githubusercontent.com/jpb06/jpb06/master/icons/Bun-Dark.svg\" /\u003e\u003c/a\u003e\u0026nbsp;\u003ca href=\"https://docs.docker.com\" target=\"_blank\"\u003e\u003cimg height=\"50\" width=\"50\" src=\"https://raw.githubusercontent.com/jpb06/jpb06/master/icons/Docker.svg\" /\u003e\u003c/a\u003e\u0026nbsp;\u003ca href=\"https://www.postgresql.org/docs/\" target=\"_blank\"\u003e\u003cimg height=\"50\" width=\"50\" src=\"https://raw.githubusercontent.com/jpb06/jpb06/master/icons/PostgreSQL-Dark.svg\" /\u003e\u003c/a\u003e\u0026nbsp;\u003ca href=\"https://biomejs.dev/guides/getting-started/\" target=\"_blank\"\u003e\u003cimg height=\"50\" width=\"50\" src=\"https://raw.githubusercontent.com/jpb06/jpb06/master/icons/Biome-Dark.svg\" /\u003e\u003c/a\u003e\u0026nbsp;\u003ca href=\"https://github.com/motdotla/dotenv#readme\" target=\"_blank\"\u003e\u003cimg height=\"50\" width=\"50\" src=\"https://raw.githubusercontent.com/jpb06/jpb06/master/icons/Dotenv-Dark.svg\" /\u003e\u003c/a\u003e\u0026nbsp;\u003ca href=\"https://expressjs.com/en/starter/installing.html\" target=\"_blank\"\u003e\u003cimg height=\"50\" width=\"50\" src=\"https://raw.githubusercontent.com/jpb06/jpb06/master/icons/ExpressJS-Dark.svg\" /\u003e\u003c/a\u003e\u0026nbsp;\u003ca href=\"https://jestjs.io/docs/getting-started\" target=\"_blank\"\u003e\u003cimg height=\"50\" width=\"50\" src=\"https://raw.githubusercontent.com/jpb06/jpb06/master/icons/Jest.svg\" /\u003e\u003c/a\u003e\u0026nbsp;\u003ca href=\"https://docs.nestjs.com\" target=\"_blank\"\u003e\u003cimg height=\"50\" width=\"50\" src=\"https://raw.githubusercontent.com/jpb06/jpb06/master/icons/NestJS-Dark.svg\" /\u003e\u003c/a\u003e\u0026nbsp;\u003ca href=\"https://www.prisma.io/docs/\" target=\"_blank\"\u003e\u003cimg height=\"50\" width=\"50\" src=\"https://raw.githubusercontent.com/jpb06/jpb06/master/icons/Prisma.svg\" /\u003e\u003c/a\u003e\u0026nbsp;\u003ca href=\"https://rxjs.dev/guide/overview\" target=\"_blank\"\u003e\u003cimg height=\"50\" width=\"50\" src=\"https://raw.githubusercontent.com/jpb06/jpb06/master/icons/Rxjs-Dark.svg\" /\u003e\u003c/a\u003e\u0026nbsp;\u003ca href=\"https://swagger.io\" target=\"_blank\"\u003e\u003cimg height=\"50\" width=\"50\" src=\"https://raw.githubusercontent.com/jpb06/jpb06/master/icons/Swagger-Dark.svg\" /\u003e\u003c/a\u003e\u0026nbsp;\u003ca href=\"https://swc.rs/docs/getting-started\" target=\"_blank\"\u003e\u003cimg height=\"50\" width=\"50\" src=\"https://raw.githubusercontent.com/jpb06/jpb06/master/icons/Swc-Dark.svg\" /\u003e\u003c/a\u003e\u0026nbsp;\u003ca href=\"https://github.com/typestack\" target=\"_blank\"\u003e\u003cimg height=\"50\" width=\"50\" src=\"https://raw.githubusercontent.com/jpb06/jpb06/master/icons/TypeStack-Dark.svg\" /\u003e\u003c/a\u003e\u0026nbsp;\u003ca href=\"https://webpack.js.org/concepts/\" target=\"_blank\"\u003e\u003cimg height=\"50\" width=\"50\" src=\"https://raw.githubusercontent.com/jpb06/jpb06/master/icons/Webpack-Dark.svg\" /\u003e\u003c/a\u003e\u003c/p\u003e\n\n\u003c!-- readme-package-icons end --\u003e\n\n## ⚡ Requirements\n\nYou will need the following to use this POC :\n\n| Item                                                                                                           | Description                                             | Documentation                        |\n| -------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------- | ------------------------------------ |\n| \u003cimg height=\"20\" src=\"https://cdn.jsdelivr.net/gh/devicons/devicon/icons/nodejs/nodejs-original.svg\" /\u003e nodejs | Duh!                                                    | \u003chttps://nodejs.org/en/\u003e             |\n| \u003cimg height=\"20\" src=\"https://cdn.jsdelivr.net/gh/devicons/devicon/icons/docker/docker-original.svg\" /\u003e Docker | we will use docker to launch a postgres instance        | \u003chttps://www.docker.com/get-started\u003e |\n| \u003cimg height=\"20\" src=\"https://cdn.jsdelivr.net/gh/devicons/devicon/icons/bun/bun-original.svg\" /\u003e bun          | We will use bun as the package manager for this project | \u003chttps://bun.sh/docs\u003e                |\n\n## ⚡ How to start\n\n### 🔶 Firstof, let's start our database using docker\n\nYou may need to give execution permission to the entry point script file, that is responsible for creating our three databases:\n\n```bash\nchmod +x docker/pg-init-scripts/create-multiple-db.sh\n```\n\nLet's then use docker compose :\n\n```bash\nbun docker\n```\n\n### 🔶 Then we can migrate our schemas and seed the databases\n\n```bash\nbun dev:db\n```\n\n### 🔶 Launching our backends in dev mode\n\n```bash\n# Hiking app (port 5001)\nbun dev hiking-app\n# Projects app (port 5002)\nbun dev projects-app\n```\n\n### 🔶 Accessing apps swaggers\n\nNow we can access the swaggers of our apps using the following urls:\n\n- [Hiking app](http://localhost:5001/api)\n- [Projects app](http://localhost:5002/api)\n\n### 🔶 Building our apps for production\n\n```bash\nbun run build\n```\n\n## ⚡ Project structure\n\n### 🎉 Apps\n\n| Database        | Description                                                                                                                                                  |\n| --------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------ |\n| 🚀 Hiking app   | This kiking app allows users to check and join hiking groups planning to do a walk on some trail. This app owns a database but also uses the Users database. |\n| 🚀 Projects app | This projects app allows users to check contributions made to repositories. This app owns a database and also uses the Users database.                       |\n\n### 🧩 Libs\n\n| Database      | Description                                                                   |\n| ------------- | ----------------------------------------------------------------------------- |\n| 🧩 Boostraper | The code necessary to create an app is defined there and shared between apps. |\n| 🧩 Databases  | The base prisma services are defined on this shared module.                   |\n| 🧩 Decorators | Decorators used in all our apps.                                              |\n| 🧩 Filters    | Filters used in all our apps.                                                 |\n| 🧩 Pipes      | Pipes used in all our apps.                                                   |\n| 🧩 Rxjs       | Rxjs helpers.                                                                 |\n| 🧩 Tests      | Test related code.                                                            |\n\n## ⚡ Data model\n\nWe have three databases:\n\n| Database    | Description                                                                                                             |\n| ----------- | ----------------------------------------------------------------------------------------------------------------------- |\n| 👨 Users    | Contains our users (duh). This database will serve as the single base of truth for everything user related in our apps. |\n| 🏔️ Hiking   | Database dedicated to the hiking backend service.                                                                       |\n| 🧳 Projects | Database dedicated to the projects backend service.                                                                     |\n\nLet's take a look at the schema:\n\n![Diagram](./documentation/db-diagram.png)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjpb06%2Fnest-prisma-monorepo","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjpb06%2Fnest-prisma-monorepo","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjpb06%2Fnest-prisma-monorepo/lists"}