# Bookibra 📚

**Bookibra**, Amazon'dan kitap verilerini çeken, barkod tarama özelliği olan ve kişisel kitap kütüphanesi yönetimi sağlayan modern bir full-stack web uygulamasıdır.

## 📋 Proje Hakkında

Bookibra, kitap severler için geliştirilmiş bir platformdur. Ana özellikleri:

- 🔍 **Kitap Arama**: ISBN veya başlık ile kitap arama
- 📸 **Barkod Tarama**: Kamera ile ISBN barkod tarama
- 🌍 **Çoklu Dil**: Türkçe ve İngilizce Amazon sitelerinden veri çekme
- 💾 **Kütüphane Yönetimi**: Kitapları kaydetme ve organize etme
- ⚡ **Önbellekleme**: Redis ile hızlı erişim

## 🏗️ Mimari

```
┌─────────────┐      ┌─────────────┐      ┌─────────────┐
│  Frontend   │─────▶│   Backend   │─────▶│  Amazon     │
│  (React)    │      │  (Express)  │      │  Scraping   │
└─────────────┘      └─────────────┘      └─────────────┘
                            │
        ┌───────────────────┼───────────────────┐
        ▼                   ▼                   ▼
┌─────────────┐      ┌─────────────┐      ┌─────────────┐
│   Redis     │      │ PostgreSQL  │      │  Socket.IO  │
│  (Cache)    │      │  (Users)    │      │ (WebSocket) │
└─────────────┘      └─────────────┘      └─────────────┘
```

## 🚀 Hızlı Başlangıç

### Gereksinimler

- Docker ve Docker Compose
- Node.js 20+ (Docker olmadan geliştirme için)

### Docker ile Başlatma

1. Projeyi klonlayın:
```bash
git clone https://github.com/yourusername/bookibra.git
cd bookibra
```

2. Ortam değişkenlerini yapılandırın:
```bash
cp .env.example .env
# .env dosyasını düzenleyin (JWT_SECRET vb.)
```

3. Tüm servisleri başlatın:
```bash
docker-compose up --build
```

4. Tarayıcıda açın:
- Frontend: http://localhost:5173
- Backend API: http://localhost:8080
- Health Check: http://localhost:8080/health

### Manuel Kurulum (Development)

#### Backend

```bash
# Backend dizininde
npm install
npm run dev
```

#### Frontend

```bash
# Frontend dizininde
npm install
npm run dev
```

## 📁 Proje Yapısı

```
bookibra/
├── doc/                    # Dokümantasyon
├── frontend/               # React Frontend
│   ├── src/
│   │   ├── components/     # React bileşenleri
│   │   ├── pages/          # Sayfalar
│   │   ├── context/        # Context API
│   │   └── main.jsx        # Giriş noktası
│   └── package.json
├── src/                    # Backend
│   ├── config/             # Yapılandırma
│   ├── controllers/        # Endpoint kontrolcüleri
│   ├── middleware/         # Express middleware
│   ├── routes/             # API rotaları
│   ├── services/           # İş mantığı
│   └── utils/              # Yardımcı fonksiyonlar
├── docker-compose.yml      # Docker orchestration
├── Dockerfile              # Backend Docker image
└── package.json
```

## 🔧 Ortam Değişkenleri

```bash
# Backend (.env)
NODE_ENV=development
PORT=8080
GEMINI_API_KEY=your_gemini_key      # İsteğe bağlı
ALLOWED_ORIGINS=*
REQUEST_LOGGING=true
REDIS_URL=redis://redis:6379
ISBN_CACHE_TTL_SECONDS=21600
JWT_SECRET=please_change_me         # Production'da değiştirin!
JWT_EXPIRES_IN=1h

# PostgreSQL
POSTGRES_HOST=postgres
POSTGRES_PORT=5432
POSTGRES_DB=bookibra
POSTGRES_USER=bookibra
POSTGRES_PASSWORD=bookibra

# Frontend (frontend/.env)
VITE_API_BASE_URL=http://localhost:8080
```

## 📡 API Endpoint'leri

### Kitap Arama

| Endpoint | Method | Açıklama |
|----------|--------|----------|
| `/api/books/isbn/:isbn` | GET | ISBN ile kitap arama |
| `/api/books/title` | GET | Başlık ile kitap arama |
| `/api/books/filter` | GET | Başlık ve yıl ile filtreleme |

