# Upstream Data HTTP service (FastAPI + uvicorn).
# Build: docker build -t upstream-data-api .
# Run:   docker run -p 8080:8080 --env-file .env upstream-data-api
# Configuration is read from the environment by build_production_app (see asgi.py).
FROM python:3.12-slim AS base

ENV PYTHONUNBUFFERED=1 \
    PYTHONDONTWRITEBYTECODE=1 \
    UV_COMPILE_BYTECODE=1 \
    UV_LINK_MODE=copy

# uv for fast, reproducible installs from the lockfile.
COPY --from=ghcr.io/astral-sh/uv:latest /uv /usr/local/bin/uv

WORKDIR /app

# Install dependencies first (cached layer), without the project, dev deps excluded.
COPY pyproject.toml uv.lock README.md ./
RUN uv sync --frozen --no-install-project --no-dev

# Install the project itself.
COPY src ./src
COPY priors ./priors
RUN uv sync --frozen --no-dev

# Run as a non-root user.
RUN useradd --create-home --uid 10001 appuser && chown -R appuser /app
USER appuser

EXPOSE 8080
# Shell form so ${PORT} (set by Cloud Run / Railway) is honored, defaulting to 8080.
CMD uv run --no-dev uvicorn upstream_data.service.asgi:app --host 0.0.0.0 --port ${PORT:-8080}
