first commit

This commit is contained in:
Beyhan Oğur
2026-04-26 22:09:32 +03:00
commit 71eff2d979
78 changed files with 10173 additions and 0 deletions

351
API_README.md Normal file
View File

@@ -0,0 +1,351 @@
# Image API - Resim Manipülasyon API Dokümantasyonu
Bu API, dış uygulamaların resim yükleme, manipülasyon ve yönetim işlemlerini yapmasına olanak tanır.
## Base URL
```
https://image.beyhano.com.tr
# veya development için
http://localhost:3000
```
## Authentication
API, JWT token tabanlı kimlik doğrulama kullanır. Her istekte `Authorization` header'ında Bearer token gönderilmelidir.
```
Authorization: Bearer <your_jwt_token>
```
## Endpoints
### 1. Kayıt Ol (Register)
Yeni kullanıcı kaydı oluşturur ve JWT token döner.
**Endpoint:** `POST /api/v1/auth/register`
**Request Body:**
```json
{
"email": "user@example.com",
"password": "minimum8karakter",
"name": "Kullanıcı Adı"
}
```
**Response (200):**
```json
{
"success": true,
"message": "Kayıt başarılı",
"data": {
"user": {
"id": "user_123abc",
"email": "user@example.com",
"name": "Kullanıcı Adı"
},
"accessToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."
}
}
```
**Hata Kodları:**
- `400` - Gerekli alanlar eksik veya geçersiz
- `409` - Email adresi zaten kullanımda
- `500` - Sunucu hatası
---
### 2. Giriş Yap (Login)
Mevcut kullanıcı ile giriş yapar ve JWT token döner.
**Endpoint:** `POST /api/v1/auth/login`
**Request Body:**
```json
{
"email": "user@example.com",
"password": "minimum8karakter"
}
```
**Response (200):**
```json
{
"success": true,
"message": "Giriş başarılı",
"data": {
"user": {
"id": "user_123abc",
"email": "user@example.com",
"name": "Kullanıcı Adı"
},
"accessToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."
}
}
```
**Hata Kodları:**
- `400` - Email veya şifre eksik
- `401` - Geçersiz email veya şifre
- `500` - Sunucu hatası
---
### 3. Resim Yükle ve Manipüle Et
Resim yükler, belirtilen boyut/kalite/formatta işler ve kaydeder.
**Endpoint:** `POST /api/v1/images/upload`
**Headers:**
```
Authorization: Bearer <your_jwt_token>
Content-Type: multipart/form-data
```
**Request Body (FormData):**
- `file` (required): Resim dosyası (max 10MB)
- `width` (optional): Genişlik (px), default: 800, max: 10000
- `height` (optional): Yükseklik (px), default: 600, max: 10000
- `quality` (optional): Kalite (1-100), default: 90
- `format` (optional): Format (jpeg, png, webp, avif), default: jpeg
**cURL Örneği:**
```bash
curl -X POST https://image.beyhano.com.tr/api/v1/images/upload \
-H "Authorization: Bearer YOUR_JWT_TOKEN" \
-F "file=@/path/to/image.jpg" \
-F "width=1920" \
-F "height=1080" \
-F "quality=85" \
-F "format=webp"
```
**Response (200):**
```json
{
"success": true,
"message": "Resim başarıyla yüklendi",
"data": {
"image": {
"id": "img_xyz789",
"url": "https://image.beyhano.com.tr/uploads/xyz789.webp",
"width": 1920,
"height": 1080,
"format": "webp",
"fileSize": 245678
}
}
}
```
**Hata Kodları:**
- `400` - Dosya eksik, boyut çok büyük veya geçersiz tip
- `401` - Geçersiz veya eksik token
- `500` - Sunucu hatası
---
### 4. Resimleri Listele
Kullanıcının tüm resimlerini listeler.
**Endpoint:** `GET /api/v1/images`
**Headers:**
```
Authorization: Bearer <your_jwt_token>
```
**Response (200):**
```json
{
"success": true,
"data": {
"images": [
{
"id": "img_xyz789",
"originalName": "photo.jpg",
"url": "https://image.beyhano.com.tr/uploads/xyz789.webp",
"width": 1920,
"height": 1080,
"quality": 85,
"format": "webp",
"fileSize": 245678,
"createdAt": "2026-01-06T02:00:00.000Z"
}
],
"total": 1
}
}
```
**Hata Kodları:**
- `401` - Geçersiz veya eksik token
- `500` - Sunucu hatası
---
### 5. Resim Sil
Belirtilen ID'ye sahip resmi siler.
**Endpoint:** `DELETE /api/v1/images/{id}`
**Headers:**
```
Authorization: Bearer <your_jwt_token>
```
**cURL Örneği:**
```bash
curl -X DELETE https://image.beyhano.com.tr/api/v1/images/img_xyz789 \
-H "Authorization: Bearer YOUR_JWT_TOKEN"
```
**Response (200):**
```json
{
"success": true,
"message": "Resim başarıyla silindi"
}
```
**Hata Kodları:**
- `401` - Geçersiz veya eksik token
- `404` - Resim bulunamadı veya size ait değil
- `500` - Sunucu hatası
---
## Örnek Kullanım (JavaScript/Node.js)
```javascript
// 1. Kayıt ol
const registerResponse = await fetch('https://image.beyhano.com.tr/api/v1/auth/register', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
email: 'user@example.com',
password: 'securepassword123',
name: 'Kullanıcı'
})
});
const { data } = await registerResponse.json();
const token = data.accessToken;
// 2. Resim yükle
const formData = new FormData();
formData.append('file', fileInput.files[0]);
formData.append('width', '1920');
formData.append('height', '1080');
formData.append('quality', '85');
formData.append('format', 'webp');
const uploadResponse = await fetch('https://image.beyhano.com.tr/api/v1/images/upload', {
method: 'POST',
headers: { 'Authorization': `Bearer ${token}` },
body: formData
});
const uploadData = await uploadResponse.json();
console.log('Yüklenen resim:', uploadData.data.image.url);
// 3. Resimleri listele
const imagesResponse = await fetch('https://image.beyhano.com.tr/api/v1/images', {
headers: { 'Authorization': `Bearer ${token}` }
});
const imagesData = await imagesResponse.json();
console.log('Toplam resim:', imagesData.data.total);
// 4. Resim sil
const deleteResponse = await fetch(`https://image.beyhano.com.tr/api/v1/images/${imageId}`, {
method: 'DELETE',
headers: { 'Authorization': `Bearer ${token}` }
});
const deleteData = await deleteResponse.json();
console.log(deleteData.message);
```
## Örnek Kullanım (Python)
```python
import requests
# 1. Kayıt ol
register_response = requests.post(
'https://image.beyhano.com.tr/api/v1/auth/register',
json={
'email': 'user@example.com',
'password': 'securepassword123',
'name': 'Kullanıcı'
}
)
token = register_response.json()['data']['accessToken']
# 2. Resim yükle
with open('image.jpg', 'rb') as f:
upload_response = requests.post(
'https://image.beyhano.com.tr/api/v1/images/upload',
headers={'Authorization': f'Bearer {token}'},
files={'file': f},
data={
'width': '1920',
'height': '1080',
'quality': '85',
'format': 'webp'
}
)
image_url = upload_response.json()['data']['image']['url']
print(f'Yüklenen resim: {image_url}')
# 3. Resimleri listele
images_response = requests.get(
'https://image.beyhano.com.tr/api/v1/images',
headers={'Authorization': f'Bearer {token}'}
)
images = images_response.json()['data']['images']
print(f'Toplam resim: {len(images)}')
# 4. Resim sil
delete_response = requests.delete(
f'https://image.beyhano.com.tr/api/v1/images/{image_id}',
headers={'Authorization': f'Bearer {token}'}
)
print(delete_response.json()['message'])
```
## Güvenlik
- JWT token'lar 7 gün geçerlidir
- Şifreler bcrypt ile hashlenmiş olarak saklanır
- Token'ları güvenli bir şekilde saklayın
- HTTPS kullanın (production'da)
- Rate limiting uygulanabilir
## Limitler
- Maximum dosya boyutu: 10MB
- Maximum resim boyutu: 10000x10000 px
- Desteklenen formatlar: JPEG, PNG, WebP, AVIF, GIF
- JWT token geçerlilik süresi: 7 gün
## Hata Yönetimi
Tüm hata yanıtları şu formatta döner:
```json
{
"error": "Hata mesajı burada"
}
```
HTTP status kodları:
- `200` - Başarılı
- `400` - Kötü istek (geçersiz parametreler)
- `401` - Kimlik doğrulama hatası
- `404` - Bulunamadı
- `409` - Çakışma (örn: email zaten kullanımda)
- `500` - Sunucu hatası