services:
  api:
    build:
      context: .
      dockerfile: Dockerfile.dev
    container_name: lunarfront-api
    restart: unless-stopped
    ports:
      - "8000:8000"
    volumes:
      - ./packages:/app/packages
      - ./package.json:/app/package.json
      - /app/node_modules
      - /app/packages/backend/node_modules
      - /app/packages/shared/node_modules
    environment:
      DATABASE_URL: postgresql://lunarfront:lunarfront@postgres:5432/lunarfront
      REDIS_URL: redis://valkey:6379
      JWT_SECRET: dev-secret-do-not-use-in-production
      NODE_ENV: development
      PORT: "8000"
      HOST: "0.0.0.0"
    depends_on:
      postgres:
        condition: service_healthy
      valkey:
        condition: service_healthy

  postgres:
    image: postgres:16
    container_name: lunarfront-postgres
    restart: unless-stopped
    environment:
      POSTGRES_USER: lunarfront
      POSTGRES_PASSWORD: lunarfront
      POSTGRES_DB: lunarfront
    ports:
      - "5432:5432"
    volumes:
      - lunarfront-pgdata:/var/lib/postgresql/data
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U lunarfront"]
      interval: 5s
      timeout: 3s
      retries: 5

  valkey:
    image: valkey/valkey:8
    container_name: lunarfront-valkey
    restart: unless-stopped
    ports:
      - "6379:6379"
    volumes:
      - lunarfront-valkey:/data
    healthcheck:
      test: ["CMD", "valkey-cli", "ping"]
      interval: 5s
      timeout: 3s
      retries: 5

volumes:
  lunarfront-pgdata:
  lunarfront-valkey:
