# Docker Compose — Node.js app + MySQL
# Secrets and ports come from .env (copy from .env.example first)
# MySQL starts empty (root only). Create DB/user/tables via SQLyog — see SETUP_DATABASE.md

services:
  app:
    build:
      context: .
      # Use host DNS during build (avoids WSL "EAI_AGAIN registry.npmjs.org" errors)
      network: host
    image: assignment-docker-node
    container_name: assignment-docker-app
    ports:
      - "${APP_PORT:-3000}:3000"
    env_file:
      - .env
    environment:
      DB_HOST: ${DB_HOST:-db}
      DB_NAME: ${DB_NAME:-userdb}
      DB_USER: ${DB_USER:-appuser}
      DB_PASS: ${DB_PASS:-apppass}
      PORT: ${PORT:-3000}
    volumes:
      # Named volume (not a Windows host bind) — same idea as manual docker volume create
      - assignment-docker-uploads:/app/uploads
    depends_on:
      - db
    networks:
      - assignment-docker-net

  db:
    image: mysql:8.0
    container_name: assignment-docker-db
    environment:
      MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD:-rootpass}
    volumes:
      - assignment-docker-mysql:/var/lib/mysql
      # Auto-create database + tables on a fresh volume (runs once)
      - ./database.sql:/docker-entrypoint-initdb.d/01-database.sql:ro
    ports:
      - "${DB_PORT:-3307}:3306"
    networks:
      assignment-docker-net:
        aliases:
          - db

networks:
  assignment-docker-net:
    name: assignment-docker-net
    driver: bridge

volumes:
  assignment-docker-mysql:
    name: assignment-docker-mysql
  assignment-docker-uploads:
    name: assignment-docker-uploads
