first commit

This commit is contained in:
2026-02-28 02:44:41 +03:00
commit 97fb289fe7
70 changed files with 11928 additions and 0 deletions

82
doc/overview.md Normal file
View File

@@ -0,0 +1,82 @@
# 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)