# Netflix Scraper API - Proje Özeti ## Proje Hakkında Netflix Scraper API, Netflix içerik sayfalarından film/dizi bilgilerini çeken bir backend servisidir. URL gönderilerek içerik bilgileri çekilir, önbelleğe alınır ve geri döndürülür. ## Neden Oluşturuldu? - **Otomatik İçerik Toplama**: Netflix URL'lerinden otomatik olarak içerik bilgisi çekmek - **Performans**: Redis cache ile tekrarlayan isteklerde hızlı yanıt - **Kalıcılık**: PostgreSQL ile verilerin kalıcı olarak saklanması - **Gerçek Zamanlı**: Socket.IO ile canlı ilerleme bildirimleri ## Teknoloji Yığını | Katman | Teknoloji | |--------|-----------| | Runtime | Node.js 20+ | | Framework | Express.js | | Database | PostgreSQL 16 | | Cache | Redis 7 | | Real-time | Socket.IO | | Scraper | Cheerio | | ORM | Prisma | ## Mimari ``` ┌─────────────────┐ │ Frontend │ │ (Web/Mobile) │ └────────┬────────┘ │ HTTP + API Key ▼ ┌─────────────────┐ ┌─────────────┐ │ Express API │────▶│ Redis │ │ (Port 3000) │ │ (Cache) │ └────────┬────────┘ └─────────────┘ │ ▼ ┌─────────────────┐ ┌─────────────┐ │ Scraper Service │────▶│ PostgreSQL │ │ (Cheerio) │ │ (Data) │ └─────────────────┘ └─────────────┘ ``` ## Veri Akışı 1. **İstek Alınır**: `POST /api/getinfo` endpoint'ine URL gönderilir 2. **Cache Kontrolü**: Redis'te veri var mı diye bakılır 3. **DB Kontrolü**: PostgreSQL'de veri var mı diye bakılır 4. **Scraping**: Netflix'ten veri çekilir (cache/DB'de yoksa) 5. **Kaydetme**: Veri DB'ye ve cache'e yazılır 6. **Yanıt**: JSON formatında veri döndürülür ## Önemli Kararlar ### ADR-001: Cheerio Seçimi Playwright yerine Cheerio seçildi. Başlangıç için yeterli, daha hafif ve hızlı. Gerekirse Playwright'a geçiş yapılabilir. ### ADR-002: Hybrid Cache Stratejisi Cache → DB → Netflix sıralaması ile veri alınır. Bu sayede: - En hızlı yanıt cache'ten gelir - Cache'te yoksa DB'den gelir - İlk istek hariç Netflix'e istek atılmaz ### ADR-003: Named API Keys Her frontend için ayrı API key kullanılır. Bu sayede: - Hangi frontend'in istek attığı takip edilebilir - Gerekirse tek bir frontend'in erişimi kapatılabilir ## Güncellemeler | Tarih | Güncelleme | |-------|-----------| | 2025-02-27 | Proje oluşturuldu | ## İlgili Dokümanlar - [API Dokümantasyonu](./api.md) - [Operasyon Notları](./ops.md) - [Socket Events](./socket-events.md)