**Örnek:**
```bash
# ISBN ile arama
curl "http://localhost:8080/api/books/isbn/9786053717355?locales=tr,en"

# Başlık ile arama
curl "http://localhost:8080/api/books/title?title=Suç%20ve%20Ceza&locales=tr"

# Tarih filtreleme
curl "http://localhost:8080/api/books/filter?title=Sapiens&published=2011"
```

### Kimlik Doğrulama

| Endpoint | Method | Açıklama |
|----------|--------|----------|
| `/api/auth/register` | POST | Kayıt olma |
| `/api/auth/login` | POST | Giriş yapma |
| `/api/auth/profile` | GET | Profil bilgisi (Auth required) |

**Örnek:**
```bash
# Kayıt olma
curl -X POST http://localhost:8080/api/auth/register \
  -H "Content-Type: application/json" \
  -d '{"email":"user@example.com","password":"password123"}'

# Giriş yapma
curl -X POST http://localhost:8080/api/auth/login \
  -H "Content-Type: application/json" \
  -d '{"email":"user@example.com","password":"password123"}'
```

## 🎨 Kullanım

### Kitap Arama

1. **Add Books** sayfasına gidin
2. Arama kutusuna kitap adını yazın
3. Ara butonuna tıklayın
4. Sonuçları görüntüleyin ve kütüphanenize ekleyin

### Barkod Tarama

1. **Add Books** sayfasında barkod ikonuna tıklayın
2. Kitabın barkodunu kameraya gösterin
3. Kitap bilgileri otomatik getirilecek

### Kütüphane Yönetimi

1. **My Books** sayfasına gidin
2. Kayıtlı kitaplarınızı görüntüleyin
3. Detayları görmek için kitaba tıklayın
4. Silmek için "Remove from My Books" butonuna tıklayın

## 🛠️ Geliştirme

### Backend Development

```bash
npm run dev    # nodemon ile development server
npm start      # Production server
```

### Frontend Development

```bash
npm run dev    # Vite development server
npm run build  # Production build
npm run preview  # Build preview
```

### Docker Development

```bash
# Tüm servisleri başlat
docker-compose up

# Arka planda çalıştır
docker-compose up -d

# Logları görüntüle
docker-compose logs -f

# Servisleri durdur
docker-compose down

# Volumes ile birlikte temizle
docker-compose down -v
```

## 📚 Dokümantasyon

Detaylı dokümantasyon için `/doc` dizinine bakın:

- [Proje Genel Bakış](./doc/proje-genel-bakis.md) - Proje hakkında genel bilgi
- [Backend Yapısı](./doc/backend-yapisi.md) - Backend detayları
- [Frontend Yapısı](./doc/frontend-yapisi.md) - Frontend detayları
- [Teknoloji Yığını](./doc/teknoloji-yigini.md) - Kullanılan teknolojiler

## 🔐 Güvenlik

- JWT token tabanlı kimlik doğrulama
- bcrypt ile şifre hashleme (10 rounds)
- CORS yapılandırması
- Input validation (express-validator)

**Production için:**
- `JWT_SECRET` ortam değişkenini güçlü bir değerle değiştirin
- HTTPS kullanın
- Rate limiting ekleyin
- Güvenlik header'larını ekleyin (helmet)

## 🐛 Sorun Giderme

### Redis Bağlantı Hatası
```bash
# Redis container'ının çalıştığından emin olun
docker-compose ps redis

# Redis loglarını kontrol edin
docker-compose logs redis
```

### PostgreSQL Bağlantı Hatası
```bash
# PostgreSQL container'ını kontrol edin
docker-compose ps postgres

# Database'i yeniden oluşturun
docker-compose down -v
docker-compose up
```

### Frontend API Erişim Hatası
```bash
# frontend/.env dosyasında VITE_API_BASE_URL'in doğru olduğundan emin olun
# Docker kullanıyorsanız: http://localhost:8080
```

## 📝 Lisans

ISC

## 🤝 Katkıda Bulunma

Katkılarınızı bekliyoruz! Lütfen:

1. Fork yapın
2. Feature branch oluşturun (`git checkout -b feature/amazing-feature`)
3. Değişikliklerinizi commit edin (`git commit -m 'feat: Add amazing feature'`)
4. Branch'inizi push edin (`git push origin feature/amazing-feature`)
5. Pull Request açın

## 👥 Geliştiriciler

- Bookibra Development Team

---

**Not**: Bu proje AI agent'ların projeyi daha iyi anlaması için detaylı dokümantasyon ile geliştirilmiştir. Dokümantasyon `/doc` dizininde Türkçe olarak bulunabilir.
