# Stage 1: Build stage
FROM node:20-alpine AS builder

WORKDIR /app

# Copy package files
COPY package*.json ./

# Install all dependencies (including devDependencies)
RUN npm install

# Copy source code and config files
COPY . .

# Generate TSOA specs/routes and build the project
RUN npm run build

# Stage 2: Production stage
FROM node:20-alpine AS runner

WORKDIR /app

# Set production environment
ENV NODE_ENV=production

# Copy package files
COPY package*.json ./

# Install only production dependencies
RUN npm ci --only=production

# Copy built files from the builder stage
COPY --from=builder /app/dist ./dist
# If TSOA requires the generated routes to be in src/shared, copy them as well
# Copy the entire src directory if needed for TSOA routes or other assets
# Actually, dist/main.js should have everything if bundled, but TSOA routes are usually required at runtime
COPY --from=builder /app/src/shared/interfaces/http/tsoa/generated ./src/shared/interfaces/http/tsoa/generated

# Expose the application port
EXPOSE 3000

# Start the application
CMD ["npm", "start"]
