# FROM ist ein Befehl, der das Basis-Image für den Docker-Container angibt. 
# In diesem Fall wird das offizielle Node.js-Image in der Version 22 auf Alpine Linux verwendet, 
#was eine schlanke und effiziente Umgebung für die Ausführung von Node.js-Anwendungen bietet.
FROM node:22-alpine

# Das Arbeitsverzeichnis im Container wird auf /app gesetzt. Alle folgenden Befehle werden relativ zu diesem Verzeichnis ausgeführt.
# Dies bezieht sich auf die Struktur des Containers und nicht auf die Struktur des Host-Systems. 
#Es ist wichtig, dass die Dateien, die in den Container kopiert werden, relativ zu diesem Arbeitsverzeichnis angegeben werden.
WORKDIR /app

# COPY ist ein Befehl, der Dateien oder Verzeichnisse vom Host-System in das Dateisystem des Containers kopiert.
COPY package.json package-lock.json ./
RUN npm ci

# Hier wird das prisma-Verzeichnis, das die Prisma-Schema-Datei enthält, in den Container kopiert.
# Nachdem die Prisma-Schema-Datei in den Container kopiert wurde, wird der Befehl "npx prisma generate" ausgeführt,
# um die Prisma-Client-Bibliothek basierend auf dem Schema zu generieren.
# Kopiere Prisma-Konfig, damit Prisma 7 die Datasource-URL findet
COPY prisma.config.ts ./prisma.config.ts
COPY prisma ./prisma
# Explizit die Config angeben (v7)
# Dummy-URL nur für den Build, Prisma verbindet sich dabei nicht
ARG PRISMA_DUMMY_DATABASE_URL="postgresql://user:pass@localhost:5432/db?schema=public"
ENV DATABASE_URL=$PRISMA_DUMMY_DATABASE_URL
RUN ./node_modules/.bin/prisma generate --schema=./prisma/schema.prisma --config=./prisma.config.ts

# Nachdem die Abhängigkeiten installiert wurden, werden alle Dateien aus dem aktuellen Verzeichnis des Host-Systems 
#(wo sich die Dockerfile befindet) in das Arbeitsverzeichnis des Containers kopiert.
COPY . .

# EXPOSE ist ein Befehl, der angibt, dass der Container auf einem bestimmten Port lauscht.
EXPOSE 3000

# CMD ist ein Befehl, der den Standardbefehl angibt, der ausgeführt wird, wenn der Container gestartet wird.
# z.B. hier wird "npm start" ausgeführt, um die Node.js-Anwendung zu starten, wenn der Container läuft.
CMD ["npm", "start"]
