221 lines
5.5 KiB
Markdown
221 lines
5.5 KiB
Markdown
# Image Manipulation API
|
||
|
||
Modern, güvenli ve ölçeklenebilir resim yönetim ve manipülasyon platformu. Next.js 16, Better Auth ve Drizzle ORM ile geliştirilmiştir.
|
||
|
||
## ✨ Özellikler
|
||
|
||
### 🔐 Güvenlik & Kimlik Doğrulama
|
||
- **Better Auth** ile session tabanlı kimlik doğrulama
|
||
- **JWT** destekli REST API (dış uygulamalar için)
|
||
- **Role-Based Access Control (RBAC)** - 3 farklı rol (User, Moderator, Admin)
|
||
- API Key yönetimi
|
||
- Şifre hashleme (bcrypt)
|
||
|
||
### 🎨 Resim İşleme
|
||
- **Sharp** kütüphanesi ile hızlı resim manipülasyonu
|
||
- Boyutlandırma (width/height)
|
||
- Format dönüştürme (JPEG, PNG, WebP, AVIF)
|
||
- Kalite ayarı (1-100)
|
||
- Otomatik dosya boyutu optimizasyonu
|
||
|
||
### 👥 Kullanıcı Yönetimi
|
||
- **Admin Panel** - Kullanıcıları yönetme, rol atama, silme
|
||
- Kullanıcı profili
|
||
- Email doğrulama desteği
|
||
- Kayıt açma/kapama kontrolü
|
||
|
||
### 📊 Rol ve İzinler
|
||
|
||
| Rol | İzinler |
|
||
|-----|---------|
|
||
| **User** | Kendi resimlerini yükleyebilir, görüntüleyebilir ve silebilir |
|
||
| **Moderator** | Tüm resimleri görüntüleyebilir ve silebilir |
|
||
| **Admin** | Tüm moderator izinleri + Kullanıcı yönetimi |
|
||
|
||
### 🚀 API Özellikleri
|
||
- RESTful API tasarımı
|
||
- JWT token authentication
|
||
- API Key authentication
|
||
- Rate limiting (opsiyonel)
|
||
- Swagger-style dokümantasyon
|
||
|
||
## 📦 Teknolojiler
|
||
|
||
- **Framework**: Next.js 16.1.1 (App Router, Turbopack)
|
||
- **Auth**: better-auth v1.4.10
|
||
- **Database**: PostgreSQL + Drizzle ORM v0.45.1
|
||
- **Image Processing**: Sharp v0.34.5
|
||
- **Styling**: Tailwind CSS v4
|
||
- **Container**: Docker & Docker Compose
|
||
- **Runtime**: Node.js v24.12.0
|
||
|
||
## 🛠️ Kurulum
|
||
|
||
### 1. Proje Klonlama
|
||
\`\`\`bash
|
||
git clone <repo-url>
|
||
cd image-api
|
||
\`\`\`
|
||
|
||
### 2. Ortam Değişkenleri
|
||
\`.env\` dosyası oluşturun:
|
||
\`\`\`env
|
||
DATABASE_URL=postgresql://user:password@localhost:5432/image_api
|
||
BETTER_AUTH_SECRET=your-super-secret-key-min-32-chars
|
||
BETTER_AUTH_URL=http://localhost:3000
|
||
NEXT_PUBLIC_APP_URL=http://localhost:3000
|
||
JWT_SECRET=another-super-secret-key-min-32-characters
|
||
REGISTER_ENABLE=true
|
||
\`\`\`
|
||
|
||
### 3. Docker ile Çalıştırma
|
||
\`\`\`bash
|
||
# PostgreSQL başlat
|
||
docker compose up -d postgres
|
||
|
||
# Bağımlılıkları yükle
|
||
yarn install
|
||
|
||
# Database migration
|
||
yarn db:push
|
||
|
||
# Development server
|
||
yarn dev
|
||
\`\`\`
|
||
|
||
### 4. İlk Admin Kullanıcısı
|
||
\`\`\`bash
|
||
# Kayıt ol
|
||
# Sonra admin yap:
|
||
npx tsx make-admin.ts your-email@example.com
|
||
\`\`\`
|
||
|
||
## 📚 API Kullanımı
|
||
|
||
### Kayıt ve Login
|
||
\`\`\`bash
|
||
# Kayıt
|
||
curl -X POST http://localhost:3000/api/v1/auth/register \\
|
||
-H "Content-Type: application/json" \\
|
||
-d '{"email":"user@example.com","password":"password123","name":"John Doe"}'
|
||
|
||
# Login
|
||
curl -X POST http://localhost:3000/api/v1/auth/login \\
|
||
-H "Content-Type: application/json" \\
|
||
-d '{"email":"user@example.com","password":"password123"}'
|
||
|
||
# Response: {"success":true,"token":"jwt-token-here"}
|
||
\`\`\`
|
||
|
||
### Resim Yükleme
|
||
\`\`\`bash
|
||
curl -X POST http://localhost:3000/api/v1/images/upload \\
|
||
-H "Authorization: Bearer YOUR_JWT_TOKEN" \\
|
||
-F "file=@photo.jpg" \\
|
||
-F "width=800" \\
|
||
-F "quality=90" \\
|
||
-F "format=webp"
|
||
\`\`\`
|
||
|
||
### Resim Listeleme
|
||
\`\`\`bash
|
||
# User: Sadece kendi resimleri
|
||
# Moderator/Admin: Tüm resimler
|
||
curl http://localhost:3000/api/v1/images \\
|
||
-H "Authorization: Bearer YOUR_JWT_TOKEN"
|
||
\`\`\`
|
||
|
||
### Admin - Kullanıcıları Listeleme
|
||
\`\`\`bash
|
||
curl http://localhost:3000/api/v1/admin/users \\
|
||
-H "Authorization: Bearer ADMIN_JWT_TOKEN"
|
||
\`\`\`
|
||
|
||
### Admin - Rol Değiştirme
|
||
\`\`\`bash
|
||
curl -X PATCH http://localhost:3000/api/v1/admin/users/USER_ID/role \\
|
||
-H "Authorization: Bearer ADMIN_JWT_TOKEN" \\
|
||
-H "Content-Type: application/json" \\
|
||
-d '{"role":"moderator"}'
|
||
\`\`\`
|
||
|
||
Detaylı API dokümantasyonu: **http://localhost:3000/api-docs**
|
||
|
||
## 🎯 Sayfalar
|
||
|
||
- \`/\` - Anasayfa
|
||
- \`/login\` - Giriş yap
|
||
- \`/register\` - Kayıt ol (REGISTER_ENABLE=true ise)
|
||
- \`/upload\` - Resim yükle
|
||
- \`/profile\` - Profil ve resimlerim
|
||
- \`/admin\` - Admin panel (sadece adminler)
|
||
- \`/api-docs\` - API dokümantasyonu
|
||
|
||
## 🔒 Güvenlik Özellikleri
|
||
|
||
1. **Password Hashing**: bcrypt ile şifreler güvenle saklanır
|
||
2. **JWT Tokens**: 7 günlük geçerlilik süresi
|
||
3. **Role-Based Access**: Endpoint bazında yetkilendirme
|
||
4. **Session Management**: Better Auth ile güvenli session yönetimi
|
||
5. **CORS**: Yapılandırılabilir CORS desteği
|
||
6. **Environment Variables**: Hassas bilgiler .env'de
|
||
|
||
## 📊 Database Schema
|
||
|
||
### Tables
|
||
- \`user\` - Kullanıcı bilgileri (email, password_hash, role)
|
||
- \`session\` - Aktif oturumlar
|
||
- \`account\` - OAuth provider hesapları
|
||
- \`verification\` - Email doğrulama
|
||
- \`images\` - Yüklenen resimler
|
||
- \`apiKeys\` - API anahtarları
|
||
|
||
## 🐳 Docker Production Build
|
||
|
||
\`\`\`bash
|
||
# Build image
|
||
docker build -t image-api .
|
||
|
||
# Run with docker-compose
|
||
docker compose up -d
|
||
|
||
# Check logs
|
||
docker compose logs -f image-api
|
||
\`\`\`
|
||
|
||
## 📝 Scripts
|
||
|
||
\`\`\`bash
|
||
yarn dev # Development server
|
||
yarn build # Production build
|
||
yarn start # Production server
|
||
yarn lint # ESLint
|
||
yarn db:generate # Generate migrations
|
||
yarn db:push # Push schema to DB
|
||
yarn db:studio # Drizzle Studio
|
||
\`\`\`
|
||
|
||
## 🤝 Katkıda Bulunma
|
||
|
||
1. Fork edin
|
||
2. Feature branch oluşturun (\`git checkout -b feature/amazing\`)
|
||
3. Commit edin (\`git commit -m 'Add amazing feature'\`)
|
||
4. Push edin (\`git push origin feature/amazing\`)
|
||
5. Pull Request açın
|
||
|
||
## 📄 Lisans
|
||
|
||
MIT
|
||
|
||
## 👨💻 Geliştirici
|
||
|
||
Beyhan Oğur - [beyhan@beyhan.dev](mailto:beyhan@beyhan.dev)
|
||
|
||
---
|
||
|
||
**Daha fazla bilgi için:**
|
||
- [API Documentation](./API_README.md)
|
||
- [Admin Panel Guide](./ADMIN_PANEL.md)
|
||
- [Docker Setup](./DOCKER.md)
|
||
- [Security Guide](./SECURITY.md)
|