# Etapa 1: Construção
FROM node:20-alpine AS builder

# Instala o openssl
RUN apk add --no-cache openssl curl python3 make g++ flex bison

# Diretório de trabalho no container
WORKDIR /app

# Copia o package.json e yarn.lock para o diretório de trabalho
COPY package*.json ./

# Instala as dependências
RUN yarn install

# Copia todo o código da aplicação para o diretório de trabalho
COPY . .

# Compila a aplicação
RUN yarn build

# Etapa 2: Produção
FROM node:20-alpine AS production

# Update image
RUN apk update && apk upgrade --available && rm /var/cache/apk/*

# Diretório de trabalho no container
WORKDIR /app

# Copia apenas as dependências de produção do builder
COPY --from=builder /app/node_modules ./node_modules

# Copia a aplicação compilada do builder
COPY --from=builder /app/dist ./dist

# Copia outros arquivos necessários para a produção
COPY package*.json ./

# Expõe a porta em que a aplicação irá rodar
EXPOSE 3000

# Define o entrypoint
ENTRYPOINT ["node", "dist/app.js"]