# iddaai image proxy (Cloudflare Worker + R2)

Takım / lig / ülke görsellerini R2'den servis eden lazy-fill proxy.
İstek akışı: **edge cache → R2 → upstream (mackolik) → R2'ye yaz**.
Bucket kendi kendine dolar; bir görsel R2'ye girdikten sonra upstream
kaldırsa bile kalıcıdır.

## Canlı kurulum (2026-06-10)

- Worker: `iddaai-image-proxy` (dashboard üzerinden deploy edildi)
- Bucket: `iddaai-images` (binding adı: `BUCKET`)
- Domain: `https://files.iddaai.com`
- BE env: `IMAGE_BASE_URL=https://files.iddaai.com` (.gitea/workflows/deploy.yml)

Dashboard'daki kod ile `src/index.ts` aynı mantıktır (dashboard'da JS,
burada TS). Kod değişikliği gerekirse ikisini senkron tut veya
`npm run deploy` ile buradan deploy et.

## URL şeması (upstream ile birebir aynı)

```
GET /teams/<teamId>           → takım logosu
GET /competitions/<leagueId>  → lig logosu
GET /areas/<countryId>        → ülke bayrağı
```

## CLI ile geliştirme / deploy

```bash
cd workers/image-proxy
npm install
npm run dev        # lokal test (miniflare, lokal R2 simülasyonu)
npm run typecheck
npx wrangler login # ilk seferde
npm run deploy
```

## Bucket'ı önceden doldurma (opsiyonel)

```bash
../../scripts/warm-image-cache.sh https://files.iddaai.com
```

Prod sunucuda çalışır; DB'deki tüm takım/lig/ülke ID'lerini Worker
üzerinden bir kez ister, Worker her birini R2'ye yazar (~20K istek,
~200 MB). Çalıştırılmasa da bucket trafikle kendi kendine dolar.

## Maliyet

R2 free tier: 10 GB depolama + sınırsız egress. Workers free tier:
100K istek/gün. Bu ölçekte aylık maliyet: 0.
