From 99bb629e7875570332c8fccecdc72bf9bd01c250 Mon Sep 17 00:00:00 2001
From: gabrielm2q <mariano.gabriel2q@gmail.com>
Date: Wed, 4 Dec 2024 00:46:04 -0300
Subject: [PATCH 1/7] fix(fga-eps-mds/2024.2-ARANDU-DOC#42): modifies docker
 configuration and its files

---
 .dockerignore      |  6 +++---
 .env.dev           | 19 -------------------
 .env.dev.template  | 14 ++++++++++++++
 .env.prod.template | 14 ++++++++++++++
 Dockerfile         | 36 ++++++++++++++++++++++++++++++------
 Dockerfile.prod    | 38 ++++++++++++++++++++++++++++++++++++++
 Makefile           | 15 +++++++++++++++
 docker-compose.yml | 18 ++++++++----------
 src/app.module.ts  |  2 +-
 9 files changed, 123 insertions(+), 39 deletions(-)
 delete mode 100644 .env.dev
 create mode 100644 .env.dev.template
 create mode 100644 .env.prod.template
 create mode 100644 Dockerfile.prod
 create mode 100644 Makefile

diff --git a/.dockerignore b/.dockerignore
index 3dc974b..c9c9bce 100644
--- a/.dockerignore
+++ b/.dockerignore
@@ -4,9 +4,9 @@
 .dockerignore
 
 # Build dependencies
-dist.do
-node_modules
-node_module 
+# dist.do
+# node_modules
+# node_module 
 
 # Misc
 .eslintrc.js
diff --git a/.env.dev b/.env.dev
deleted file mode 100644
index 048404d..0000000
--- a/.env.dev
+++ /dev/null
@@ -1,19 +0,0 @@
-MONGODB_URI=''
-EMAIL_USER=""
-EMAIL_PASS=""
-SENDGRID_API_KEY=""
-JWT_SECRET=""
-JWT_EXPIRATION=""
-GOOGLE_CLIENT_ID=""
-GOOGLE_CLIENT_SECRET=""
-GOOGLE_CALLBACK_URL=""
-MICROSOFT_CLIENT_ID=""
-MICROSOFT_CLIENT_SECRET=""
-MICROSOFT_TENANT_ID=""
-MICROSOFT_CALLBACK_URL=""
-FRONTEND_URL=""
-EMAIL_LINK=""
-# Estas etapas a baixo ainda nao sao necessarias
-
-# RABBIT_MQ_URI=amqp://admin:admin@rabbitmq:5672
-# RABBIT_MQ_USER_QUEUE=USER
\ No newline at end of file
diff --git a/.env.dev.template b/.env.dev.template
new file mode 100644
index 0000000..7553a7c
--- /dev/null
+++ b/.env.dev.template
@@ -0,0 +1,14 @@
+MONGODB_URI=
+EMAIL_USER=
+EMAIL_PASS=
+SENDGRID_API_KEY=
+JWT_SECRET=
+JWT_EXPIRATION=
+GOOGLE_CLIENT_ID=
+GOOGLE_CLIENT_SECRET=
+GOOGLE_CALLBACK_URL=
+MICROSOFT_CLIENT_ID=
+MICROSOFT_CLIENT_SECRET=
+MICROSOFT_TENANT_ID=
+MICROSOFT_CALLBACK_URL=
+FRONTEND_URL=
\ No newline at end of file
diff --git a/.env.prod.template b/.env.prod.template
new file mode 100644
index 0000000..7553a7c
--- /dev/null
+++ b/.env.prod.template
@@ -0,0 +1,14 @@
+MONGODB_URI=
+EMAIL_USER=
+EMAIL_PASS=
+SENDGRID_API_KEY=
+JWT_SECRET=
+JWT_EXPIRATION=
+GOOGLE_CLIENT_ID=
+GOOGLE_CLIENT_SECRET=
+GOOGLE_CALLBACK_URL=
+MICROSOFT_CLIENT_ID=
+MICROSOFT_CLIENT_SECRET=
+MICROSOFT_TENANT_ID=
+MICROSOFT_CALLBACK_URL=
+FRONTEND_URL=
\ No newline at end of file
diff --git a/Dockerfile b/Dockerfile
index 20520c2..ee611b0 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -1,14 +1,38 @@
-FROM node:22-alpine
-
-WORKDIR /app
+FROM node:22-alpine AS base
 
+FROM base AS deps
+RUN apk add --no-cache libc6-compat
 
-COPY package*.json ./
+WORKDIR /app
 
-RUN npm install
+COPY package.json package-lock.json* ./
+RUN \
+  if [ -f package-lock.json ]; then npm ci; \
+  fi
 
+FROM base AS builder
+WORKDIR /app
+COPY --from=deps /app/node_modules ./node_modules
 COPY . .
 
+COPY .env .env
 RUN npm run build
 
-CMD ["npm", "run", "start:dev"]
+FROM base AS runner
+WORKDIR /app
+
+ENV NODE_ENV production
+
+RUN addgroup -g 1001 -S nodejs \
+  && adduser -S arandu -u 1001
+
+COPY --chown=arandu:nodejs --from=builder /app/dist ./dist
+COPY --chown=arandu:nodejs --from=builder /app/node_modules ./node_modules
+
+USER arandu
+
+EXPOSE 3000
+
+ENV PORT=3000
+
+CMD ["node", "dist/main.js"]
\ No newline at end of file
diff --git a/Dockerfile.prod b/Dockerfile.prod
new file mode 100644
index 0000000..c4f3a1e
--- /dev/null
+++ b/Dockerfile.prod
@@ -0,0 +1,38 @@
+FROM node:22-alpine AS base
+
+FROM base AS deps
+RUN apk add --no-cache libc6-compat
+
+WORKDIR /app
+
+COPY package.json package-lock.json* ./
+RUN \
+  if [ -f package-lock.json ]; then npm ci; \
+  fi
+
+FROM base AS builder
+WORKDIR /app
+COPY --from=deps /app/node_modules ./node_modules
+COPY . .
+
+COPY .env.prod.template .env
+RUN npm run build
+
+FROM base AS runner
+WORKDIR /app
+
+ENV NODE_ENV production
+
+RUN addgroup -g 1001 -S nodejs \
+  && adduser -S arandu -u 1001
+
+COPY --chown=arandu:nodejs --from=builder /app/dist ./dist
+COPY --chown=arandu:nodejs --from=builder /app/node_modules ./node_modules
+
+USER arandu
+
+EXPOSE 3000
+
+ENV PORT=3000
+
+CMD ["node", "dist/main.js"]
\ No newline at end of file
diff --git a/Makefile b/Makefile
new file mode 100644
index 0000000..24082cf
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,15 @@
+.PHONY: build
+build:
+	docker compose build
+
+.PHONY: start
+start:
+	docker compose up
+
+.PHONY: run
+run:
+	docker compose up --build
+
+.PHONY: stop
+stop:
+	docker compose down
\ No newline at end of file
diff --git a/docker-compose.yml b/docker-compose.yml
index a33e9a2..9e45d5e 100644
--- a/docker-compose.yml
+++ b/docker-compose.yml
@@ -2,19 +2,17 @@ services:
   user-api:
     container_name: user-api
     restart: on-failure
-    build: .
-    environment:
-      - NODE_ENV=development
-    ports:
-      - 3000:3000
-    volumes:
-      - ./src:/app/src
-      - ./test:/app/test
+    build:
+      context: .
+      dockerfile: Dockerfile
+    image: user-api
     env_file:
       - .env
+    ports:
+      - "3000:3000"
     networks:
-      - calculus-network
+      - arandu-network
 
 networks:
-  calculus-network:
+  arandu-network:
     driver: bridge
\ No newline at end of file
diff --git a/src/app.module.ts b/src/app.module.ts
index 5915502..42df725 100644
--- a/src/app.module.ts
+++ b/src/app.module.ts
@@ -3,8 +3,8 @@ import { ConfigModule, ConfigService } from '@nestjs/config';
 import { MongooseModule } from '@nestjs/mongoose';
 import { UsersModule } from './users/users.module';
 
-import { AuthModule } from './auth/auth.module';
 import * as Joi from 'joi';
+import { AuthModule } from './auth/auth.module';
 
 @Module({
   imports: [

From 9947a2a9036c8351723b005ca78fed09165930e7 Mon Sep 17 00:00:00 2001
From: gabrielm2q <mariano.gabriel2q@gmail.com>
Date: Thu, 5 Dec 2024 21:15:19 -0300
Subject: [PATCH 2/7] fix(fga-eps-mds/2024.2-ARANDU-DOC#42): quickfixes on
 dockerfiles and bind application

---
 Dockerfile  |  4 +++-
 src/main.ts | 10 ++++++----
 2 files changed, 9 insertions(+), 5 deletions(-)

diff --git a/Dockerfile b/Dockerfile
index ee611b0..4755fc6 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -10,6 +10,7 @@ RUN \
   if [ -f package-lock.json ]; then npm ci; \
   fi
 
+
 FROM base AS builder
 WORKDIR /app
 COPY --from=deps /app/node_modules ./node_modules
@@ -21,13 +22,14 @@ RUN npm run build
 FROM base AS runner
 WORKDIR /app
 
-ENV NODE_ENV production
+ENV NODE_ENV=production
 
 RUN addgroup -g 1001 -S nodejs \
   && adduser -S arandu -u 1001
 
 COPY --chown=arandu:nodejs --from=builder /app/dist ./dist
 COPY --chown=arandu:nodejs --from=builder /app/node_modules ./node_modules
+COPY --chown=arandu:nodejs --from=builder /app/.env ./.env
 
 USER arandu
 
diff --git a/src/main.ts b/src/main.ts
index 49335f2..8369ded 100644
--- a/src/main.ts
+++ b/src/main.ts
@@ -1,7 +1,7 @@
+import { Logger, ValidationPipe } from '@nestjs/common';
+import { ConfigService } from '@nestjs/config';
 import { NestFactory } from '@nestjs/core';
 import { AppModule } from './app.module';
-import { ConfigService } from '@nestjs/config';
-import { Logger, ValidationPipe } from '@nestjs/common';
 
 const configService = new ConfigService();
 const logger = new Logger('Main');
@@ -10,7 +10,9 @@ async function bootstrap() {
   const app = await NestFactory.create(AppModule);
   app.useGlobalPipes(new ValidationPipe());
   app.enableCors();
-  await app.listen(configService.get('PORT'));
-  logger.log(`Application listening on port ${configService.get('PORT')}`);
+  await app.listen(configService.get('PORT'), '0.0.0.0', () => {
+    logger.log(`Application listening on port ${configService.get('PORT')}`);
+  });
+  
 }
 bootstrap();

From cf4e00e695fbc223d9110a260fba881eec758196 Mon Sep 17 00:00:00 2001
From: gabrielm2q <mariano.gabriel2q@gmail.com>
Date: Thu, 5 Dec 2024 21:57:39 -0300
Subject: [PATCH 3/7] feat(fga-eps-mds/2024.2-ARANDU-DOC#42): adding local
 mongo and mongo express to docker compose

---
 .env.dev.template  |  8 ++++++++
 .env.prod.template |  8 ++++++++
 docker-compose.yml | 34 ++++++++++++++++++++++++++++++++++
 3 files changed, 50 insertions(+)

diff --git a/.env.dev.template b/.env.dev.template
index 7553a7c..e458e0c 100644
--- a/.env.dev.template
+++ b/.env.dev.template
@@ -1,3 +1,11 @@
+MONGO_INITDB_ROOT_USERNAME=
+MONGO_INITDB_ROOT_PASSWORD=
+ME_CONFIG_MONGODB_ADMINUSERNAME=
+ME_CONFIG_MONGODB_ADMINPASSWORD=
+ME_CONFIG_MONGODB_URL=
+ME_CONFIG_BASICAUTH=
+ME_CONFIG_BASICAUTH_USERNAME=
+ME_CONFIG_BASICAUTH_PASSWORD=
 MONGODB_URI=
 EMAIL_USER=
 EMAIL_PASS=
diff --git a/.env.prod.template b/.env.prod.template
index 7553a7c..e458e0c 100644
--- a/.env.prod.template
+++ b/.env.prod.template
@@ -1,3 +1,11 @@
+MONGO_INITDB_ROOT_USERNAME=
+MONGO_INITDB_ROOT_PASSWORD=
+ME_CONFIG_MONGODB_ADMINUSERNAME=
+ME_CONFIG_MONGODB_ADMINPASSWORD=
+ME_CONFIG_MONGODB_URL=
+ME_CONFIG_BASICAUTH=
+ME_CONFIG_BASICAUTH_USERNAME=
+ME_CONFIG_BASICAUTH_PASSWORD=
 MONGODB_URI=
 EMAIL_USER=
 EMAIL_PASS=
diff --git a/docker-compose.yml b/docker-compose.yml
index 9e45d5e..3d7007b 100644
--- a/docker-compose.yml
+++ b/docker-compose.yml
@@ -12,7 +12,41 @@ services:
       - "3000:3000"
     networks:
       - arandu-network
+  
+  mongo:
+    image: mongo
+    restart: always
+    env_file:
+      - .env
+    environment:
+      MONGO_INITDB_ROOT_USERNAME: ${MONGO_INITDB_ROOT_USERNAME}
+      MONGO_INITDB_ROOT_PASSWORD: ${MONGO_INITDB_ROOT_PASSWORD}
+    ports:
+      - "27017:27017"
+    command: ["--quiet"]
+    networks:
+      - arandu-network
+
+  mongo-express:
+    image: mongo-express
+    restart: always
+    env_file:
+      - .env
+    environment:
+      ME_CONFIG_MONGODB_ADMINUSERNAME: ${ME_CONFIG_MONGODB_ADMINUSERNAME}
+      ME_CONFIG_MONGODB_ADMINPASSWORD: ${ME_CONFIG_MONGODB_ADMINPASSWORD}
+      ME_CONFIG_MONGODB_URL: ${MONGODB_URI}
+      ME_CONFIG_BASICAUTH: ${ME_CONFIG_BASICAUTH}
+      ME_CONFIG_BASICAUTH_USERNAME: ${ME_CONFIG_BASICAUTH_USERNAME}
+      ME_CONFIG_BASICAUTH_PASSWORD: ${ME_CONFIG_BASICAUTH_PASSWORD}
+    ports:
+      - "8081:8081"
+    networks:
+      - arandu-network
+    depends_on:
+      - mongo
 
 networks:
   arandu-network:
+    name: arandu-network
     driver: bridge
\ No newline at end of file

From 2b6c8e80581b993f9c2f6c5388fc3da6e974bde0 Mon Sep 17 00:00:00 2001
From: gabrielm2q <mariano.gabriel2q@gmail.com>
Date: Thu, 5 Dec 2024 23:20:34 -0300
Subject: [PATCH 4/7] fix(fga-eps-mds/2024.2-ARANDU-DOC#42): quickfix on
 dockerfile env

---
 Dockerfile | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/Dockerfile b/Dockerfile
index 4755fc6..55f1fcb 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -22,7 +22,7 @@ RUN npm run build
 FROM base AS runner
 WORKDIR /app
 
-ENV NODE_ENV=production
+ENV NODE_ENV=development
 
 RUN addgroup -g 1001 -S nodejs \
   && adduser -S arandu -u 1001

From a5c007c23bbcc4358e9c87b9ca280889e380f24e Mon Sep 17 00:00:00 2001
From: gabrielm2q <mariano.gabriel2q@gmail.com>
Date: Sat, 7 Dec 2024 12:27:46 -0300
Subject: [PATCH 5/7] fix(fga-eps-mds/2024.2-ARANDU-DOC#42): quickfix on
 network at docker compose file

---
 docker-compose.yml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/docker-compose.yml b/docker-compose.yml
index 3d7007b..989235e 100644
--- a/docker-compose.yml
+++ b/docker-compose.yml
@@ -49,4 +49,4 @@ services:
 networks:
   arandu-network:
     name: arandu-network
-    driver: bridge
\ No newline at end of file
+    external: true

From c187ce7475b8097f249f7c9de596f27b261f5069 Mon Sep 17 00:00:00 2001
From: gabrielm2q <mariano.gabriel2q@gmail.com>
Date: Sat, 7 Dec 2024 23:38:38 -0300
Subject: [PATCH 6/7] fix(fga-eps-mds/2024.2-ARANDU-DOC#42): fix on production
 dockerfile

Co-authored-by: dartmol203 <andre.correa.silva203@gmail.com>
---
 Dockerfile.prod | 25 +++++++++----------------
 Makefile        |  8 ++++----
 package.json    |  2 +-
 3 files changed, 14 insertions(+), 21 deletions(-)

diff --git a/Dockerfile.prod b/Dockerfile.prod
index c4f3a1e..592db50 100644
--- a/Dockerfile.prod
+++ b/Dockerfile.prod
@@ -1,7 +1,4 @@
-FROM node:22-alpine AS base
-
-FROM base AS deps
-RUN apk add --no-cache libc6-compat
+FROM node:22 AS base
 
 WORKDIR /app
 
@@ -10,29 +7,25 @@ RUN \
   if [ -f package-lock.json ]; then npm ci; \
   fi
 
+RUN npm install nodemon --save-dev
+
 FROM base AS builder
 WORKDIR /app
-COPY --from=deps /app/node_modules ./node_modules
+RUN npm install
 COPY . .
 
-COPY .env.prod.template .env
+COPY .env .env
 RUN npm run build
 
 FROM base AS runner
-WORKDIR /app
-
-ENV NODE_ENV production
-
-RUN addgroup -g 1001 -S nodejs \
-  && adduser -S arandu -u 1001
 
-COPY --chown=arandu:nodejs --from=builder /app/dist ./dist
-COPY --chown=arandu:nodejs --from=builder /app/node_modules ./node_modules
+ENV NODE_ENV=production
 
-USER arandu
+COPY --from=builder /app/node_modules ./node_modules
+COPY --from=builder /app/ ./
 
 EXPOSE 3000
 
 ENV PORT=3000
 
-CMD ["node", "dist/main.js"]
\ No newline at end of file
+CMD ["npm", "run", "start:prod"]
\ No newline at end of file
diff --git a/Makefile b/Makefile
index 24082cf..208a30e 100644
--- a/Makefile
+++ b/Makefile
@@ -1,15 +1,15 @@
 .PHONY: build
 build:
-	docker compose build
+	npm install && docker-compose build
 
 .PHONY: start
 start:
-	docker compose up
+	docker-compose up
 
 .PHONY: run
 run:
-	docker compose up --build
+	npm install & docker-compose up --build
 
 .PHONY: stop
 stop:
-	docker compose down
\ No newline at end of file
+	docker-compose down
\ No newline at end of file
diff --git a/package.json b/package.json
index 390e5e2..1b9a865 100644
--- a/package.json
+++ b/package.json
@@ -11,7 +11,7 @@
     "start": "nest start",
     "start:dev": "nest start --watch",
     "start:debug": "nest start --debug --watch",
-    "start:prod": "node dist/main",
+    "start:prod": "nest start --watch",
     "lint": "eslint \"{src,apps,libs,test}/**/*.ts\" --fix",
     "test": "jest --passWithNoTests --no-cache --runInBand",
     "test:all": "npm run test -- --coverage --config jest.config.ts",

From 67cb55aa415045434ba73de82f926cb2ae3c653c Mon Sep 17 00:00:00 2001
From: gabrielm2q <mariano.gabriel2q@gmail.com>
Date: Sun, 8 Dec 2024 03:33:38 -0300
Subject: [PATCH 7/7] fix(fga-eps-mds/2024.2-ARANDU-DOC#42): fix development
 dockerfile and makefile

---
 Dockerfile         | 20 ++++++--------------
 Makefile           |  4 ++--
 docker-compose.yml |  4 ++--
 3 files changed, 10 insertions(+), 18 deletions(-)

diff --git a/Dockerfile b/Dockerfile
index 55f1fcb..7dbb019 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -1,7 +1,4 @@
-FROM node:22-alpine AS base
-
-FROM base AS deps
-RUN apk add --no-cache libc6-compat
+FROM node:22 AS base
 
 WORKDIR /app
 
@@ -10,10 +7,11 @@ RUN \
   if [ -f package-lock.json ]; then npm ci; \
   fi
 
+RUN npm install nodemon --save-dev
 
 FROM base AS builder
 WORKDIR /app
-COPY --from=deps /app/node_modules ./node_modules
+RUN npm install
 COPY . .
 
 COPY .env .env
@@ -24,17 +22,11 @@ WORKDIR /app
 
 ENV NODE_ENV=development
 
-RUN addgroup -g 1001 -S nodejs \
-  && adduser -S arandu -u 1001
-
-COPY --chown=arandu:nodejs --from=builder /app/dist ./dist
-COPY --chown=arandu:nodejs --from=builder /app/node_modules ./node_modules
-COPY --chown=arandu:nodejs --from=builder /app/.env ./.env
-
-USER arandu
+COPY --from=builder /app/node_modules ./node_modules
+COPY --from=builder /app/ ./
 
 EXPOSE 3000
 
 ENV PORT=3000
 
-CMD ["node", "dist/main.js"]
\ No newline at end of file
+CMD ["npm", "run", "start:dev"]
\ No newline at end of file
diff --git a/Makefile b/Makefile
index 208a30e..b2ee1f7 100644
--- a/Makefile
+++ b/Makefile
@@ -1,6 +1,6 @@
 .PHONY: build
 build:
-	npm install && docker-compose build
+	npm install && docker-compose build --no-cache
 
 .PHONY: start
 start:
@@ -8,7 +8,7 @@ start:
 
 .PHONY: run
 run:
-	npm install & docker-compose up --build
+	npm install & docker-compose build --no-cache && docker-compose up
 
 .PHONY: stop
 stop:
diff --git a/docker-compose.yml b/docker-compose.yml
index 989235e..b20bcdf 100644
--- a/docker-compose.yml
+++ b/docker-compose.yml
@@ -2,12 +2,12 @@ services:
   user-api:
     container_name: user-api
     restart: on-failure
+    env_file:
+      - .env
     build:
       context: .
       dockerfile: Dockerfile
     image: user-api
-    env_file:
-      - .env
     ports:
       - "3000:3000"
     networks: