Skip to content
Merged

Dev #62

Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
113 commits
Select commit Hold shift + click to select a range
ccc1b03
shoppinglist change to use firebase
AnaBeatrizHidalgo Nov 20, 2025
beca897
autenticação com firebase
mariagabi-lustosa Nov 20, 2025
d452c9e
autenticação com firebase
mariagabi-lustosa Nov 20, 2025
e006868
Delete saude_e_bem_estar/src/config/firebase.ts
mariagabi-lustosa Nov 20, 2025
ac744da
Innitial commit for the recipes feature
gabcro Nov 20, 2025
266d9bc
First version of recipe search feature
gabcro Nov 20, 2025
4eb6c21
Separando e adicionando testes de signUp. Ainda faltam testes de vali…
TheBorts Nov 20, 2025
a5ba903
Criacao do dos testes de senha para o SignUp
Palacio-dev Nov 20, 2025
4d1b10d
#37 Mudando nome do arquivo de testes relacionados ao SignUp
Palacio-dev Nov 20, 2025
7b654cd
Merge branch '38-refatoração-testes-signup' into 37-refatoração-teste…
TheBorts Nov 20, 2025
6644545
Merge pull request #39 from Palacio-dev/37-refatoração-testes-login
TheBorts Nov 20, 2025
17a708a
Consertando bugs
Palacio-dev Nov 20, 2025
b71eb01
Refactoring recipes backend and Share function
gabcro Nov 20, 2025
599a24a
meal planner refatorado com firebase
mariagabi-lustosa Nov 20, 2025
d113058
search conect to firebase
AnaBeatrizHidalgo Nov 20, 2025
d81a1ea
meal planner refatorado com firebase
mariagabi-lustosa Nov 20, 2025
c7a9cb6
Adicionando botão funcionando ao ProductSearchView
TheBorts Nov 20, 2025
d169f27
Merge branch 'backend' into features/receitas
gabcro Nov 20, 2025
30f434c
Merge pull request #40 from Palacio-dev/features/receitas
AnaBeatrizHidalgo Nov 20, 2025
085d06d
Merge branch 'backend' into autenticacao
mariagabi-lustosa Nov 20, 2025
c44d911
Merge pull request #41 from Palacio-dev/autenticacao
AnaBeatrizHidalgo Nov 20, 2025
f3c1d77
Adicionando pagina e css do RecoverPassword
TheBorts Nov 20, 2025
31ca264
Atualizando arquivos para comportar a nova pagina
TheBorts Nov 20, 2025
b204b42
fixed: permanêcia de dados nos cardápios
mariagabi-lustosa Nov 20, 2025
97e2229
Merge pull request #43 from Palacio-dev/meal-planner
gabcro Nov 20, 2025
a7460c3
3 testes já estão funcionando, falta apenas o teste de um input de so…
Palacio-dev Nov 20, 2025
6d78bbd
Adding sharing and recipe integration
gabcro Nov 20, 2025
cd28c6c
Tratando caso em que o usuário digita apenas caracteres especiais
Palacio-dev Nov 20, 2025
e6469e9
Add custom timeframe to mealplanner
gabcro Nov 20, 2025
d40be7f
search history funciona
AnaBeatrizHidalgo Nov 20, 2025
67d8fe0
Merge branch 'backend' into productSearch
AnaBeatrizHidalgo Nov 20, 2025
ac06432
Merge pull request #44 from Palacio-dev/productSearch
gabcro Nov 20, 2025
8d827f9
Merge pull request #45 from Palacio-dev/meal-planner
AnaBeatrizHidalgo Nov 20, 2025
2a5474e
Agora o usuário pode digitar %
Palacio-dev Nov 20, 2025
a3cb241
botão voltar funcionando
AnaBeatrizHidalgo Nov 20, 2025
47dbf5e
Branch já está pronta para merge
Palacio-dev Nov 20, 2025
c7fc3a5
Organizando os testes de SignUp
Palacio-dev Nov 20, 2025
f886fa7
Merge pull request #46 from Palacio-dev/38-refatoração-testes-signup
mariagabi-lustosa Nov 20, 2025
deb91c1
add save recipes
AnaBeatrizHidalgo Nov 20, 2025
5b1e19f
salva apartir de adicionar no planejador
AnaBeatrizHidalgo Nov 21, 2025
a3591e8
Innitial commit for the nutrient counter
gabcro Nov 21, 2025
f651d26
Merge branch 'features/nutrient-counter' into backend
gabcro Nov 21, 2025
8c660fa
Merge pull request #47 from Palacio-dev/receitas-firebase
gabcro Nov 21, 2025
e7c9349
Merge pull request #48 from Palacio-dev/backend
AnaBeatrizHidalgo Nov 21, 2025
33b2fc3
Adicionando autenticação de email! Mudanças na página de login e no hook
TheBorts Nov 21, 2025
b0ef13c
Completed nutrient counter
gabcro Nov 21, 2025
64b9dcd
Adicionando funcionalidade de adicionar produtos à lista de compras a…
TheBorts Nov 21, 2025
eb9f8b3
Merge remote-tracking branch 'refs/remotes/origin/features/nutrient-c…
TheBorts Nov 21, 2025
a63fac6
slight bug fix
TheBorts Nov 21, 2025
5740f85
Complete nutrient counter
gabcro Nov 21, 2025
a6b363d
Merge pull request #49 from Palacio-dev/features/nutrient-counter
AnaBeatrizHidalgo Nov 21, 2025
f13f725
Adding code to implement settings and logout page
TheBorts Nov 21, 2025
cd77e0d
Merge pull request #50 from Palacio-dev/Settings
gabcro Nov 21, 2025
be7b50c
Testes sendo corrigidos
Palacio-dev Nov 21, 2025
246b6dc
Era culpa do João
Palacio-dev Nov 21, 2025
4b76dbf
Quase dando certo
Palacio-dev Nov 21, 2025
9ef8350
Fixing some tests
TheBorts Nov 21, 2025
ebd37c5
Merge remote-tracking branch 'refs/remotes/origin/Consertando-testes-…
TheBorts Nov 21, 2025
210970a
Merge branch 'dev' into email-authetication
TheBorts Nov 21, 2025
7df4f69
Bug fixes
gabcro Nov 21, 2025
676fd31
Merge branch 'dev' into recover_password
TheBorts Nov 21, 2025
e95f8c9
Merge pull request #52 from Palacio-dev/recover_password
gabcro Nov 21, 2025
3c7bb23
Merge pull request #53 from Palacio-dev/email-authetication
gabcro Nov 21, 2025
7de59a8
Testes do SignUp corrigidos e funcionais
Palacio-dev Nov 21, 2025
f6e532e
Agora os nomes podem ter o caractere especial til
Palacio-dev Nov 21, 2025
bbf48f5
Arrumando condições para mudar nome
TheBorts Nov 21, 2025
170ad61
Fixes to meal planner
gabcro Nov 21, 2025
0c08a44
Arrumando bug do histórico
TheBorts Nov 21, 2025
5b4fedb
Versão final dos testes do SignUp
Palacio-dev Nov 21, 2025
ee07bba
Commit for favorites and dark theme feature
gabcro Nov 21, 2025
b20d6f7
Merge pull request #55 from Palacio-dev/favorites-dark-teheme
Palacio-dev Nov 21, 2025
afaf5e9
Merge pull request #56 from Palacio-dev/bug-fix
Palacio-dev Nov 21, 2025
43e7e04
Atualizando CI
TheBorts Nov 21, 2025
56b3e9f
Atualizando CI
TheBorts Nov 21, 2025
2a1cf93
Atualizando CI
TheBorts Nov 22, 2025
dd07de9
Atualizando CI
TheBorts Nov 22, 2025
8abfc48
Atualizando CI
TheBorts Nov 22, 2025
dac76f8
Atualizando CI
TheBorts Nov 22, 2025
3361cce
vo na fé
AnaBeatrizHidalgo Nov 22, 2025
defb9fb
Atualizando CI
TheBorts Nov 22, 2025
f7db204
Atualizando CI
TheBorts Nov 22, 2025
b7ef8b8
Atualizando CI
TheBorts Nov 22, 2025
679320d
Atualizando CI
TheBorts Nov 22, 2025
3d5e0c6
Atualizando CI
TheBorts Nov 22, 2025
02ccf2d
para resolver conflito
AnaBeatrizHidalgo Nov 22, 2025
905c766
Merge branch 'release-deploy-firebase' into dev
AnaBeatrizHidalgo Nov 22, 2025
7ff0a1f
Merge branch 'fixing-ci' into 42-testes-feature-de-busca-receitas
AnaBeatrizHidalgo Nov 22, 2025
7e6a7e6
Merge pull request #58 from Palacio-dev/42-testes-feature-de-busca-re…
AnaBeatrizHidalgo Nov 22, 2025
1486bec
Atualizando CI
TheBorts Nov 22, 2025
227f8d5
Atualizando CI
TheBorts Nov 22, 2025
205bc5b
Atualizando CI
TheBorts Nov 22, 2025
0adf629
Simple syntax fix
gabcro Nov 22, 2025
a458991
Delete package-lock.json because of conflicts
gabcro Nov 22, 2025
e7a899a
Restore package lock file
gabcro Nov 22, 2025
04ea63e
Merge branch 'fixing-ci' into Consertando-testes-SignUp
gabcro Nov 22, 2025
1ad64f6
Merge pull request #59 from Palacio-dev/Consertando-testes-SignUp
gabcro Nov 22, 2025
8a3d5b3
Testes antigos apagados
Palacio-dev Nov 22, 2025
3b743a5
Fix to syntax errors in ProductSearchView.tsx
gabcro Nov 22, 2025
17a03a2
Arrumando testes RecipeSearch
Palacio-dev Nov 22, 2025
24fd4b4
testes SignUp corrigidos novamente
Palacio-dev Nov 22, 2025
289f20d
Apagando arquivo antigo
Palacio-dev Nov 22, 2025
17260fa
Atualizando CI
Palacio-dev Nov 22, 2025
59c87f1
Merge pull request #61 from Palacio-dev/fixing-ci
Palacio-dev Nov 24, 2025
43d312b
Organizando repositorio
AnaBeatrizHidalgo Nov 24, 2025
2a63472
arrumando readme
AnaBeatrizHidalgo Nov 25, 2025
32d56cd
Correção do C4
AnaBeatrizHidalgo Nov 25, 2025
27a5a9d
readme link tbca
AnaBeatrizHidalgo Nov 25, 2025
1915f71
Fixing directory name bug
TheBorts Nov 27, 2025
849457f
FIxing test in CI and hiding secrets
TheBorts Nov 27, 2025
e572dc8
Fixing CI indentation
TheBorts Nov 27, 2025
0bd73ca
Fixin bug in CI
TheBorts Nov 27, 2025
bf24040
tirando dotenv
AnaBeatrizHidalgo Nov 27, 2025
cfc3be7
Fixing variables names in firebase
TheBorts Nov 27, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
127 changes: 46 additions & 81 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,100 +2,65 @@ name: CI

