services:
  client-react-vite:
    build:
      context: ../05-example-web-application/client-react/
      dockerfile: ../../06-building-container-images/client-react/Dockerfile.3
    networks:
      - frontend
    ports:
      - 5173:5173
    volumes:
      - type: bind
        source: ../05-example-web-application/client-react/
        target: /usr/src/app/
      - type: volume
        target: /usr/src/app/node_modules 
      - type: bind
        source: ../08-running-containers/client-react/vite.config.js
        target: /usr/src/app/vite.config.js
    restart: unless-stopped
  api-node:
    build:
      context: ../05-example-web-application/api-node/
      dockerfile: ../../06-building-container-images/api-node/Dockerfile.9
      target: dev
    volumes:
      - type: bind
        source: ../05-example-web-application/api-node/
        target: /usr/src/app/
      - type: volume
        target: /usr/src/app/node_modules 
    init: true
    depends_on:
      - db
    environment:
      - DATABASE_URL=postgres://postgres:foobarbaz@db:5432/postgres
    networks:
      - frontend
      - backend
    ports:
      - "3000:3000"
    restart: unless-stopped
  api-golang:
    build:
      context: ../05-example-web-application/api-golang/
      dockerfile: ../../06-building-container-images/api-golang/Dockerfile.8
      target: dev
    volumes:
      - type: bind
        source: ../05-example-web-application/api-golang/
        target: /app/
    init: true
    depends_on:
      - db
    environment:
      - DATABASE_URL=postgres://postgres:foobarbaz@db:5432/postgres
    networks:
      - frontend
      - backend
    ports:
      - "8080:8080"
    restart: unless-stopped
  db:
    image: postgres:15.1-alpine
    volumes:
      - pgdata:/var/lib/postgresql/data
    environment:
      - POSTGRES_PASSWORD=foobarbaz
    networks:
      - backend
    ports:
      - 5432:5432
volumes:
  pgdata:
networks:
  frontend:
  backend: