# deal-api (core): HTTP-портал :5080 + gRPC-ингресс telegram-service :5082 (план Task 20; Ruling 12).
#
# КОНТЕКСТ СБОРКИ — корень репозитория: Deal.Api ссылается на проекты всего src/core (модули,
# Infrastructure, SharedKernel/Contracts) и на src/contracts/Deal.Proto.csproj (кодогенерация .proto,
# Task 1). Запуск из корня:  docker build -f src/core/Deal.Api/Dockerfile .
# Порт HTTP — env ASPNETCORE_URLS; порт ингресса — env GRPC_INGRESS_PORT (Program.cs), в compose.dev.yml 5082.
#
# Примечание о кэше слоёв: restore-слой копирует весь src/core (csproj-файлы отдельных проектов не
# вычленяются — у Deal.Api ~10 ProjectReference внутри каталога; для dev-compose это приемлемо).
# .dockerignore исключает **/bin и **/obj из контекста сборки.

# --- Этап сборки: restore + publish ---
FROM mcr.microsoft.com/dotnet/sdk:10.0 AS build
WORKDIR /repo

COPY src/contracts/ src/contracts/
COPY src/core/ src/core/
RUN dotnet restore src/core/Deal.Api/Deal.Api.csproj
RUN dotnet publish src/core/Deal.Api/Deal.Api.csproj -c Release -o /app/publish

# --- Runtime-этап ---
FROM mcr.microsoft.com/dotnet/aspnet:10.0 AS final
WORKDIR /app
EXPOSE 5080 5082
COPY --from=build /app/publish .

# grpc_health_probe — healthcheck контейнера (Ruling 12): gRPC-health ингресса (:5082) освобождён
# от service-token (см. IngressServiceTokenInterceptor), поэтому проба идёт без metadata.
COPY --from=ghcr.io/grpc-ecosystem/grpc-health-probe:v0.4.35 /ko-app/grpc-health-probe /bin/grpc_health_probe

# data/encryption.key (шифрование секретов) и LocalFileStorage data/attachments живут под ContentRoot
# (/app/data); каталог монтируется volume-ом deal_api_data из compose.dev.yml. В полном dev-стеке файлы
# идут в MinIO (Storage__Minio__* env, см. compose.dev.yml) — volume остаётся для ключа шифрования.

# Non-root: процесс работает пользователем deal (UID 10001); /app/data — каталог данных (volume).
# HOME=/tmp — рабочий каталог для временных/DP-файлов (совместимо с read_only root FS + tmpfs /tmp).
RUN useradd --uid 10001 --shell /usr/sbin/nologin --no-create-home deal \
    && mkdir -p /app/data \
    && chown -R deal:deal /app/data
ENV HOME=/tmp
USER deal

ENTRYPOINT ["dotnet", "Deal.Api.dll"]
