first commit

This commit is contained in:
Beyhan Oğur
2026-04-26 21:35:24 +03:00
commit bbbf76b184
592 changed files with 246870 additions and 0 deletions

View File

@@ -0,0 +1,442 @@
# 🔧 Kullanıcı Güncelleme API Rehberi
## PUT /v1/admin/users/:id
Kullanıcı bilgilerini güncelleme endpoint'i (Sadece admin).
---
## 📋 Endpoint Detayları
```
Method: PUT
Path: /v1/admin/users/{user_id}
Auth: Required (Admin role)
Content-Type: application/json
```
---
## 🔐 Authentication
Bu endpoint admin rolü gerektirir:
```bash
Authorization: Bearer {admin_access_token}
```
---
## 📥 Request Body
Tüm alanlar **optional**'dir. Sadece güncellemek istediğiniz alanları gönderin.
```json
{
"email": "newemail@example.com",
"user_name": "newusername",
"password": "NewPassword123!",
"email_verified": true,
"roles": ["admin", "user"]
}
```
### Field Açıklamaları
| Field | Type | Required | Açıklama |
|-------|------|----------|----------|
| `email` | string | ❌ | Yeni email adresi |
| `user_name` | string | ❌ | Yeni kullanıcı adı |
| `password` | string | ❌ | Yeni şifre (otomatik hash'lenir) |
| `email_verified` | boolean | ❌ | Email doğrulama durumu |
| `roles` | string[] | ❌ | Kullanıcı rolleri (["admin"], ["user"], ["admin","user"]) |
---
## 📤 Response
### Success (200 OK)
```json
{
"message": "User updated successfully",
"user": {
"id": "54687716-1aed-41ff-aa13-bb05dd7f34e7",
"email": "newemail@example.com",
"username": "newusername",
"email_verified": true,
"created_at": "2026-02-04T00:00:00Z",
"updated_at": "2026-02-04T02:45:00Z",
"roles": [
{
"id": "role-uuid",
"name": "user",
"description": "Default user role"
}
],
"social_accounts": []
}
}
```
### Error Responses
#### 400 Bad Request
```json
{
"error": "invalid input format"
}
```
#### 401 Unauthorized
```json
{
"error": "Unauthorized"
}
```
#### 403 Forbidden
```json
{
"error": "Admin access required"
}
```
#### 404 Not Found
```json
{
"error": "User not found"
}
```
#### 500 Internal Server Error
```json
{
"error": "Failed to update user"
}
```
---
## 🧪 Kullanım Örnekleri
### 1. Sadece Email Güncelleme
```bash
curl -X PUT http://localhost:8080/v1/admin/users/54687716-1aed-41ff-aa13-bb05dd7f34e7 \
-H "Authorization: Bearer YOUR_ADMIN_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"email": "yeni-email@example.com"
}'
```
### 2. Sadece Username Güncelleme
```bash
curl -X PUT http://localhost:8080/v1/admin/users/54687716-1aed-41ff-aa13-bb05dd7f34e7 \
-H "Authorization: Bearer YOUR_ADMIN_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"user_name": "yenikullaniciadi"
}'
```
### 3. Şifre Sıfırlama
```bash
curl -X PUT http://localhost:8080/v1/admin/users/54687716-1aed-41ff-aa13-bb05dd7f34e7 \
-H "Authorization: Bearer YOUR_ADMIN_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"password": "YeniGüvenliŞifre123!"
}'
```
### 4. Email Doğrulamayı Aktif Etme
```bash
curl -X PUT http://localhost:8080/v1/admin/users/54687716-1aed-41ff-aa13-bb05dd7f34e7 \
-H "Authorization: Bearer YOUR_ADMIN_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"email_verified": true
}'
```
### 5. Birden Fazla Alan Güncelleme
```bash
curl -X PUT http://localhost:8080/v1/admin/users/54687716-1aed-41ff-aa13-bb05dd7f34e7 \
-H "Authorization: Bearer YOUR_ADMIN_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"email": "yeni@example.com",
"user_name": "yeniadi",
"password": "YeniŞifre123!",
"email_verified": true
}'
```
### 6. Kullanıcıyı Admin Yapma
```bash
curl -X PUT http://localhost:8080/v1/admin/users/54687716-1aed-41ff-aa13-bb05dd7f34e7 \
-H "Authorization: Bearer YOUR_ADMIN_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"roles": ["admin"]
}'
```
### 7. Kullanıcıya Birden Fazla Rol Atama
```bash
curl -X PUT http://localhost:8080/v1/admin/users/54687716-1aed-41ff-aa13-bb05dd7f34e7 \
-H "Authorization: Bearer YOUR_ADMIN_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"roles": ["admin", "user"]
}'
```
### 8. Tüm Bilgileri Güncelleme (Email, Username, Roles)
```bash
curl -X PUT http://localhost:8080/v1/admin/users/54687716-1aed-41ff-aa13-bb05dd7f34e7 \
-H "Authorization: Bearer YOUR_ADMIN_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"email": "beyhan@beyhan.dev",
"user_name": "Beyhan Oğur",
"roles": ["admin"],
"email_verified": true
}'
```
---
## 💻 JavaScript/TypeScript Örneği
### Fetch API
```javascript
async function updateUser(userId, updates) {
const token = localStorage.getItem('admin_token');
const response = await fetch(`http://localhost:8080/v1/admin/users/${userId}`, {
method: 'PUT',
headers: {
'Authorization': `Bearer ${token}`,
'Content-Type': 'application/json'
},
body: JSON.stringify(updates)
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.error);
}
return response.json();
}
// Kullanım
try {
const result = await updateUser('54687716-1aed-41ff-aa13-bb05dd7f34e7', {
email: 'yeni@example.com',
user_name: 'yeniadi'
});
console.log('Güncelleme başarılı:', result.message);
console.log('Güncellenmiş kullanıcı:', result.user);
} catch (error) {
console.error('Güncelleme hatası:', error.message);
}
```
### Axios
```javascript
import axios from 'axios';
const api = axios.create({
baseURL: 'http://localhost:8080/v1',
headers: {
'Content-Type': 'application/json'
}
});
// Add token interceptor
api.interceptors.request.use(config => {
const token = localStorage.getItem('admin_token');
if (token) {
config.headers.Authorization = `Bearer ${token}`;
}
return config;
});
// Update user function
async function updateUser(userId, updates) {
try {
const { data } = await api.put(`/admin/users/${userId}`, updates);
return data;
} catch (error) {
throw error.response?.data || error;
}
}
// Kullanım
updateUser('54687716-1aed-41ff-aa13-bb05dd7f34e7', {
email: 'yeni@example.com',
email_verified: true
})
.then(result => {
console.log('Başarılı:', result.message);
console.log('Kullanıcı:', result.user);
})
.catch(error => {
console.error('Hata:', error.error);
});
```
---
## 🔄 Complete Flow: Admin ile Kullanıcı Güncelleme
### 1. Admin Olarak Giriş Yapın
```bash
curl -X POST http://localhost:8080/v1/auth/login \
-H "Content-Type: application/json" \
-d '{
"email": "admin@gauth.local",
"password": "Admin@123"
}'
```
**Response:**
```json
{
"access_token": "eyJhbGciOiJIUz...",
"user": {
"id": "admin-uuid",
"email": "admin@gauth.local",
"roles": [{"name": "admin"}]
}
}
```
Token'ı kaydedin:
```bash
TOKEN="eyJhbGciOiJIUz..."
```
### 2. Kullanıcıyı Bulun
```bash
# ID biliyorsanız direkt kullanın
# veya arama yapın:
curl -X GET "http://localhost:8080/v1/admin/users/search?q=kullanici@example.com" \
-H "Authorization: Bearer $TOKEN"
```
### 3. Kullanıcıyı Güncelleyin
```bash
USER_ID="54687716-1aed-41ff-aa13-bb05dd7f34e7"
curl -X PUT "http://localhost:8080/v1/admin/users/$USER_ID" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"email": "yeni-email@example.com",
"user_name": "yenikullanici",
"email_verified": true
}'
```
### 4. Güncellemeyi Doğrulayın
```bash
curl -X GET "http://localhost:8080/v1/admin/users/$USER_ID" \
-H "Authorization: Bearer $TOKEN"
```
---
## ⚠️ Önemli Notlar
1. **Şifre Hash'leme**: Şifre otomatik olarak bcrypt ile hash'lenir, plain text göndermeniz yeterli
2. **Partial Update**: Sadece göndermek istediğiniz alanları gönderin, diğerleri değişmez
3. **Email Unique Kontrolü**: Email zaten başka bir kullanıcıda varsa hata alırsınız
4. **Kendi Hesabınız**: Kendi admin hesabınızı da güncelleyebilirsiniz (ama silemezsiniz)
5. **Güncellenen Kullanıcı**: Response'da güncellenmiş kullanıcı bilgileri döner
---
## 🐛 Sorun Giderme
### Güncelleme Yapılmıyor
**Sorun:** Response "User updated successfully" döndürüyor ama güncelleme yok.
**Çözüm:** ✅ Bu sorun düzeltildi! Şimdi:
- Kullanıcı önce database'den getiriliyor
- Updates direkt user instance'ına uygulanıyor
- Güncellenmiş kullanıcı response'da dönüyor
### Token Hatası
**Sorun:** "Unauthorized" hatası
**Çözüm:**
- Token'ın doğru olduğundan emin olun
- Token'ın expire olmadığını kontrol edin
- `Bearer` prefix'ini unutmayın
### Admin Rolü Hatası
**Sorun:** "Admin access required"
**Çözüm:**
- Kullanıcınızın admin rolü olduğundan emin olun
- Rolleri kontrol edin: `GET /v1/auth/me`
---
## 📚 İlgili Endpoint'ler
- `GET /v1/admin/users` - Tüm kullanıcıları listele
- `GET /v1/admin/users/:id` - Kullanıcı detayı
- `POST /v1/admin/users` - Yeni kullanıcı oluştur
- `DELETE /v1/admin/users/:id` - Kullanıcı sil
- `POST /v1/admin/users/:id/roles` - Rol ata
---
## ✅ Özet
**Endpoint:** `PUT /v1/admin/users/{id}`
**Ne Yapabilirsiniz:**
- ✅ Email güncelleme
- ✅ Username değiştirme
- ✅ Şifre sıfırlama
- ✅ Email doğrulama durumu değiştirme
- ✅ Birden fazla alanı aynı anda güncelleme
**Response:**
- ✅ Başarı mesajı
- ✅ Güncellenmiş kullanıcı bilgileri
**Güvenlik:**
- ✅ Admin authentication gerekli
- ✅ Şifre otomatik hash'lenir
- ✅ Partial update desteklenir
**Artık kullanıcı güncelleme tamamen çalışıyor! 🎉**