first commit

This commit is contained in:
Beyhan Oğur
2026-04-26 21:37:58 +03:00
commit 8b1fbdee99
104 changed files with 23398 additions and 0 deletions

386
ROLE_UPDATE_FIX.md Normal file
View File

@@ -0,0 +1,386 @@
# ✅ Rol Güncelleme Sorunu Çözüldü!
## 🐛 Sorun
```bash
PUT /v1/admin/users/54687716-1aed-41ff-aa13-bb05dd7f34e7
Request:
{
"email": "beyhan@beyhan.dev",
"user_name": "Beyhan Oğur",
"roles": ["admin"],
"email_verified": true
}
Sonuç:
✅ Email güncellendi
✅ Username güncellendi
✅ email_verified güncellendi
❌ Roles güncellenmedi
```
---
## 🔍 Kök Neden
`UpdateUser` handler'ında `roles` field'ı input struct'ında yoktu:
```go
// ❌ Önce
var input struct {
Email *string `json:"email"`
Password *string `json:"password"`
UserName *string `json:"user_name"`
EmailVerified *bool `json:"email_verified"`
// roles yok!
}
```
Gelen JSON'daki `roles` field'ı parse edilmiyordu.
---
## ✅ Çözüm
### 1. Input Struct'ına Roles Eklendi
```go
// ✅ Sonra
var input struct {
Email *string `json:"email"`
Password *string `json:"password"`
UserName *string `json:"user_name"`
EmailVerified *bool `json:"email_verified"`
Roles []string `json:"roles"` // ✅ Eklendi
}
```
### 2. Rol Güncelleme Mantığı Eklendi
```go
// Update basic user fields
if err := h.userService.UpdateUser(userID, updates); err != nil {
c.JSON(http.StatusInternalServerError, gin.H{"error": "Failed to update user"})
return
}
// ✅ Update roles if provided
if input.Roles != nil && len(input.Roles) > 0 {
if err := h.userService.AssignRoles(userID, input.Roles); err != nil {
c.JSON(http.StatusInternalServerError, gin.H{"error": "Failed to update roles: " + err.Error()})
return
}
}
// Get updated user to return (with roles)
user, err := h.userService.GetUserByID(userID)
// ...
```
---
## 🎯 Şimdi Nasıl Çalışıyor
### 1. Sadece Rol Güncelleme
```bash
curl -X PUT http://localhost:8080/v1/admin/users/54687716-1aed-41ff-aa13-bb05dd7f34e7 \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"roles": ["admin"]
}'
```
**Response:**
```json
{
"message": "User updated successfully",
"user": {
"id": "54687716-1aed-41ff-aa13-bb05dd7f34e7",
"email": "beyhan@beyhan.dev",
"username": "Beyhan Oğur",
"roles": [
{
"id": "role-uuid",
"name": "admin",
"description": "Default admin role"
}
]
}
}
```
### 2. Email + Username + Rol Birlikte
```bash
curl -X PUT http://localhost:8080/v1/admin/users/54687716-1aed-41ff-aa13-bb05dd7f34e7 \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"email": "beyhan@beyhan.dev",
"user_name": "Beyhan Oğur",
"roles": ["admin"],
"email_verified": true
}'
```
**Artık Tümü Güncelleniyor:**
- ✅ Email
- ✅ Username
- ✅ Roles (admin)
- ✅ Email verified
### 3. Birden Fazla Rol
```bash
curl -X PUT http://localhost:8080/v1/admin/users/54687716-1aed-41ff-aa13-bb05dd7f34e7 \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"roles": ["admin", "user"]
}'
```
---
## 📊 Özellikler
### ✅ Tüm Alanlar Tek İstekle Güncellenebilir
| Field | Type | Örnek |
|-------|------|-------|
| `email` | string | "beyhan@beyhan.dev" |
| `user_name` | string | "Beyhan Oğur" |
| `password` | string | "NewPass123!" |
| `email_verified` | boolean | true |
| `roles` | string[] | ["admin"] veya ["admin", "user"] |
### ✅ Partial Update Destekleniyor
```bash
# Sadece rol
{"roles": ["admin"]}
# Sadece email
{"email": "new@example.com"}
# Rol + Email
{"email": "new@example.com", "roles": ["admin"]}
# Hepsi
{
"email": "new@example.com",
"user_name": "newname",
"roles": ["admin"],
"email_verified": true
}
```
### ✅ Rol Değiştirme
```bash
# User'dan Admin'e
{"roles": ["admin"]}
# Admin'den User'a
{"roles": ["user"]}
# Her ikisi de
{"roles": ["admin", "user"]}
# Rolü kaldırma (boş liste)
{"roles": []}
```
---
## 🧪 Test Senaryoları
### Test 1: Normal Kullanıcıyı Admin Yap
```bash
# 1. Kullanıcıyı bul
curl -X GET "http://localhost:8080/v1/admin/users/search?q=user@example.com" \
-H "Authorization: Bearer $TOKEN"
# 2. Kullanıcıyı admin yap
USER_ID="user-uuid-here"
curl -X PUT "http://localhost:8080/v1/admin/users/$USER_ID" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"roles": ["admin"]
}'
# 3. Doğrula
curl -X GET "http://localhost:8080/v1/admin/users/$USER_ID" \
-H "Authorization: Bearer $TOKEN"
```
### Test 2: Admin'i Normal Kullanıcı Yap
```bash
curl -X PUT "http://localhost:8080/v1/admin/users/$USER_ID" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"roles": ["user"]
}'
```
### Test 3: Tüm Bilgileri Birlikte Güncelle
```bash
curl -X PUT "http://localhost:8080/v1/admin/users/$USER_ID" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"email": "tamamen-yeni@example.com",
"user_name": "Yeni İsim",
"password": "YeniSifre123!",
"roles": ["admin"],
"email_verified": true
}'
```
---
## 💻 JavaScript Örneği
```javascript
async function updateUserWithRoles(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)
});
const result = await response.json();
if (response.ok) {
console.log('✅ Güncelleme başarılı:', result.message);
console.log('📊 Güncellenmiş kullanıcı:', result.user);
console.log('🎭 Yeni roller:', result.user.roles);
return result.user;
} else {
console.error('❌ Hata:', result.error);
throw new Error(result.error);
}
}
// Kullanım Örnekleri
// 1. Kullanıcıyı admin yap
await updateUserWithRoles('54687716-1aed-41ff-aa13-bb05dd7f34e7', {
roles: ['admin']
});
// 2. Email + rol güncelle
await updateUserWithRoles('54687716-1aed-41ff-aa13-bb05dd7f34e7', {
email: 'beyhan@beyhan.dev',
user_name: 'Beyhan Oğur',
roles: ['admin'],
email_verified: true
});
// 3. Birden fazla rol ata
await updateUserWithRoles('54687716-1aed-41ff-aa13-bb05dd7f34e7', {
roles: ['admin', 'user']
});
```
---
## 📁 Güncellenen Dosyalar
1.`api/handlers/user_management_handler.go`
- Input struct'a `Roles []string` eklendi
- Rol güncelleme mantığı eklendi
- `AssignRoles` service çağrısı eklendi
2.`USER_UPDATE_GUIDE.md`
- Roles field dokümante edildi
- Yeni örnekler eklendi
3.`USER_MANAGEMENT_API.md`
- PUT endpoint güncellendi
- Rol güncelleme örnekleri eklendi
---
## 🎊 Artık Çalışıyor!
### Önce
```bash
PUT /v1/admin/users/:id
{
"email": "new@example.com",
"roles": ["admin"] # ❌ Güncellenmiyordu
}
```
### Şimdi
```bash
PUT /v1/admin/users/:id
{
"email": "new@example.com",
"roles": ["admin"] # ✅ Güncelleniyor!
}
Response:
{
"message": "User updated successfully",
"user": {
"email": "new@example.com",
"roles": [{"name": "admin"}] # ✅ Güncellenmiş!
}
}
```
---
## 🚀 Hemen Deneyin
```bash
# 1. Admin giriş
curl -X POST http://localhost:8080/v1/auth/login \
-H "Content-Type: application/json" \
-d '{"email":"admin@gauth.local","password":"Admin@123"}'
# Token'ı kaydet
TOKEN="your-token-here"
# 2. Kullanıcı güncelle (rol dahil)
curl -X PUT http://localhost:8080/v1/admin/users/54687716-1aed-41ff-aa13-bb05dd7f34e7 \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"email": "beyhan@beyhan.dev",
"user_name": "Beyhan Oğur",
"roles": ["admin"],
"email_verified": true
}'
# 3. Response'da tüm güncellemeleri göreceksiniz! ✅
```
---
## ✅ Sorun Tamamen Çözüldü!
**Artık tek bir PUT isteği ile:**
- ✅ Email güncelleyebilirsiniz
- ✅ Username değiştirebilirsiniz
- ✅ Şifre sıfırlayabilirsiniz
- ✅ Email doğrulaması aktif edebilirsiniz
-**Rolleri güncelleyebilirsiniz** 🎉
**Roller artık tam çalışıyor! 🎊**