docs: proje dokümantasyonunu ekle
README.md ve detaylı teknik dokümantasyon dosyaları (genel bakış, backend yapısı, frontend yapısı, teknoloji yığını) eklendi.
This commit is contained in:
299
README.md
Normal file
299
README.md
Normal file
@@ -0,0 +1,299 @@
|
||||
# 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.
|
||||
351
doc/backend-yapisi.md
Normal file
351
doc/backend-yapisi.md
Normal file
@@ -0,0 +1,351 @@
|
||||
# Bookibra - Backend Dokümantasyonu
|
||||
|
||||
## Backend Genel Bakış
|
||||
|
||||
Backend, **Node.js** ve **Express.js** kullanılarak geliştirilmiş REST API sunucusudur. Amazon kitap verilerini scraping eder, kullanıcı kimlik doğrulaması yönetir ve önbellekleme sağlar.
|
||||
|
||||
## Teknoloji Yığını
|
||||
|
||||
| Teknoloji | Versiyon | Kullanım Amacı |
|
||||
|-----------|----------|----------------|
|
||||
| Express | ^5.1.0 | Web framework |
|
||||
| Node.js | - | Runtime environment |
|
||||
| PostgreSQL | 8.16.3 | Kullanıcı veritabanı |
|
||||
| Redis (ioredis) | ^5.8.2 | Önbellekleme |
|
||||
| Socket.IO | ^4.8.1 | WebSocket desteği |
|
||||
| JWT | ^9.0.2 | Kimlik doğrulama |
|
||||
| bcrypt | ^6.0.0 | Şifre hashleme |
|
||||
| Axios | ^1.13.2 | HTTP istekleri |
|
||||
| Cheerio | ^1.1.2 | HTML parsing |
|
||||
|
||||
## Dizin Yapısı
|
||||
|
||||
```
|
||||
src/
|
||||
├── config/
|
||||
│ ├── env.js # Ortam değişkenleri yapılandırması
|
||||
│ ├── services.js # Redis ve PostgreSQL bağlantıları
|
||||
│ └── socket.js # Socket.IO yapılandırması
|
||||
├── controllers/
|
||||
│ ├── authController.js # Kimlik doğrulama endpoint'leri
|
||||
│ └── bookController.js # Kitap arama endpoint'leri
|
||||
├── middleware/
|
||||
│ ├── auth.js # JWT doğrulama middleware
|
||||
│ ├── errorHandler.js # Hata yakalama middleware
|
||||
│ ├── notFound.js # 404 middleware
|
||||
│ └── requestLogger.js # İstek loglama middleware
|
||||
├── routes/
|
||||
│ ├── authRoutes.js # /api/auth rotaları
|
||||
│ └── bookRoutes.js # /api/books rotaları
|
||||
├── services/
|
||||
│ ├── amazonService.js # Amazon scraping iş mantığı
|
||||
│ ├── cacheService.js # Redis önbellekleme
|
||||
│ └── userService.js # Kullanıcı işlemleri
|
||||
├── utils/
|
||||
│ ├── isbn.js # ISBN doğrulama ve normalizasyon
|
||||
│ ├── logger.js # Loglama yardımcıları
|
||||
│ ├── mediaCache.js # Medya önbellekleme
|
||||
│ └── request.js # İstek parametre çözümleme
|
||||
├── validators/
|
||||
│ └── authValidators.js # İstek doğrulama kuralları
|
||||
├── app.js # Express uygulaması
|
||||
└── server.js # HTTP sunucusu
|
||||
```
|
||||
|
||||
## API Endpoint'leri
|
||||
|
||||
### Sağlık Kontrolü
|
||||
|
||||
```
|
||||
GET /health
|
||||
```
|
||||
|
||||
**Cevap**: `{"status": "ok", "timestamp": "2026-02-10T..."}`
|
||||
|
||||
### Kitap Endpoint'leri
|
||||
|
||||
#### ISBN ile Arama
|
||||
|
||||
```
|
||||
GET /api/books/isbn/:isbn
|
||||
```
|
||||
|
||||
**Query Parametreleri:**
|
||||
- `locales` (string): Amazon siteleri (örn: "tr,en" veya "tr")
|
||||
- `withGemini` (boolean): Gemini AI entegrasyonu
|
||||
- `limit` (number): Sonuç sayısı limiti
|
||||
|
||||
**Örnek:**
|
||||
```
|
||||
GET /api/books/isbn/9786053717355?locales=tr,en&withGemini=false&limit=3
|
||||
```
|
||||
|
||||
**Cevap:**
|
||||
```json
|
||||
{
|
||||
"isbn": "9786053717355",
|
||||
"normalizedIsbn": "9786053717355",
|
||||
"locales": ["tr", "en"],
|
||||
"includeGemini": false,
|
||||
"data": {
|
||||
"tr": {
|
||||
"title": "Suç ve Ceza",
|
||||
"authorName": "Fyodor Dostoyevski",
|
||||
"isbn": "9786053717355",
|
||||
"thumbImage": "https://...",
|
||||
"page": 752,
|
||||
"rate": 4.5,
|
||||
"publisher": "İthaki Yayınları"
|
||||
},
|
||||
"en": { ... }
|
||||
},
|
||||
"cacheHit": false,
|
||||
"cachedAt": "2026-02-10T..."
|
||||
}
|
||||
```
|
||||
|
||||
#### Başlık ile Arama
|
||||
|
||||
```
|
||||
GET /api/books/title?title={kitap-adi}
|
||||
```
|
||||
|
||||
**Query Parametreleri:**
|
||||
- `title` (required): Kitap başlığı
|
||||
- `locales` (optional): Amazon siteleri
|
||||
- `withGemini` (optional): Gemini AI entegrasyonu
|
||||
- `limit` (optional): Sonuç limiti (default: 3)
|
||||
|
||||
**Örnek:**
|
||||
```
|
||||
GET /api/books/title?title=Su%C3%A7%20ve%20Ceza&locales=tr&limit=5
|
||||
```
|
||||
|
||||
#### Başlık ve Tarihe Göre Filtreleme
|
||||
|
||||
```
|
||||
GET /api/books/filter?title={kitap-adi}&published={yil}
|
||||
```
|
||||
|
||||
**Query Parametreleri:**
|
||||
- `title` (required): Kitap başlığı
|
||||
- `published` (required): Yayın yılı
|
||||
- `locales`, `withGemini`, `limit`: ISBN aramasıyla aynı
|
||||
|
||||
**Örnek:**
|
||||
```
|
||||
GET /api/books/filter?title=Sapiens&published=2011&locales=en
|
||||
```
|
||||
|
||||
### Kimlik Doğrulama Endpoint'leri
|
||||
|
||||
#### Kayıt Olma
|
||||
|
||||
```
|
||||
POST /api/auth/register
|
||||
```
|
||||
|
||||
**İstek Gövdesi:**
|
||||
```json
|
||||
{
|
||||
"email": "ornek@email.com",
|
||||
"password": "sifre123"
|
||||
}
|
||||
```
|
||||
|
||||
**Cevap:**
|
||||
```json
|
||||
{
|
||||
"token": "eyJhbGciOiJIUzI1NiIs...",
|
||||
"user": {
|
||||
"id": "uuid",
|
||||
"email": "ornek@email.com"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
#### Giriş Yapma
|
||||
|
||||
```
|
||||
POST /api/auth/login
|
||||
```
|
||||
|
||||
**İstek Gövdesi:** Kayıt olma ile aynı
|
||||
|
||||
**Cevap:** Kayıt olma ile aynı
|
||||
|
||||
#### Profil Bilgisi
|
||||
|
||||
```
|
||||
GET /api/auth/profile
|
||||
```
|
||||
|
||||
**Header:** `Authorization: Bearer {token}`
|
||||
|
||||
**Cevap:**
|
||||
```json
|
||||
{
|
||||
"user": {
|
||||
"id": "uuid",
|
||||
"email": "ornek@email.com"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## Middleware Yapısı
|
||||
|
||||
### 1. Auth Middleware (`src/middleware/auth.js`)
|
||||
|
||||
JWT token doğrulaması yapar.
|
||||
|
||||
```javascript
|
||||
// Kullanıcı
|
||||
req.user = { id: decoded.sub, email: decoded.email }
|
||||
```
|
||||
|
||||
### 2. Error Handler Middleware (`src/middleware/errorHandler.js`)
|
||||
|
||||
Hataları yakalar ve standart formatta döner.
|
||||
|
||||
```javascript
|
||||
// Cevap formatı
|
||||
res.status(error.status || 500).json({
|
||||
message: error.message || 'Sunucu hatası'
|
||||
})
|
||||
```
|
||||
|
||||
### 3. Request Logger Middleware (`src/middleware/requestLogger.js`)
|
||||
|
||||
Her isteği loglar. Ortam değişkeni ile kontrol edilir:
|
||||
- `REQUEST_LOGGING=true` → Aktif
|
||||
|
||||
### 4. Not Found Middleware (`src/middleware/notFound.js`)
|
||||
|
||||
Tanımsız rotalar için 404 döner.
|
||||
|
||||
## Servis Katmanı
|
||||
|
||||
### Amazon Service (`src/services/amazonService.js`)
|
||||
|
||||
Amazon'dan kitap verisi çekme iş mantığı.
|
||||
|
||||
**Ana Fonksiyonlar:**
|
||||
- `getBooksByIsbn(isbn, locales, includeGemini)`: ISBN ile arama
|
||||
- `searchBooksByTitle({ title, locales, includeGemini, limit })`: Başlık ile arama
|
||||
- `searchBooksByTitleAndDate(...)`: Başlık ve tarih ile arama
|
||||
|
||||
**Dış Bağımlılıklar:**
|
||||
- `szbk-amazon-book-search`: Amazon scraping kütüphanesi
|
||||
|
||||
### Cache Service (`src/services/cacheService.js`)
|
||||
|
||||
Redis ile önbellekleme iş mantığı.
|
||||
|
||||
**Cache Anahtar Formatları:**
|
||||
- ISBN: `book:isbn:{isbn}:loc={tr,en}:gem={0|1}`
|
||||
- Title: `book:title:q={title}:loc={...}:gem={...}:limit={n}`
|
||||
- Filter: `book:filter:q={title}:pub={year}:loc={...}:gem={...}:limit={n}`
|
||||
|
||||
**Cache TTL:** 6 saat (21600 saniye)
|
||||
|
||||
### User Service (`src/services/userService.js`)
|
||||
|
||||
PostgreSQL ile kullanıcı işlemleri.
|
||||
|
||||
**Veritabanı Tablosu:**
|
||||
```sql
|
||||
CREATE TABLE users (
|
||||
id VARCHAR(36) PRIMARY KEY,
|
||||
email VARCHAR(255) UNIQUE NOT NULL,
|
||||
password_hash TEXT NOT NULL,
|
||||
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
|
||||
);
|
||||
```
|
||||
|
||||
**Ana Fonksiyonlar:**
|
||||
- `ensureUserTable()`: Tablo oluşturma
|
||||
- `createUser({ email, password })`: Yeni kullanıcı
|
||||
- `validateCredentials({ email, password })`: Giriş doğrulama
|
||||
- `buildAuthResponse(user)`: Token ve kullanıcı bilgisi
|
||||
|
||||
## Socket.IO Entegrasyonu
|
||||
|
||||
WebSocket bağlantıları için Socket.IO kullanılır.
|
||||
|
||||
**Yapılandırma (`src/config/socket.js`):**
|
||||
```javascript
|
||||
// Bağlantı eventi
|
||||
io.on('connection', (socket) => {
|
||||
socket.emit('connection:ack', {
|
||||
message: 'Bookibra soket servisine hos geldiniz.'
|
||||
});
|
||||
});
|
||||
```
|
||||
|
||||
## Veritabanı Yapılandırması
|
||||
|
||||
### PostgreSQL Bağlantısı
|
||||
|
||||
```javascript
|
||||
// src/config/services.js
|
||||
const pgPool = new Pool({
|
||||
host: env.postgres.host, // postgres
|
||||
port: env.postgres.port, // 5432
|
||||
database: env.postgres.database, // bookibra
|
||||
user: env.postgres.user, // bookibra
|
||||
password: env.postgres.password // bookibra
|
||||
});
|
||||
```
|
||||
|
||||
### Redis Bağlantısı
|
||||
|
||||
```javascript
|
||||
const redis = new Redis(env.redisUrl, {
|
||||
lazyConnect: true,
|
||||
maxRetriesPerRequest: null
|
||||
});
|
||||
```
|
||||
|
||||
## Ortam Değişkenleri
|
||||
|
||||
```bash
|
||||
NODE_ENV=development
|
||||
PORT=8080
|
||||
GEMINI_API_KEY=your_gemini_key # İsteğe bağlı
|
||||
ALLOWED_ORIGINS=* # CORS için
|
||||
REQUEST_LOGGING=true
|
||||
REDIS_URL=redis://redis:6379
|
||||
ISBN_CACHE_TTL_SECONDS=21600
|
||||
JWT_SECRET=please_change_me # Production'da değiştirilmeli
|
||||
JWT_EXPIRES_IN=1h
|
||||
POSTGRES_HOST=postgres
|
||||
POSTGRES_PORT=5432
|
||||
POSTGRES_DB=bookibra
|
||||
POSTGRES_USER=bookibra
|
||||
POSTGRES_PASSWORD=bookibra
|
||||
```
|
||||
|
||||
## Hata Yönetimi
|
||||
|
||||
Tüm hatalar `errorHandler` middleware tarafından yakalanır.
|
||||
|
||||
**Hata Durum Kodları:**
|
||||
- `400`: Geçersiz istek parametresi
|
||||
- `401`: Kimlik doğrulama hatası
|
||||
- `404`: Kaynak bulunamadı
|
||||
- `409`: Çakışma (örn: email zaten kayıtlı)
|
||||
- `500`: Sunucu hatası
|
||||
|
||||
## Güvenlik
|
||||
|
||||
1. **JWT**: Kimlik doğrulama için JWT token kullanılır
|
||||
2. **bcrypt**: Şifreler hash'lenir (10 rounds)
|
||||
3. **CORS**: Çapraz kaynak istekleri kontrol edilir
|
||||
4. **Input Validation**: express-validator ile istek doğrulama
|
||||
|
||||
---
|
||||
|
||||
**İlgili Dosyalar:**
|
||||
- [Proje Genel Bakış](./proje-genel-bakis.md)
|
||||
- [Frontend Yapısı](./frontend-yapisi.md)
|
||||
- [Teknoloji Yığını](./teknoloji-yigini.md)
|
||||
341
doc/frontend-yapisi.md
Normal file
341
doc/frontend-yapisi.md
Normal file
@@ -0,0 +1,341 @@
|
||||
# Bookibra - Frontend Dokümantasyonu
|
||||
|
||||
## Frontend Genel Bakış
|
||||
|
||||
Frontend, **React 19** ve **Vite** kullanılarak geliştirilmiş modern bir SPA (Single Page Application) uygulamasıdır. Mobil öncelikli tasarıma sahiptir ve kitap arama, barkod tarama, kütüphane yönetimi özellikleri sunar.
|
||||
|
||||
## Teknoloji Yığını
|
||||
|
||||
| Teknoloji | Versiyon | Kullanım Amacı |
|
||||
|-----------|----------|----------------|
|
||||
| React | ^19.1.1 | UI framework |
|
||||
| Vite | ^7.1.7 | Build tool ve dev server |
|
||||
| React Router | ^7.9.5 | Client-side routing |
|
||||
| Framer Motion | ^12.23.24 | Animasyonlar |
|
||||
| FontAwesome | ^7.1.0 | İkonlar |
|
||||
| react-qr-barcode-scanner | ^2.1.18 | Barkod tarama |
|
||||
| react-image-glow | ^1.0.6 | Resim efektleri |
|
||||
| color-thief-react | ^2.1.0 | Renk extract |
|
||||
|
||||
## Dizin Yapısı
|
||||
|
||||
```
|
||||
frontend/src/
|
||||
├── components/ # Yeniden kullanılabilir bileşenler
|
||||
│ ├── BookCard.jsx # Kitap kartı bileşeni
|
||||
│ └── SocialButton.jsx # Sosyal medya butonu
|
||||
├── pages/ # Sayfa bileşenleri
|
||||
│ ├── HomePage.jsx # Ana sayfa
|
||||
│ ├── MyBooksPage.jsx # Kütüphane sayfası
|
||||
│ ├── AddBooksPage.jsx # Kitap ekleme sayfası
|
||||
│ └── ProfilePage.jsx # Profil sayfası
|
||||
├── context/ # React Context
|
||||
│ └── SavedBooksContext.jsx # Kitap kütüphanesi state yönetimi
|
||||
├── assets/ # Statik dosyalar
|
||||
│ ├── booklibra-logo.svg
|
||||
│ └── ...
|
||||
├── App.jsx # Ana uygulama bileşeni
|
||||
├── main.jsx # Uygulama giriş noktası
|
||||
├── App.css # Ana stiller
|
||||
└── index.css # Global stiller
|
||||
```
|
||||
|
||||
## Uygulama Mimarisi
|
||||
|
||||
### App Bileşeni (`src/App.jsx`)
|
||||
|
||||
Uygulamanın kök bileşenidir. Routing ve layout yapısını belirler.
|
||||
|
||||
**Ana Özellikler:**
|
||||
- `SavedBooksProvider` ile context provider wrapping
|
||||
- `BrowserRouter` ile routing
|
||||
- Bottom navigation ile sayfa geçişi
|
||||
|
||||
**Navigasyon Yapısı:**
|
||||
```javascript
|
||||
const tabs = [
|
||||
{ path: '/', label: 'Home', icon: faHouse },
|
||||
{ path: '/my-books', label: 'My Books', icon: faBookOpen },
|
||||
{ path: '/add-books', label: 'Add Books', icon: faPlusCircle },
|
||||
{ path: '/profile', label: 'Profile', icon: faUser }
|
||||
];
|
||||
```
|
||||
|
||||
### Sayfalar
|
||||
|
||||
#### 1. HomePage (`src/pages/HomePage.jsx`)
|
||||
|
||||
Ana sayfa bileşeni. Şu anda basit bir başlık gösterir.
|
||||
|
||||
**Gelecek Özellikler:**
|
||||
- Son eklenen kitaplar
|
||||
- Önerilen kitaplar
|
||||
- İstatistikler
|
||||
|
||||
#### 2. AddBooksPage (`src/pages/AddBooksPage.jsx`)
|
||||
|
||||
Kitap arama ve ekleme sayfası. En karmaşık sayfa bileşenidir.
|
||||
|
||||
**Ana Özellikler:**
|
||||
- Başlık ile arama (yayın yılı filtreleme desteği)
|
||||
- Barkod tarama ile ISBN ile arama
|
||||
- Sonuçları listeleme
|
||||
- Kitapları kütüphaneye ekleme
|
||||
|
||||
**Önemli Fonksiyonlar:**
|
||||
|
||||
```javascript
|
||||
// API Base URL çözümleme
|
||||
const resolveApiBaseUrl = () => {
|
||||
// 1. Environment variable kontrolü
|
||||
// 2. Window location tabanlı çözümleme
|
||||
// 3. Default localhost:8080
|
||||
};
|
||||
|
||||
// Arama input'u parsing
|
||||
const parseSearchInput = (raw) => {
|
||||
// "Kitap Adı .2020" → { title: "Kitap Adı", published: "2020" }
|
||||
// "Kitap Adı" → { title: "Kitap Adı", published: undefined }
|
||||
};
|
||||
|
||||
// API cevabını normalizasyon
|
||||
const normalizeBook = (item) => ({
|
||||
title, authorName, thumbImage, page, rate,
|
||||
publisher, description, isbn, raw
|
||||
});
|
||||
```
|
||||
|
||||
**Barkod Tarama Akışı:**
|
||||
1. Kamera butonuna tıklama
|
||||
2. `react-qr-barcode-scanner` ile kamera açma
|
||||
3. Barkod algılama (`handleBarcodeUpdate`)
|
||||
4. ISBN ile API çağrısı
|
||||
5. Sonuçları gösterme
|
||||
|
||||
**API Endpoint'ler:**
|
||||
- `/api/books/title?title={query}`
|
||||
- `/api/books/filter?title={query}&published={year}`
|
||||
- `/api/books/isbn/{isbn}?locales=en`
|
||||
|
||||
#### 3. MyBooksPage (`src/pages/MyBooksPage.jsx`)
|
||||
|
||||
Kullanıcının kayıtlı kitaplarını gösterir.
|
||||
|
||||
**Ana Özellikler:**
|
||||
- Kitap listesi görünümü
|
||||
- Kitap detay görünümü
|
||||
- Kitap silme
|
||||
- Görsel efektler (ImageGlow)
|
||||
|
||||
**State Yönetimi:**
|
||||
```javascript
|
||||
const { savedBooks, removeBook } = useSavedBooks();
|
||||
const [selected, setSelected] = useState(null);
|
||||
```
|
||||
|
||||
**Detay Görünümü:**
|
||||
Seçili kitap için:
|
||||
- Kapak resmi (glow efekti ile)
|
||||
- Kitap bilgileri (başlık, yazar, sayfa, puan)
|
||||
- Açıklama
|
||||
- Silme butonu
|
||||
|
||||
#### 4. ProfilePage (`src/pages/ProfilePage.jsx`)
|
||||
|
||||
Kullanıcı profili sayfası. Şu anda placeholder durumunda.
|
||||
|
||||
**Gelecek Özellikler:**
|
||||
- Kullanıcı bilgileri
|
||||
- Ayarlar
|
||||
- İstatistikler
|
||||
|
||||
### Bileşenler
|
||||
|
||||
#### BookCard (`src/components/BookCard.jsx`)
|
||||
|
||||
Tek bir kitabı gösteren kart bileşeni.
|
||||
|
||||
**Props:**
|
||||
```javascript
|
||||
{
|
||||
book: {
|
||||
title: string,
|
||||
authorName: string,
|
||||
thumbImage: string,
|
||||
page: number,
|
||||
rate: number,
|
||||
...
|
||||
},
|
||||
onSelect: (book) => void
|
||||
}
|
||||
```
|
||||
|
||||
**Özellikler:**
|
||||
- Kitap kapak resmi
|
||||
- Başlık ve yazar
|
||||
- Sayfa sayısı ve puan
|
||||
- Tıklanabilir (onSelect callback)
|
||||
|
||||
#### SocialButton (`src/components/SocialButton.jsx`)
|
||||
|
||||
Sosyal medya giriş butonu.
|
||||
|
||||
**Props:**
|
||||
```javascript
|
||||
{
|
||||
provider: 'apple' | 'google',
|
||||
onClick: () => void
|
||||
}
|
||||
```
|
||||
|
||||
### Context Yönetimi
|
||||
|
||||
#### SavedBooksContext (`src/context/SavedBooksContext.jsx`)
|
||||
|
||||
Kitap kütüphanesi için global state yönetimi.
|
||||
|
||||
**API:**
|
||||
```javascript
|
||||
const { savedBooks, addBook, removeBook } = useSavedBooks();
|
||||
```
|
||||
|
||||
**Özellikler:**
|
||||
- `savedBooks`: Kayıtlı kitaplar dizisi
|
||||
- `addBook(book)`: Kitap ekleme (tekrarı kontrol eder)
|
||||
- `removeBook(title)`: Kitap silme
|
||||
|
||||
**Persistence:**
|
||||
Kitaplar `localStorage`'da saklanır:
|
||||
```javascript
|
||||
localStorage.setItem('bookibra_saved_books', JSON.stringify(savedBooks));
|
||||
```
|
||||
|
||||
## Stil Yapısı
|
||||
|
||||
### Ana Layout (`App.css`)
|
||||
|
||||
**Mobile Shell Pattern:**
|
||||
```css
|
||||
.mobile-shell {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
height: 100vh;
|
||||
}
|
||||
|
||||
.page-container {
|
||||
flex: 1;
|
||||
overflow-y: auto;
|
||||
padding-bottom: 70px; /* Bottom nav için boşluk */
|
||||
}
|
||||
```
|
||||
|
||||
**Bottom Navigation:**
|
||||
```css
|
||||
.bottom-nav {
|
||||
position: fixed;
|
||||
bottom: 0;
|
||||
width: 100%;
|
||||
display: flex;
|
||||
justify-content: space-around;
|
||||
}
|
||||
```
|
||||
|
||||
### Renk Paleti
|
||||
|
||||
CSS değişkenleri ile tanımlı:
|
||||
```css
|
||||
:root {
|
||||
--primary: /* Ana renk */;
|
||||
--secondary: /* İkincil renk */;
|
||||
--accent: /* Vurgu rengi */;
|
||||
--text: /* Metin rengi */;
|
||||
--bg: /* Arka plan */;
|
||||
}
|
||||
```
|
||||
|
||||
## API Entegrasyonu
|
||||
|
||||
### API Base URL Çözümleme
|
||||
|
||||
```javascript
|
||||
const resolveApiBaseUrl = () => {
|
||||
// 1. Environment variable (VITE_API_BASE_URL)
|
||||
if (import.meta.env.VITE_API_BASE_URL)
|
||||
return import.meta.env.VITE_API_BASE_URL;
|
||||
|
||||
// 2. Window location (production)
|
||||
if (typeof window !== 'undefined') {
|
||||
const { protocol, hostname } = window.location;
|
||||
return `${protocol}//${hostname}:8080`;
|
||||
}
|
||||
|
||||
// 3. Default (development)
|
||||
return 'http://localhost:8080';
|
||||
};
|
||||
```
|
||||
|
||||
### Örnek API Çağrısı
|
||||
|
||||
```javascript
|
||||
const response = await fetch(`${API_BASE_URL}/api/books/isbn/${isbn}?locales=en`);
|
||||
const data = await response.json();
|
||||
if (!response.ok) {
|
||||
throw new Error(data.message || 'Kitap bulunamadi');
|
||||
}
|
||||
```
|
||||
|
||||
## Build ve Deployment
|
||||
|
||||
### Development
|
||||
|
||||
```bash
|
||||
cd frontend
|
||||
npm install
|
||||
npm run dev
|
||||
```
|
||||
|
||||
### Production Build
|
||||
|
||||
```bash
|
||||
npm run build
|
||||
# Çıktı: dist/ dizini
|
||||
```
|
||||
|
||||
### Docker Build
|
||||
|
||||
```dockerfile
|
||||
FROM node:20-alpine
|
||||
WORKDIR /app
|
||||
COPY package*.json ./
|
||||
RUN npm install
|
||||
COPY . .
|
||||
RUN npm run build
|
||||
CMD ["npm", "run", "preview"]
|
||||
```
|
||||
|
||||
## Ortam Değişkenleri
|
||||
|
||||
```bash
|
||||
# .env.example (frontend/.env.example)
|
||||
VITE_API_BASE_URL=http://localhost:8080
|
||||
```
|
||||
|
||||
## Performans İpuçları
|
||||
|
||||
1. **Lazy Loading**: Sayfalar ihtiyaç anında yüklenir
|
||||
2. **Image Optimization**: Kapak resimleri lazy loading
|
||||
3. **Local Caching**: Kitaplar localStorage'da saklanır
|
||||
4. **API Debouncing**: Arama input'u için debounce eklenebilir
|
||||
|
||||
## Erişilebilirlik
|
||||
|
||||
- Semantic HTML kullanımı
|
||||
- Keyboard navigation desteği
|
||||
- Screen reader friendly (ikonlar için aria-label)
|
||||
|
||||
---
|
||||
|
||||
**İlgili Dosyalar:**
|
||||
- [Proje Genel Bakış](./proje-genel-bakis.md)
|
||||
- [Backend Yapısı](./backend-yapisi.md)
|
||||
- [Teknoloji Yığını](./teknoloji-yigini.md)
|
||||
132
doc/proje-genel-bakis.md
Normal file
132
doc/proje-genel-bakis.md
Normal file
@@ -0,0 +1,132 @@
|
||||
# Bookibra - Proje Genel Bakış
|
||||
|
||||
## Proje Tanımı
|
||||
|
||||
**Bookibra**, Amazon'dan kitap verilerini çekip sunan, barkod tarama özelliği bulunan ve kullanıcıların kendi kitap kütüphanelerini yönetebilecekleri modern bir full-stack web uygulamasıdır.
|
||||
|
||||
## Ana Özellikler
|
||||
|
||||
### 1. Kitap Arama ve Keşfetme
|
||||
- ISBN ile kitap arama
|
||||
- Kitap başlığı ile arama
|
||||
- Yayın tarihine göre filtreleme (örn: "Kitap Adı .2020")
|
||||
- Çoklu dil desteği (Türkçe/İngiliz Amazon siteleri)
|
||||
|
||||
### 2. Barkod Tarama
|
||||
- Cihaz kamerası ile ISBN barkod tarama
|
||||
- Otomatik kitap bilgisi getirme
|
||||
- Mobil uyumlu tarayıcı arayüzü
|
||||
|
||||
### 3. Kullanıcı Yönetimi
|
||||
- Kayıt olma ve giriş yapma
|
||||
- JWT tabanlı kimlik doğrulama
|
||||
- Profil yönetimi
|
||||
|
||||
### 4. Kitap Kütüphanesi
|
||||
- Kitapları kaydetme (localStorage)
|
||||
- Kayıtlı kitapları görüntüleme
|
||||
- Kitap detaylarını inceleme
|
||||
- Kitap silme
|
||||
|
||||
### 5. Performans ve Önbellekleme
|
||||
- Redis ile önbellekleme sistemi
|
||||
- Medya (kapak resmi) önbellekleme
|
||||
- Amazon API çağrılarını minimize etme
|
||||
|
||||
## Mimari Genel Bakış
|
||||
|
||||
```
|
||||
┌─────────────────────────────────────────────────────────────┐
|
||||
│ CLIENT │
|
||||
│ (React + Vite) │
|
||||
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
|
||||
│ │ HomePage │ │AddBooks │ │ MyBooks │ │ Profile │ │
|
||||
│ └──────────┘ └──────────┘ └──────────┘ └──────────┘ │
|
||||
└─────────────────────────────────────────────────────────────┘
|
||||
│
|
||||
│ HTTP/REST
|
||||
▼
|
||||
┌─────────────────────────────────────────────────────────────┐
|
||||
│ BACKEND API │
|
||||
│ (Express + Node.js) │
|
||||
│ ┌────────────┐ ┌────────────┐ ┌──────────────────────┐ │
|
||||
│ │ Auth Routes│ │Book Routes │ │ Middleware │ │
|
||||
│ └────────────┘ └────────────┘ │ - Auth │ │
|
||||
│ │ - Error Handler │ │
|
||||
│ ┌────────────┐ ┌────────────┐ │ - Request Logger │ │
|
||||
│ │ Controllers│ │ Services │ └──────────────────────┘ │
|
||||
│ └────────────┘ └────────────┘ │
|
||||
└─────────────────────────────────────────────────────────────┘
|
||||
│
|
||||
┌───────────────────┼───────────────────┐
|
||||
▼ ▼ ▼
|
||||
┌───────────────┐ ┌────────────────┐ ┌──────────────┐
|
||||
│ Redis │ │ PostgreSQL │ │ Socket.IO │
|
||||
│ (Cache) │ │ (Users DB) │ │ (WebSocket) │
|
||||
└───────────────┘ └────────────────┘ └──────────────┘
|
||||
│
|
||||
▼
|
||||
┌─────────────────────────────────────────┐
|
||||
│ External Services │
|
||||
│ ┌──────────────┐ ┌──────────────┐ │
|
||||
│ │ Amazon │ │ Gemini AI │ │
|
||||
│ │ Scraping │ │ (Optional) │ │
|
||||
│ └──────────────┘ └──────────────┘ │
|
||||
└─────────────────────────────────────────┘
|
||||
```
|
||||
|
||||
## Proje Yapısı
|
||||
|
||||
### Dizin Hiyerarşisi
|
||||
|
||||
```
|
||||
bookibra/
|
||||
├── doc/ # Dokümantasyon
|
||||
├── frontend/ # React Frontend Uygulaması
|
||||
│ ├── src/
|
||||
│ │ ├── components/ # React Bileşenleri
|
||||
│ │ ├── pages/ # Sayfa Bileşenleri
|
||||
│ │ ├── context/ # React Context API
|
||||
│ │ └── main.jsx # Uygulama Giriş Noktası
|
||||
│ └── package.json
|
||||
├── src/ # Backend Kaynak Kodları
|
||||
│ ├── config/ # Yapılandırma Dosyaları
|
||||
│ ├── controllers/ # İstek Kontrolcüleri
|
||||
│ ├── middleware/ # Express Middleware
|
||||
│ ├── routes/ # API Rotaları
|
||||
│ ├── services/ # İş Mantığı Servisleri
|
||||
│ ├── utils/ # Yardımcı Fonksiyonlar
|
||||
│ ├── validators/ # İstek Doğrulayıcıları
|
||||
│ ├── app.js # Express Uygulaması
|
||||
│ └── server.js # HTTP Sunucusu
|
||||
├── docker-compose.yml # Docker Orchestration
|
||||
├── Dockerfile # Backend Docker Image
|
||||
└── package.json
|
||||
```
|
||||
|
||||
## Çalışma Prensibi
|
||||
|
||||
### Kitap Arama Akışı
|
||||
|
||||
1. **Kullanıcı İsteği**: Frontend'den arama parametresi gönderilir
|
||||
2. **Önbellek Kontrolü**: Redis'te önceden yapılmmış arama var mı kontrol edilir
|
||||
3. **Amazon Scraping**: Önbellekte yoksa Amazon'dan veri çekilir
|
||||
4. **Veri İşleme**: HTML parse edilir ve kitap bilgileri çıkarılır
|
||||
5. **Önbellekleme**: Sonuçlar Redis'e kaydedilir
|
||||
6. **Cevap**: İşlenmiş veri frontend'e gönderilir
|
||||
|
||||
### Barkod Tarama Akışı
|
||||
|
||||
1. **Kamera Erişimi**: React-qr-barcode-scanner ile kamera açılır
|
||||
2. **Barkod Algılama**: ISBN formatında barkod algılanır
|
||||
3. **ISBN Arama**: Backend'e ISBN ile kitap bilgisi istenir
|
||||
4. **Kitap Gösterimi**: Bulunan kitap kullanıcıya sunulur
|
||||
|
||||
## Deployment
|
||||
|
||||
Uygulama Docker Compose ile tüm servisleri (frontend, backend, redis, postgres) tek seferde başlatmayı destekler.
|
||||
|
||||
---
|
||||
|
||||
**Son Güncelleme**: 2026-02-10
|
||||
**Versiyon**: 1.0.0
|
||||
211
doc/teknoloji-yigini.md
Normal file
211
doc/teknoloji-yigini.md
Normal file
@@ -0,0 +1,211 @@
|
||||
# Bookibra - Teknoloji Yığını
|
||||
|
||||
## Teknoloji Yığınına Genel Bakış
|
||||
|
||||
Bookibra, modern web teknolojileri ile geliştirilmiş full-stack bir uygulamadır. Aşağıda kullanılan tüm teknolojiler, neden kullanıldıkları ve projedeki rolleri detaylı olarak açıklanmıştır.
|
||||
|
||||
## Backend Tekolojileri
|
||||
|
||||
### Runtime ve Framework
|
||||
|
||||
| Teknoloji | Versiyon | Kullanım Amacı | Neden Seçildi? |
|
||||
|-----------|----------|----------------|----------------|
|
||||
| **Node.js** | LTS | JavaScript runtime | Sunucu tarafında JavaScript kullanımı, büyük ekosistem, asenkron I/O |
|
||||
| **Express.js** | ^5.1.0 | Web framework | Minimal, esnek, büyük middleware ekosistemi |
|
||||
|
||||
### Web Scraping
|
||||
|
||||
| Teknoloji | Versiyon | Kullanım Amacı | Neden Seçildi? |
|
||||
|-----------|----------|----------------|----------------|
|
||||
| **axios** | ^1.13.2 | HTTP istekleri | Promise-based, interceptor desteği, otomatik JSON dönüşümü |
|
||||
| **cheerio** | ^1.1.2 | HTML parsing | jQuery syntax, hızlı ve hafif |
|
||||
| **szbk-amazon-book-search** | ^1.1.1 | Amazon scraping | Amazon'a özelleşmiş scraping kütüphanesi |
|
||||
|
||||
### Veritabanı ve Önbellekleme
|
||||
|
||||
| Teknoloji | Versiyon | Kullanım Amacı | Neden Seçildi? |
|
||||
|-----------|----------|----------------|----------------|
|
||||
| **PostgreSQL** | 8.16.3 (client) | İlişkisel veritabanı | ACID uyumlu, güçlü, açık kaynak |
|
||||
| **ioredis** | ^5.8.2 | Redis client | Promise-based, cluster desteği |
|
||||
| **Redis** | 7-alpine | Önbellekleme | In-memory store, hızlı, TTL desteği |
|
||||
|
||||
### Kimlik Doğrulama ve Güvenlik
|
||||
|
||||
| Teknoloji | Versiyon | Kullanım Amacı | Neden Seçildi? |
|
||||
|-----------|----------|----------------|----------------|
|
||||
| **jsonwebtoken** | ^9.0.2 | JWT token oluşturma | Stateless auth, standart, güvenli |
|
||||
| **bcrypt** | ^6.0.0 | Şifre hashleme | Güçlü hash algoritması, salting |
|
||||
| **express-validator** | ^7.3.0 | Input validation | Express ile entegre, decorator-based |
|
||||
|
||||
### Gerçek Zamanlı İletişim
|
||||
|
||||
| Teknoloji | Versiyon | Kullanım Amacı | Neden Seçildi? |
|
||||
|-----------|----------|----------------|----------------|
|
||||
| **Socket.IO** | ^4.8.1 | WebSocket server | Fall-back mekanizması, room desteği |
|
||||
|
||||
### Araçlar ve Yardımcılar
|
||||
|
||||
| Teknoloji | Versiyon | Kullanım Amacı | Neden Seçildi? |
|
||||
|-----------|----------|----------------|----------------|
|
||||
| **dotenv** | ^17.2.3 | Ortam değişkenleri | .env dosyası yönetimi |
|
||||
| **cors** | ^2.8.5 | CORS middleware | Cross-origin resource sharing |
|
||||
| **chalk** | ^4.1.2 | Terminal renklendirme | Logları okunabilir yapma |
|
||||
| **uuid** | ^13.0.0 | UUID oluşturma | Benzersiz ID oluşturma |
|
||||
| **nodemon** | ^3.1.10 | Otomatik restart | Development sırasında kolaylık |
|
||||
|
||||
## Frontend Teknolojileri
|
||||
|
||||
### Core Framework
|
||||
|
||||
| Teknoloji | Versiyon | Kullanım Amacı | Neden Seçildi? |
|
||||
|-----------|----------|----------------|----------------|
|
||||
| **React** | ^19.1.1 | UI framework | Component-based, büyük ekosistem, hooks |
|
||||
| **Vite** | ^7.1.7 | Build tool ve dev server | Hızlı HMR, native ES modules |
|
||||
|
||||
### Routing
|
||||
|
||||
| Teknoloji | Versiyon | Kullanım Amacı | Neden Seçildi? |
|
||||
|-----------|----------|----------------|----------------|
|
||||
| **React Router** | ^7.9.5 | Client-side routing | Declarative routing, nested routes |
|
||||
|
||||
### Animasyonlar
|
||||
|
||||
| Teknoloji | Versiyon | Kullanım Amacı | Neden Seçildi? |
|
||||
|-----------|----------|----------------|----------------|
|
||||
| **Framer Motion** | ^12.23.24 | Animasyon library | Declarative API, gesture desteği |
|
||||
|
||||
### İkonlar ve Görseller
|
||||
|
||||
| Teknoloji | Versiyon | Kullanım Amacı | Neden Seçildi? |
|
||||
|-----------|----------|----------------|----------------|
|
||||
| **Font Awesome** | ^7.1.0 | İkon seti | Geniş ikon kütüphanesi |
|
||||
| **react-image-glow** | ^1.0.6 | Resim efekti | Estetik glow efekti |
|
||||
| **color-thief-react** | ^2.1.0 | Renk extract | Resimlerden ana renk alma |
|
||||
|
||||
### Barkod Tarama
|
||||
|
||||
| Teknoloji | Versiyon | Kullanım Amacı | Neden Seçildi? |
|
||||
|-----------|----------|----------------|----------------|
|
||||
| **react-qr-barcode-scanner** | ^2.1.18 | Barkod tarama | Hem QR hem barkod desteği |
|
||||
|
||||
### Development Araçları
|
||||
|
||||
| Teknoloji | Versiyon | Kullanım Amacı | Neden Seçildi? |
|
||||
|-----------|----------|----------------|----------------|
|
||||
| **ESLint** | ^9.36.0 | Linter | Kod kalitesi, tutarlılık |
|
||||
| **@vitejs/plugin-react** | ^5.0.4 | React için Vite plugin | Fast refresh, JSX support |
|
||||
|
||||
## DevOps Teknolojileri
|
||||
|
||||
### Containerization
|
||||
|
||||
| Teknoloji | Versiyon | Kullanım Amacı | Neden Seçildi? |
|
||||
|-----------|----------|----------------|----------------|
|
||||
| **Docker** | Latest | Containerization | Tutarlı deployment, izolasyon |
|
||||
| **Docker Compose** | Latest | Multi-container orchestration | Local development, tüm servisleri bir arada |
|
||||
|
||||
### Docker Hizmetleri
|
||||
|
||||
```yaml
|
||||
services:
|
||||
frontend: # React uygulaması
|
||||
api: # Express backend
|
||||
redis: # Önbellekleme
|
||||
postgres: # Kullanıcı veritabanı
|
||||
```
|
||||
|
||||
## Veri Akışı Diyagramı
|
||||
|
||||
```
|
||||
┌─────────────────────────────────────────────────────────────┐
|
||||
│ USER BROWSER │
|
||||
│ (React App) │
|
||||
└─────────────────────────────────────────────────────────────┘
|
||||
│
|
||||
│ HTTP Request
|
||||
▼
|
||||
┌─────────────────────────────────────────────────────────────┐
|
||||
│ EXPRESS SERVER │
|
||||
│ ┌──────────────────────────────────────────────────────┐ │
|
||||
│ │ Request Logging → Auth → Route → Controller │ │
|
||||
│ └──────────────────────────────────────────────────────┘ │
|
||||
└─────────────────────────────────────────────────────────────┘
|
||||
│
|
||||
┌───────────────────┼───────────────────┐
|
||||
▼ ▼ ▼
|
||||
┌───────────────┐ ┌────────────────┐ ┌──────────────┐
|
||||
│ REDIS │ │ POSTGRES │ │ AMAZON │
|
||||
│ Check & │ │ User Data │ │ Scraping │
|
||||
│ Store │ │ Auth │ │ Book Data │
|
||||
└───────────────┘ └────────────────┘ └──────────────┘
|
||||
```
|
||||
|
||||
## Paket Yönetimi
|
||||
|
||||
### Backend
|
||||
```bash
|
||||
npm install # Development
|
||||
npm run dev # Development server (nodemon)
|
||||
npm start # Production server
|
||||
```
|
||||
|
||||
### Frontend
|
||||
```bash
|
||||
npm install # Development
|
||||
npm run dev # Development server (Vite)
|
||||
npm run build # Production build
|
||||
npm run preview # Production preview
|
||||
```
|
||||
|
||||
## Versiyon Yönetimi
|
||||
|
||||
```json
|
||||
{
|
||||
"name": "bookibra",
|
||||
"version": "1.0.0",
|
||||
"description": "Amazon kitap verilerini sunan Express tabanli backend"
|
||||
}
|
||||
```
|
||||
|
||||
## Bağımlılık Yönetimi Stratejisi
|
||||
|
||||
### Semantic Versioning
|
||||
- `^` (caret): Minor güncellemelere izin verir
|
||||
- `~` (tilde): Patch güncellemelere izin verir
|
||||
- Tam versiyon: Kilidi korur
|
||||
|
||||
### Güvenlik
|
||||
- Düzenli `npm audit` çalıştırma
|
||||
- Vulnerability takibi
|
||||
- Güncel bağımlılıklar
|
||||
|
||||
## Performans Optimizasyonları
|
||||
|
||||
### Backend
|
||||
1. **Redis Önbellekleme**: 6 saat TTL ile kitap verileri önbellekte tutulur
|
||||
2. **Connection Pooling**: PostgreSQL için connection pooling
|
||||
3. **Lazy Connection**: Redis için lazy connect
|
||||
4. **Asenkron İşlemler**: Promise.all ile parallel işlemler
|
||||
|
||||
### Frontend
|
||||
1. **Code Splitting**: Vite ile otomatik code splitting
|
||||
2. **Tree Shaking**: Kullanılmayan kod eliminasyonu
|
||||
3. **Image Optimization**: Lazy loading
|
||||
4. **Local Storage**: İstemci taraflı veri saklama
|
||||
|
||||
## Gelecek Teknoloji Eklentileri
|
||||
|
||||
Potansiyel iyileştirmeler:
|
||||
1. **GraphQL**: REST yerine daha verimli sorgular
|
||||
2. **TypeScript**: Tip güvenliği
|
||||
3. **Testing Framework**: Jest, Cypress
|
||||
4. **CI/CD**: GitHub Actions, GitLab CI
|
||||
5. **Monitoring**: Prometheus, Grafana
|
||||
6. **Load Balancer**: Nginx, HAProxy
|
||||
|
||||
---
|
||||
|
||||
**İlgili Dosyalar:**
|
||||
- [Proje Genel Bakış](./proje-genel-bakis.md)
|
||||
- [Backend Yapısı](./backend-yapisi.md)
|
||||
- [Frontend Yapısı](./frontend-yapisi.md)
|
||||
Reference in New Issue
Block a user