# {{projectName}} full-stack DEV docker compose.
#
# Boots Postgres + apps with hot-reload. Each app container runs as
# the HOST user (via `user: ${HOST_UID}:${HOST_GID}`) so files written
# into the bind-mounted workspace land owned by you, not root. Without
# this, switching between docker dev and native pnpm dev leaves
# permission-denied errors on the cached vite deps.
#
# The pnpm-prebaked dev image (docker/dev.Dockerfile) is built once
# on first `up`; subsequent `up` calls reuse the cached layer.
#
# Prereqs on the host BEFORE running this:
#   1. pnpm install in the project root (deps need to exist on host
#      because they're mounted in)
#   2. .env in place — see .env.example
#
# Run:
#   pnpm dev:docker        # wraps `HOST_UID=... HOST_GID=... docker compose up`
#
# Native-pnpm-dev alternative (faster HMR, no container overhead):
#   pnpm dev:hybrid
#
# As you add apps to apps/, copy a service block and bump the port.

x-node-defaults: &node-defaults
  build:
    context: ./
    dockerfile: docker/dev.Dockerfile
  image: {{projectName}}-dev:latest
  user: "${HOST_UID:-1000}:${HOST_GID:-1000}"
  volumes:
    - ./:/workspace:cached
  depends_on:
    postgres:
      condition: service_healthy

services:
  postgres:
    image: postgres:17-alpine
    container_name: {{projectName}}-postgres
    restart: unless-stopped
    environment:
      POSTGRES_USER: app
      POSTGRES_PASSWORD: app
      POSTGRES_DB: {{projectNameSnake}}
    ports:
      - "5433:5432"
    command:
      - "postgres"
      - "-c"
      - "wal_level=logical"
      - "-c"
      - "max_wal_senders=4"
      - "-c"
      - "max_replication_slots=4"
    volumes:
      - {{projectName}}-pgdata:/var/lib/postgresql/data
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U app -d {{projectNameSnake}}"]
      interval: 2s
      timeout: 2s
      retries: 10

  api:
    <<: *node-defaults
    container_name: {{projectName}}-api-dev
    working_dir: /workspace/apps/{{projectName}}/api
    command: pnpm voltro dev .
    environment:
      NODE_ENV: development
      HOME: /tmp
      DB_URL: postgres://app:app@postgres:5432/{{projectNameSnake}}
      VOLTRO_SESSION_SECRET: ${VOLTRO_SESSION_SECRET:-dev-only-secret-please-rotate-in-prod}
    ports:
      - "4000:4000"

  web:
    <<: *node-defaults
    container_name: {{projectName}}-web-dev
    working_dir: /workspace/apps/{{projectName}}/web
    command: pnpm voltro dev .
    environment:
      NODE_ENV: development
      HOME: /tmp
    ports:
      - "5173:5173"

volumes:
  {{projectName}}-pgdata:
