From 918549dae507a4235409e60d970156094b91a5ff Mon Sep 17 00:00:00 2001 From: Humberto Date: Mon, 16 Mar 2026 11:21:19 -0300 Subject: [PATCH 1/3] =?UTF-8?q?feat(database):=20Adicionar=20conex=C3=A3o?= =?UTF-8?q?=20com=20MongoDB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Configura conexão inicial com MongoDB usando Mongoose na camada de infraestrutura, incluindo tratamento básico de falhas. --- backend/package-lock.json | 266 +++++++++++++++++- backend/package.json | 3 + backend/src/app.module.ts | 9 +- .../infra/database.connection.service.ts | 25 ++ backend/src/modules/infra/database.module.ts | 11 + backend/tsconfig.json | 2 +- 6 files changed, 312 insertions(+), 4 deletions(-) create mode 100644 backend/src/modules/infra/database.connection.service.ts create mode 100644 backend/src/modules/infra/database.module.ts diff --git a/backend/package-lock.json b/backend/package-lock.json index 63d9dcd..edf8cfc 100644 --- a/backend/package-lock.json +++ b/backend/package-lock.json @@ -10,8 +10,11 @@ "license": "UNLICENSED", "dependencies": { "@nestjs/common": "^11.0.1", + "@nestjs/config": "^4.0.3", "@nestjs/core": "^11.0.1", + "@nestjs/mongoose": "^11.0.4", "@nestjs/platform-express": "^11.0.1", + "mongoose": "^9.3.0", "reflect-metadata": "^0.2.2", "rxjs": "^7.8.1" }, @@ -2041,6 +2044,15 @@ "node": ">=8" } }, + "node_modules/@mongodb-js/saslprep": { + "version": "1.4.6", + "resolved": "https://registry.npmjs.org/@mongodb-js/saslprep/-/saslprep-1.4.6.tgz", + "integrity": "sha512-y+x3H1xBZd38n10NZF/rEBlvDOOMQ6LKUTHqr8R9VkJ+mmQOYtJFxIlkkK8fZrtOiL6VixbOBWMbZGBdal3Z1g==", + "license": "MIT", + "dependencies": { + "sparse-bitfield": "^3.0.3" + } + }, "node_modules/@napi-rs/wasm-runtime": { "version": "0.2.12", "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-0.2.12.tgz", @@ -2301,6 +2313,21 @@ } } }, + "node_modules/@nestjs/config": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@nestjs/config/-/config-4.0.3.tgz", + "integrity": "sha512-FQ3M3Ohqfl+nHAn5tp7++wUQw0f2nAk+SFKe8EpNRnIifPqvfJP6JQxPKtFLMOHbyer4X646prFG4zSRYEssQQ==", + "license": "MIT", + "dependencies": { + "dotenv": "17.2.3", + "dotenv-expand": "12.0.3", + "lodash": "4.17.23" + }, + "peerDependencies": { + "@nestjs/common": "^10.0.0 || ^11.0.0", + "rxjs": "^7.1.0" + } + }, "node_modules/@nestjs/core": { "version": "11.1.16", "resolved": "https://registry.npmjs.org/@nestjs/core/-/core-11.1.16.tgz", @@ -2342,6 +2369,18 @@ } } }, + "node_modules/@nestjs/mongoose": { + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/@nestjs/mongoose/-/mongoose-11.0.4.tgz", + "integrity": "sha512-LUOlUeSOfbjdIu22QwOmczv2CzJQr9LUBo2mOfbXrGCu2svpr5Hiu71zBFrb/9UC+H8BjGMKbBOq1nEbMF6ZJA==", + "license": "MIT", + "peerDependencies": { + "@nestjs/common": "^10.0.0 || ^11.0.0", + "@nestjs/core": "^10.0.0 || ^11.0.0", + "mongoose": "^7.0.0 || ^8.0.0 || ^9.0.0", + "rxjs": "^7.0.0" + } + }, "node_modules/@nestjs/platform-express": { "version": "11.1.16", "resolved": "https://registry.npmjs.org/@nestjs/platform-express/-/platform-express-11.1.16.tgz", @@ -2903,6 +2942,21 @@ "@types/superagent": "^8.1.0" } }, + "node_modules/@types/webidl-conversions": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/@types/webidl-conversions/-/webidl-conversions-7.0.3.tgz", + "integrity": "sha512-CiJJvcRtIgzadHCYXw7dqEnMNRjhGZlYK05Mj9OyktqV8uVT8fD2BFOB7S1uwBE3Kj2Z+4UyPmFw/Ixgw/LAlA==", + "license": "MIT" + }, + "node_modules/@types/whatwg-url": { + "version": "13.0.0", + "resolved": "https://registry.npmjs.org/@types/whatwg-url/-/whatwg-url-13.0.0.tgz", + "integrity": "sha512-N8WXpbE6Wgri7KUSvrmQcqrMllKZ9uxkYWMt+mCSGwNc0Hsw9VQTW7ApqI4XNrx6/SaM2QQJCzMPDEXE058s+Q==", + "license": "MIT", + "dependencies": { + "@types/webidl-conversions": "*" + } + }, "node_modules/@types/yargs": { "version": "17.0.35", "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.35.tgz", @@ -4171,6 +4225,15 @@ "node-int64": "^0.4.0" } }, + "node_modules/bson": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/bson/-/bson-7.2.0.tgz", + "integrity": "sha512-YCEo7KjMlbNlyHhz7zAZNDpIpQbd+wOEHJYezv0nMYTn4x31eIUM2yomNNubclAt63dObUzKHWsBLJ9QcZNSnQ==", + "license": "Apache-2.0", + "engines": { + "node": ">=20.19.0" + } + }, "node_modules/buffer": { "version": "5.7.1", "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", @@ -4826,6 +4889,45 @@ "node": ">=0.3.1" } }, + "node_modules/dotenv": { + "version": "17.2.3", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-17.2.3.tgz", + "integrity": "sha512-JVUnt+DUIzu87TABbhPmNfVdBDt18BLOWjMUFJMSi/Qqg7NTYtabbvSNJGOJ7afbRuv9D/lngizHtP7QyLQ+9w==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://dotenvx.com" + } + }, + "node_modules/dotenv-expand": { + "version": "12.0.3", + "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-12.0.3.tgz", + "integrity": "sha512-uc47g4b+4k/M/SeaW1y4OApx+mtLWl92l5LMPP0GNXctZqELk+YGgOPIIC5elYmUH4OuoK3JLhuRUYegeySiFA==", + "license": "BSD-2-Clause", + "dependencies": { + "dotenv": "^16.4.5" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://dotenvx.com" + } + }, + "node_modules/dotenv-expand/node_modules/dotenv": { + "version": "16.6.1", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.6.1.tgz", + "integrity": "sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://dotenvx.com" + } + }, "node_modules/dunder-proto": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", @@ -7197,6 +7299,15 @@ "graceful-fs": "^4.1.6" } }, + "node_modules/kareem": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/kareem/-/kareem-3.2.0.tgz", + "integrity": "sha512-VS8MWZz/cT+SqBCpVfNN4zoVz5VskR3N4+sTmUXme55e9avQHntpwpNq0yjnosISXqwJ3AQVjlbI4Dyzv//JtA==", + "license": "Apache-2.0", + "engines": { + "node": ">=18.0.0" + } + }, "node_modules/keyv": { "version": "4.5.4", "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", @@ -7291,7 +7402,6 @@ "version": "4.17.23", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.23.tgz", "integrity": "sha512-LgVTMpQtIopCi79SJeDiP0TfWi5CNEc/L/aRdTh3yIvmZXTnheWpKjSZhnvMl8iXbC1tFg9gdHHDMLoV7CnG+w==", - "dev": true, "license": "MIT" }, "node_modules/lodash.memoize": { @@ -7409,6 +7519,12 @@ "node": ">= 4.0.0" } }, + "node_modules/memory-pager": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/memory-pager/-/memory-pager-1.5.0.tgz", + "integrity": "sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg==", + "license": "MIT" + }, "node_modules/merge-descriptors": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-2.0.0.tgz", @@ -7546,6 +7662,104 @@ "node": ">=16 || 14 >=14.17" } }, + "node_modules/mongodb": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-7.1.0.tgz", + "integrity": "sha512-kMfnKunbolQYwCIyrkxNJFB4Ypy91pYqua5NargS/f8ODNSJxT03ZU3n1JqL4mCzbSih8tvmMEMLpKTT7x5gCg==", + "license": "Apache-2.0", + "dependencies": { + "@mongodb-js/saslprep": "^1.3.0", + "bson": "^7.1.1", + "mongodb-connection-string-url": "^7.0.0" + }, + "engines": { + "node": ">=20.19.0" + }, + "peerDependencies": { + "@aws-sdk/credential-providers": "^3.806.0", + "@mongodb-js/zstd": "^7.0.0", + "gcp-metadata": "^7.0.1", + "kerberos": "^7.0.0", + "mongodb-client-encryption": ">=7.0.0 <7.1.0", + "snappy": "^7.3.2", + "socks": "^2.8.6" + }, + "peerDependenciesMeta": { + "@aws-sdk/credential-providers": { + "optional": true + }, + "@mongodb-js/zstd": { + "optional": true + }, + "gcp-metadata": { + "optional": true + }, + "kerberos": { + "optional": true + }, + "mongodb-client-encryption": { + "optional": true + }, + "snappy": { + "optional": true + }, + "socks": { + "optional": true + } + } + }, + "node_modules/mongodb-connection-string-url": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/mongodb-connection-string-url/-/mongodb-connection-string-url-7.0.1.tgz", + "integrity": "sha512-h0AZ9A7IDVwwHyMxmdMXKy+9oNlF0zFoahHiX3vQ8e3KFcSP3VmsmfvtRSuLPxmyv2vjIDxqty8smTgie/SNRQ==", + "license": "Apache-2.0", + "dependencies": { + "@types/whatwg-url": "^13.0.0", + "whatwg-url": "^14.1.0" + }, + "engines": { + "node": ">=20.19.0" + } + }, + "node_modules/mongoose": { + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-9.3.0.tgz", + "integrity": "sha512-Tv2p3DLBkftoGFp+VM/19k0t0RYPAAYjGIbCVGlV6Tf5Dnq6TICfYyeKeYvwQ06nK9sRDvymP3B+tjGHnUlaxw==", + "license": "MIT", + "dependencies": { + "kareem": "3.2.0", + "mongodb": "~7.1", + "mpath": "0.9.0", + "mquery": "6.0.0", + "ms": "2.1.3", + "sift": "17.1.3" + }, + "engines": { + "node": ">=20.19.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mongoose" + } + }, + "node_modules/mpath": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/mpath/-/mpath-0.9.0.tgz", + "integrity": "sha512-ikJRQTk8hw5DEoFVxHG1Gn9T/xcjtdnOKIU1JTmGjZZlg9LST2mBLmcX3/ICIbgJydT2GOc15RnNy5mHmzfSew==", + "license": "MIT", + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/mquery": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/mquery/-/mquery-6.0.0.tgz", + "integrity": "sha512-b2KQNsmgtkscfeDgkYMcWGn9vZI9YoXh802VDEwE6qc50zxBFQ0Oo8ROkawbPAsXCY1/Z1yp0MagqsZStPWJjw==", + "license": "MIT", + "engines": { + "node": ">=20.19.0" + } + }, "node_modules/ms": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", @@ -8177,7 +8391,6 @@ "version": "2.3.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", - "dev": true, "license": "MIT", "engines": { "node": ">=6" @@ -8583,6 +8796,12 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/sift": { + "version": "17.1.3", + "resolved": "https://registry.npmjs.org/sift/-/sift-17.1.3.tgz", + "integrity": "sha512-Rtlj66/b0ICeFzYTuNvX/EF1igRbbnGSvEyT79McoZa/DeGhMyC5pWKOEsZKnpkqtSeovd5FL/bjHWC3CIIvCQ==", + "license": "MIT" + }, "node_modules/signal-exit": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", @@ -8637,6 +8856,15 @@ "node": ">=0.10.0" } }, + "node_modules/sparse-bitfield": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/sparse-bitfield/-/sparse-bitfield-3.0.3.tgz", + "integrity": "sha512-kvzhi7vqKTfkh0PZU+2D2PIllw2ymqJKujUcyPMd9Y75Nv4nPbGJZXNhxsgdQab2BmlDct1YnfQCguEvHr7VsQ==", + "license": "MIT", + "dependencies": { + "memory-pager": "^1.0.2" + } + }, "node_modules/sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", @@ -9183,6 +9411,18 @@ "url": "https://github.com/sponsors/Borewit" } }, + "node_modules/tr46": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-5.1.1.tgz", + "integrity": "sha512-hdF5ZgjTqgAntKkklYw0R03MG2x/bSzTtkxmIRw/sTNV8YXsCJ1tfLAX23lhxhHJlEf3CRCOCGGWw3vI3GaSPw==", + "license": "MIT", + "dependencies": { + "punycode": "^2.3.1" + }, + "engines": { + "node": ">=18" + } + }, "node_modules/ts-api-utils": { "version": "2.4.0", "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.4.0.tgz", @@ -9679,6 +9919,15 @@ "defaults": "^1.0.3" } }, + "node_modules/webidl-conversions": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", + "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=12" + } + }, "node_modules/webpack": { "version": "5.105.4", "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.105.4.tgz", @@ -9880,6 +10129,19 @@ "url": "https://opencollective.com/webpack" } }, + "node_modules/whatwg-url": { + "version": "14.2.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-14.2.0.tgz", + "integrity": "sha512-De72GdQZzNTUBBChsXueQUnPKDkg/5A5zp7pFDuQAj5UFoENpiACU0wlCvzpAGnTkj++ihpKwKyYewn/XNUbKw==", + "license": "MIT", + "dependencies": { + "tr46": "^5.1.0", + "webidl-conversions": "^7.0.0" + }, + "engines": { + "node": ">=18" + } + }, "node_modules/which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", diff --git a/backend/package.json b/backend/package.json index 85a7ddb..2f566bf 100644 --- a/backend/package.json +++ b/backend/package.json @@ -21,8 +21,11 @@ }, "dependencies": { "@nestjs/common": "^11.0.1", + "@nestjs/config": "^4.0.3", "@nestjs/core": "^11.0.1", + "@nestjs/mongoose": "^11.0.4", "@nestjs/platform-express": "^11.0.1", + "mongoose": "^9.3.0", "reflect-metadata": "^0.2.2", "rxjs": "^7.8.1" }, diff --git a/backend/src/app.module.ts b/backend/src/app.module.ts index 8662803..29fff1d 100644 --- a/backend/src/app.module.ts +++ b/backend/src/app.module.ts @@ -1,9 +1,16 @@ import { Module } from '@nestjs/common'; +import { ConfigModule } from '@nestjs/config'; +import { DatabaseModule } from './modules/infra/database.module'; import { AppController } from './app.controller'; import { AppService } from './app.service'; @Module({ - imports: [], + imports: [ + ConfigModule.forRoot({ + isGlobal: true, + }), + DatabaseModule, + ], controllers: [AppController], providers: [AppService], }) diff --git a/backend/src/modules/infra/database.connection.service.ts b/backend/src/modules/infra/database.connection.service.ts new file mode 100644 index 0000000..34c062d --- /dev/null +++ b/backend/src/modules/infra/database.connection.service.ts @@ -0,0 +1,25 @@ +import { Injectable, Logger, OnApplicationBootstrap } from '@nestjs/common'; +import { InjectConnection } from '@nestjs/mongoose'; +import { Connection } from 'mongoose'; + +@Injectable() +export class DatabaseConnectionService implements OnApplicationBootstrap { + private readonly logger = new Logger('Database'); + + constructor( + @InjectConnection() private readonly connection: Connection, + ) {} + + async onApplicationBootstrap() { + try { + await this.connection.asPromise(); + this.logger.log('MongoDB connected'); + } catch (error) { + this.logger.error('MongoDB connection failed', error); + } + + this.connection.on('disconnected', () => { + this.logger.warn('MongoDB disconnected'); + }); + } +} \ No newline at end of file diff --git a/backend/src/modules/infra/database.module.ts b/backend/src/modules/infra/database.module.ts new file mode 100644 index 0000000..991a8d2 --- /dev/null +++ b/backend/src/modules/infra/database.module.ts @@ -0,0 +1,11 @@ +import { Module } from '@nestjs/common'; +import { MongooseModule } from '@nestjs/mongoose'; +import { DatabaseConnectionService } from './database.connection.service'; + +@Module({ + imports: [ + MongooseModule.forRoot(process.env.MONGO_URI || 'mongodb://localhost:27017/prodesk'), + ], + providers: [DatabaseConnectionService], +}) +export class DatabaseModule {} \ No newline at end of file diff --git a/backend/tsconfig.json b/backend/tsconfig.json index aba29b0..c565e90 100644 --- a/backend/tsconfig.json +++ b/backend/tsconfig.json @@ -13,7 +13,7 @@ "target": "ES2023", "sourceMap": true, "outDir": "./dist", - "baseUrl": "./", + // "baseUrl": "./", "incremental": true, "skipLibCheck": true, "strictNullChecks": true, From 915a20a5ef613993d862fbe7a589d1a4018d95e4 Mon Sep 17 00:00:00 2001 From: Humberto Date: Mon, 16 Mar 2026 17:14:25 -0300 Subject: [PATCH 2/3] docs(backend): Add .env.example e guia de execucao Adicionar .env.example para configuracao inicial. Atualizar CONTRIBUTING.md com instrucoes de execucao do projeto. --- CONTRIBUTING.md | 72 +++++++++++++++++++++++++++++++++++++++++++- backend/.env.example | 6 ++++ 2 files changed, 77 insertions(+), 1 deletion(-) create mode 100644 backend/.env.example diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 445ac98..fcf7a2b 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -1 +1,71 @@ -# Contribuindo \ No newline at end of file +# Como Contribuir - Seu Passaporte de Entrada + +Estamos felizes em receber você aqui e saber que está interessado em contribuir para o nosso projeto. Como um projeto de código aberto, cada contribuição é valorizada e ajuda a impulsionar o crescimento e a qualidade do nosso trabalho. Este guia foi criado para orientá-lo sobre como você pode participar e fazer parte da nossa comunidade de desenvolvimento. Estamos ansiosos para ver suas contribuições e trabalhar juntos para tornar nosso projeto ainda melhor! + +## Código de Conduta + +Para garantir um ambiente respeitável e inclusivo, leia e siga nosso [Código de Conduta](./CODE_OF_CONDUCT.md). + +## Começando a Contribuir + +Contribuir para o nosso projeto é fácil e estamos ansiosos para receber suas contribuições! Antes de entrarmos nos passos para instalação da aplicação, você precisará configurar algumas ferramentas e preparar seu ambiente de desenvolvimento. + +Aqui está o que você precisa: + +- Uma conta no [GitHub](https://github.com/). +- O *version control system* [Git](https://git-scm.com/) instalado. +- Um IDE para o desenvolvimento. Recomendamos o [Visual Studio Code](https://code.visualstudio.com). +- O [Node.js v22.11.0](https://nodejs.org/en) ou superior. +- [MongoDB Community Server](https://www.mongodb.com/try/download/community). + +## Instalação + +### 1. Clonar o Repositório + +O primeiro passo é clonar o repositório do projeto para o seu ambiente local. + +1. Abra um terminal. + +2. Execute o seguinte comando para clonar o repositório: + ```bash + git clone https://github.com/Bug-Busters-F/ProDesk-backend + ``` + +3. Navegue até o diretório do projeto: + ```bash + cd ProDesk-backend\\backend + ``` + +### 2. Instalar Dependências e Variáveis de Ambiente + +Com o ambiente configurado, basta instalar as dependências do Node.js e iniciar o servidor de desenvolvimento. + +1. Instale as dependências do projeto: + ```sh + npm install + ``` + +2. Configure as variáveis de ambiente + + ```sh + cp .env.example .env + ``` + +3. Abra o arquivo `.env` e edite a conexão com o banco de dados. + + ```sh + # DATABASE + MONGO_URI=mongodb://localhost:27017/prodesk + + # APP + PORT=3000 + NODE_ENV=development + ``` + +### 3. Rodar o Projeto + +Execute a aplicação em modo de desenvolvimento: + +```sh +npm run start:dev +``` \ No newline at end of file diff --git a/backend/.env.example b/backend/.env.example new file mode 100644 index 0000000..b2ef93d --- /dev/null +++ b/backend/.env.example @@ -0,0 +1,6 @@ +# DATABASE +MONGO_URI=mongodb://localhost:27017/prodesk + +# APP +PORT=3000 +NODE_ENV=development \ No newline at end of file From 384f2d98a6369f6eae7c6a97d1743522f2d62e7d Mon Sep 17 00:00:00 2001 From: Humberto Date: Mon, 16 Mar 2026 19:01:12 -0300 Subject: [PATCH 3/3] refactor(database): Renomear infra para database MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Renomeia a pasta infra para database para refletir melhor a responsabilidade do módulo. Corrige o database.module.ts para carregar a URI do MongoDB via variáveis de ambiente corretamente. --- backend/src/app.module.ts | 2 +- .../{infra => database}/database.connection.service.ts | 0 .../src/modules/{infra => database}/database.module.ts | 8 +++++++- 3 files changed, 8 insertions(+), 2 deletions(-) rename backend/src/modules/{infra => database}/database.connection.service.ts (100%) rename backend/src/modules/{infra => database}/database.module.ts (54%) diff --git a/backend/src/app.module.ts b/backend/src/app.module.ts index 29fff1d..8a67938 100644 --- a/backend/src/app.module.ts +++ b/backend/src/app.module.ts @@ -1,6 +1,6 @@ import { Module } from '@nestjs/common'; import { ConfigModule } from '@nestjs/config'; -import { DatabaseModule } from './modules/infra/database.module'; +import { DatabaseModule } from './modules/database/database.module'; import { AppController } from './app.controller'; import { AppService } from './app.service'; diff --git a/backend/src/modules/infra/database.connection.service.ts b/backend/src/modules/database/database.connection.service.ts similarity index 100% rename from backend/src/modules/infra/database.connection.service.ts rename to backend/src/modules/database/database.connection.service.ts diff --git a/backend/src/modules/infra/database.module.ts b/backend/src/modules/database/database.module.ts similarity index 54% rename from backend/src/modules/infra/database.module.ts rename to backend/src/modules/database/database.module.ts index 991a8d2..155b32f 100644 --- a/backend/src/modules/infra/database.module.ts +++ b/backend/src/modules/database/database.module.ts @@ -1,10 +1,16 @@ import { Module } from '@nestjs/common'; import { MongooseModule } from '@nestjs/mongoose'; +import { ConfigService } from '@nestjs/config'; import { DatabaseConnectionService } from './database.connection.service'; @Module({ imports: [ - MongooseModule.forRoot(process.env.MONGO_URI || 'mongodb://localhost:27017/prodesk'), + MongooseModule.forRootAsync({ + inject: [ConfigService], + useFactory: (config: ConfigService) => ({ + uri: config.get('MONGO_URI'), + }), + }), ], providers: [DatabaseConnectionService], })