on:
push:
branches: [ main, '**' ]
pull_request:
branches: [ main ]
branches: [main]

jobs:
backend:
runs-on: ubuntu-latest
env:
CI: true
defaults:
run:
working-directory: auth-api
steps:
- uses: actions/checkout@v4

- name: Install Postgres server
run: |
sudo apt-get update
sudo apt-get install -y postgresql postgresql-contrib
sudo systemctl start postgresql
sudo -u postgres psql -v ON_ERROR_STOP=1 <<'SQL'
DO $$
BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_roles WHERE rolname = 'test_user') THEN
CREATE ROLE test_user LOGIN PASSWORD 'teste123' CREATEDB;
ELSE
ALTER ROLE test_user LOGIN PASSWORD 'teste123' CREATEDB;
END IF;
END$$;
SQL

- name: Setup Node
uses: actions/setup-node@v4
with:
node-version: 20
cache: npm
cache-dependency-path: auth-api/package-lock.json

- name: Install deps (backend)
run: npm ci
concurrency:
group: ci-${{ github.ref }}
cancel-in-progress: true

- name: Create .env for CI
run: |
cat > .env <<'EOF'
PORT=4000
PGHOST=localhost
PGPORT=5432
PGDATABASE=logindb
PGUSER=test_user
PGPASSWORD=teste123
CORS_ORIGIN=http://localhost:3000
JWT_SECRET=ci_dummy_secret
EOF

