# 美家卡智影 - 测试服部署配置
# ==============================
# 用法:
#   docker-compose -f docker-compose.test.yml up -d --build
#
# 包含: PostgreSQL + Redis + API + Scheduler
# 独立运行，不依赖外部网络或服务

services:
  db:
    image: postgres:15-alpine
    container_name: meijiaka-zy-db
    environment:
      POSTGRES_USER: postgres
      POSTGRES_PASSWORD: postgres
      POSTGRES_DB: meijiaka_zy
    volumes:
      - /opt/meijiaka-zy/data/postgres:/var/lib/postgresql/data
    ports:
      - "127.0.0.1:5432:5432"
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U postgres"]
      interval: 5s
      timeout: 5s
      retries: 5
    networks:
      - meijiaka-zy
    logging:
      driver: "json-file"
      options:
        max-size: "100m"
        max-file: "5"

  redis:
    image: redis:7-alpine
    container_name: meijiaka-zy-redis
    volumes:
      - /opt/meijiaka-zy/data/redis:/data
    ports:
      - "127.0.0.1:6379:6379"
    healthcheck:
      test: ["CMD", "redis-cli", "ping"]
      interval: 5s
      timeout: 5s
      retries: 5
    networks:
      - meijiaka-zy
    logging:
      driver: "json-file"
      options:
        max-size: "100m"
        max-file: "5"

  api:
    build:
      context: .
      dockerfile: Dockerfile
    container_name: meijiaka-zy-api
    env_file: .env
    environment:
      TZ: Asia/Shanghai
      LOG_LEVEL: INFO
    ports:
      - "8081:8000"
    depends_on:
      db:
        condition: service_healthy
      redis:
        condition: service_healthy
    command: >
      sh -c "alembic upgrade head && uvicorn app.main:app --host 0.0.0.0 --port 8000"
    networks:
      - meijiaka-zy
    restart: unless-stopped
    logging:
      driver: "json-file"
      options:
        max-size: "100m"
        max-file: "5"
    healthcheck:
      test: ["CMD-SHELL", "python -c \"import urllib.request; urllib.request.urlopen('http://localhost:8000/api/v1/system/health')\""]
      interval: 30s
      timeout: 10s
      retries: 3
      start_period: 10s

  scheduler:
    build:
      context: .
      dockerfile: Dockerfile
    container_name: meijiaka-zy-scheduler
    env_file: .env
    environment:
      TZ: Asia/Shanghai
      LOG_LEVEL: INFO
    depends_on:
      db:
        condition: service_healthy
      redis:
        condition: service_healthy
    command: python -m app.scheduler.main
    networks:
      - meijiaka-zy
    restart: unless-stopped
    logging:
      driver: "json-file"
      options:
        max-size: "100m"
        max-file: "5"
    healthcheck:
      test: ["CMD-SHELL", "python -c \"import asyncio, time; from app.core.redis_client import get_redis_client; r=get_redis_client(); t=asyncio.run(r.get('scheduler:heartbeat')); t=float(t) if t else 0; assert t>0 and time.time()-t<30, 'scheduler heartbeat stale'\""]
      interval: 30s
      timeout: 10s
      retries: 3
      start_period: 30s

networks:
  meijiaka-zy:
    driver: bridge
