x-app-image: &app-image
  image: registry.cn-hangzhou.aliyuncs.com/pingcap-ee/tidb-community-slack:${IMAGE_TAG:-latest}

services:
  app:
    <<: *app-image
    container_name: slack-data-collector-app
    env_file:
      - .env
    command: >
      sh -c "uv run alembic -c app/alembic.ini upgrade head &&
             uv run fastapi run app/main.py --host 0.0.0.0 --port 8088"
    ports:
      - "8088:8088"
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:8088/health"]
      interval: 30s
      timeout: 10s
      retries: 3
      start_period: 10s
    depends_on:
      - redis
    restart: unless-stopped

  celery_worker:
    <<: *app-image
    container_name: slack-data-collector-worker
    env_file:
      - .env
    command: uv run celery -A app.celery_app:celery_app worker -l info
    depends_on:
      - redis
    restart: unless-stopped

  celery_beat:
    <<: *app-image
    container_name: slack-data-collector-beat
    env_file:
      - .env
    command: uv run celery -A app.celery_app:celery_app beat -l info
    depends_on:
      - redis
    restart: unless-stopped

  redis:
    image: redis:8-alpine
    container_name: slack-data-collector-redis
    restart: unless-stopped