- name: Init DB (calls initDb)
run: node --input-type=module -e "import('./src/db.js').then(m=>m.initDb())"

- name: Test (backend) -- if present
run: npm run test --if-present -- --watchAll=false --runInBand --verbose
jobs:

frontend:
test:
timeout-minutes: 30
runs-on: ubuntu-latest

env:
CI: true
defaults:
run:
working-directory: saude_e_bem_estar
REACT_APP_FIREBASE_APIKEY: ${{ secrets.FIREBASE_APIKEY }}
REACT_APP_FIREBASE_AUTHDOMAIN: ${{ secrets.FIREBASE_AUTHDOMAIN }}
REACT_APP_FIREBASE_PROJECTID: ${{ secrets.FIREBASE_PROJECTID }}
REACT_APP_FIREBASE_STORAGEBUCKET: ${{ secrets.FIREBASE_STORAGEBUCKET }}
REACT_APP_FIREBASE_MESSAGINGSENDERID: ${{ secrets.FIREBASE_MESSAGINGSENDERID }}
REACT_APP_FIREBASE_APPID: ${{ secrets.FIREBASE_APPID }}
REACT_APP_FIREBASE_MEASUREMENTID: ${{ secrets.FIREBASE_MEASUREMENTID }}

strategy:
matrix:
node-version: [18.x]

steps:
- uses: actions/checkout@v4
- name: Checkout code
uses: actions/checkout@v4

- name: Setup Node
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: 20
node-version: ${{ matrix.node-version }}
cache: npm
cache-dependency-path: |
package-lock.json

- name: Install deps (front)
run: npm ci

- name: Test (front)
# ---------------------------
# FRONTEND
# ---------------------------
- name: Install frontend dependencies
env:
CI: false
run: |
npm test -- --watchAll=false --runInBand --verbose
while true; do echo "Still getting dependencies..."; sleep 60; done &
npm install
npm ci
kill %1
working-directory: nutri.me

- name: Build (front)
run: npm run build
- name: Build frontend
env:
CI: false
NODE_OPTIONS: --max-old-space-size=6144
run: |
while true; do echo "Still building..."; sleep 60; done &
npm run build
kill %1
working-directory: nutri.me

- name: Upload build artifact
uses: actions/upload-artifact@v4
with:
name: front-build
path: |
dist
build
if-no-files-found: ignore
- name: Run frontend tests
run: CI=false npm test -- --verbose
working-directory: nutri.me
19 changes: 19 additions & 0 deletions .github/workflows/firebase-hosting-merge.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
# This file was auto-generated by the Firebase CLI
# https://github.com/firebase/firebase-tools

name: Deploy to Firebase Hosting on merge
on:
push:
branches:
- release-deploy-firebase
jobs:
build_and_deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: FirebaseExtended/action-hosting-deploy@v0
with:
repoToken: ${{ secrets.GITHUB_TOKEN }}
firebaseServiceAccount: ${{ secrets.FIREBASE_SERVICE_ACCOUNT_NUTRIME_MC656 }}
channelId: live
projectId: nutrime-mc656
20 changes: 20 additions & 0 deletions .github/workflows/firebase-hosting-pull-request.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
# This file was auto-generated by the Firebase CLI
# https://github.com/firebase/firebase-tools

name: Deploy to Firebase Hosting on PR
on: pull_request
permissions:
checks: write
contents: read
pull-requests: write
jobs:
build_and_preview:
if: ${{ github.event.pull_request.head.repo.full_name == github.repository }}
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: FirebaseExtended/action-hosting-deploy@v0
with:
repoToken: ${{ secrets.GITHUB_TOKEN }}
firebaseServiceAccount: ${{ secrets.FIREBASE_SERVICE_ACCOUNT_NUTRIME_MC656 }}
projectId: nutrime-mc656
4 changes: 4 additions & 0 deletions Imagens/C4.drawio.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
88 changes: 24 additions & 64 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ Ao alinhar dados nutricionais com esses objetivos globais, o projeto busca contr
1. Clone o repositório
```
git clone https://github.com/Palacio-dev/MC656.git
cd MC656/saude_e_bem_estar
cd MC656/nutri.me
```
2. Instale as Dependências
```
Expand All @@ -48,32 +48,19 @@ Ao alinhar dados nutricionais com esses objetivos globais, o projeto busca contr
```
npm run build
```
4. Execute
4. Agora faça as intalações necessarias para a api
```
npm start
cd ../api_tudogostoso
npm install
```
5. Abra um novo terminal e entre no diretório do backend
6. Agora você pode rodar os dois com o unico comando ao voltar na raiz do projeto
```
cd MC656/auth-api
```
6. Dê permissão ao usuário para executar CREATE_DATABASE no banco de dados Postgres
```
psql -h localhost -U postgres -p 5432 -c "ALTER ROLE test_user CREATEDB;"
```
7. Execute
```
npm run dev
```
8. Para verificar se os dados de autenticação foram armazenados no banco, execute
```
cd MC656/auth-api

PGPASSWORD=teste123 psql -h localhost -p 5432 -U test_user -d logindb
SELECT id, name, email FROM users ORDER BY id;
cd ..
npm start
```
8. Para rodar os testes, execute
```
cd MC656/saude_e_bem_estar
cd /nutri.me
npm test
```

Expand All @@ -89,7 +76,7 @@ O frontend segue o padrão MVVM, que separa a lógica de apresentação da lógi

Aqui está uma visão de como faremos a organização dos arquivos:
```
saude_e_bem_estar/src
nutri.me/src
├── components # Views
├── hooks # ViewModel (lógica)
├── pages # Telas principais
Expand All @@ -98,33 +85,27 @@ saude_e_bem_estar/src
└── types # Tipos próprios criados
```

**Backend — Clean Architecture**
**Backend — Firebase**

O backend foi desenvolvido seguindo os princípios da Clean Architecture, garantindo independência entre as camadas e facilitando a substituição de tecnologias.
No projeto para a estruturação do backend foi usado o Firebase (https://firebase.google.com/?hl=pt-br) para de forma pratica e rapida realizar a authenticação do usuario e salvar/resgatar dados necessarios. Além de permitir um facil deploy do nossa aplicação.

- **Entities (Domínio)**: Contém as regras de negócio fundamentais e entidades da aplicação.
- **Use Cases (Aplicação)**: Define os casos de uso e orquestra as regras do domínio.
- **Interface Adapters**: Faz a mediação entre o domínio e o mundo externo (bancos de dados, APIs, frameworks).
- **Frameworks & Drivers (Infraestrutura)**: Contém implementações específicas de persistência, serviços externos e detalhes técnicos.
- Firebase Auth: usando autenticação pelo google e manual com escrita de email e senha propria
- Firestore Database: estuturação dos nossos dados e criação das regras para quem altera e acessa esses dados

Aqui está uma exemplificação de como faremos a organização dos arquivos:
```
backend/
├── app/
│ ├── domain/ # Regra de negócio pura (Entidades + Interfaces de Repositório)
│ ├── use_cases/ # Casos de uso (application layer)
│ ├── interfaces/ # Adapters -> comunicação entre casos de uso e mundo externo
│ ├── infrastructure/ # Detalhes de tecnologia (não atinge o domínio)
│ └── core / # Regras compartilhadas (erros, helpers)
├── tests/ # Testes unitários e de integração
└── README.md
O backend foi isolado ao apenas se conectar com o frontend usando os codigos em model (indicado pela pasta services)

A pasta backend tem os scripts que permitiu extrair os dados de alimentos (tbca_clean) e criar o csv Alimentos, e em seguida com o script import.js foram enviados para o firebase.

**API tudo gostoso**

Como o site tudo gostoso aplamente conhecido para pesquisa de receitas, utilizamos a api criado no repositorio: https://github.com/carol-caires/receitas-web-scrapper
Para a sua utilização clonamos o repositorio na pasta api_tudogostos, realizando algumas alterações para que esteja atualizada e funcionando completamente com o nosso frontend.
Sendo que toda comunicação para a nossa aplicação é feita pelo model.

```
---

### Diagrama C4 (Contexto, Container, e Componentes)
![A4 - C4 drawio](https://github.com/user-attachments/assets/101353df-7748-4857-ade4-d145cf97195f)
![A4 - C4 drawio](./Imagens/C4.drawio.svg)

Para implementar a arquitetura proposta para Mobile App (frontend) cada um dos componentes abaixo deve ser implementado para cada uma das cinco features planejadas:

Expand All @@ -149,23 +130,6 @@ Para implementar a arquitetura proposta para Mobile App (frontend) cada um dos c
- Nutrição de Alimentos Model: solicita dados nutricionais de um alimento no banco, devolvendo-o ao Hook.
- Planejador de Refeições Model: envia e atualiza os planos de refeições do backend e recupera o cardápio salvo quando o usuário abre o app.

Para implementar a arquitetura proposta para o backend é necessário haver os componentes descritos abaixo:

* **Interface Adapters**: responsáveis por ser as portas de entrada do sistema, receber as requisições externas (do Mobile App e de outras APIs), validar os dados, traduzir os formatos e encaminar para use cases. Além disso, transformam a resposta dos use cases em formatos adequados ao envio para o cliente. Ex.:
- Controller recebe o nome de um alimento e aciona o caso de uso de consulta nutricional.
- Endpoint recebe uma receita marcada como favorita e aciona o caso de uso de salvamento.

* **Use cases**: Implementam ações específicas que o sistema executa como salvar receitas, buscar alimentos, gerar cardápios etc. Também contêm a lógica de aplicação e coordenam as interações entre Domain e Infrastructure. Ex.:
- Caso de uso para buscar cardápio recebe um objeto de cardápio, valida regras e chama o domínio e repositórios.
- Caso de uso para buscar valor nutricional recebe o nome do alimento e coordena a consulta ao repositório de nutrição.

* **Domain**: responsável por conter as regras de negócio puras além de definir entidades, regras de validação, cálculos e invariantes do domínio. Ex.:
- Entidade Cardapio validando se uma semana possui todas as refeições cadastradas.

* **Infrastructure**: Implementa acesso ao banco de dados, faz integração com serviços externos, faz o contato direto com PostgresSQL, DuckDB e API do TudoGostoso. Ex.:
- Adapter para chamar a API do TudoGostoso e transformar JSON em objetos internos.
- Implementação das receitas salvas no perfil de um usuário usando PostgreSQL.

---

### Padrão de Projeto — Strategy no Planejador de Refeições
Expand All @@ -189,9 +153,5 @@ Esse padrão facilita a extensibilidade e a personalização das estratégias se
### 📄 Licença
Este projeto é de uso acadêmico e está sujeito às diretrizes da disciplina MC656 da Unicamp oferecida no segundo semestre de 2025.

Importante que os dados utilizados nesse repositorio foram extraidos de https://github.com/carol-caires/receitas-web-scrapper e da pesquisa ([tbca da usp](https://www.tbca.net.br/base-dados/composicao_alimentos.php)), e se forem utilizados estão sujeito ás diretirzes impostas pelos reponsaveis de ambos os dados






28 changes: 28 additions & 0 deletions api_tudogostoso/Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
FROM ghcr.io/puppeteer/puppeteer:latest

# Volta para root para instalar dependências
USER root

WORKDIR /app

# Copiar package.json primeiro (boa prática de cache)
COPY package.json package-lock.json ./

# Dar permissão ao diretório
RUN mkdir -p /app/node_modules && \
chown -R pptruser:pptruser /app

# Instalar dependências como o usuário correto
USER pptruser
RUN npm install

# Copiar o restante do código
COPY --chown=pptruser:pptruser . .

ENV PUPPETEER_EXECUTABLE_PATH=/usr/bin/chromium
ENV NODE_ENV=production
ENV PORT=8080

EXPOSE 8080

CMD ["node", "index.js"]
Loading
Loading