# Admin Kullanıcı Oluşturma

## Komut

Admin kullanıcı oluşturmak için:

```bash
./main seed-admin
```

## Varsayılan Admin Bilgileri

Komut çalıştırıldığında aşağıdaki bilgilerle admin kullanıcı oluşturulur:

- **Email:** `admin@gauth.local`
- **Password:** `Admin@123`
- **Username:** `admin`
- **Role:** `admin` (tüm yetkiler)

## Güvenlik Uyarısı

⚠️ **İlk login sonrası şifrenizi mutlaka değiştirin!**

## Login Testi

Admin ile login:

```bash
curl -X POST http://localhost:8080/v1/auth/login \
  -H "Content-Type: application/json" \
  -d '{
    "email": "admin@gauth.local",
    "password": "Admin@123"
  }'
```

**Başarılı Yanıt:**
```json
{
  "access_token": "...",
  "refresh_token": "...",
  "user_id": "...",
  "username": "admin",
  "email": "admin@gauth.local",
  "roles": [
    {
      "name": "admin",
      "permissions": [
        {"name": "user:read"},
        {"name": "user:write"},
        {"name": "admin:access"}
      ]
    }
  ]
}
```

## Admin Yetkili Endpoint'ler

Admin kullanıcısı aşağıdaki endpoint'lere erişebilir:

### Kullanıcı Yönetimi

```bash
# Tüm kullanıcıları listele
GET /v1/admin/users

# Kullanıcı ara
GET /v1/admin/users/search?q=email@example.com

# Kullanıcı detayı
GET /v1/admin/users/{user_id}

# Yeni kullanıcı oluştur
POST /v1/admin/users

# Kullanıcı güncelle
PUT /v1/admin/users/{user_id}

# Kullanıcı sil (soft delete)
DELETE /v1/admin/users/{user_id}

# Kullanıcı sil (hard delete - kalıcı)
DELETE /v1/admin/users/{user_id}?hard=true

# Kullanıcıya rol ata
POST /v1/admin/users/{user_id}/roles

# Kullanıcıdan rol kaldır
DELETE /v1/admin/users/{user_id}/roles/{role_name}
```

### CORS Ayarları

```bash
# CORS Whitelist
GET /v1/settings/cors/whitelist
POST /v1/settings/cors/whitelist
PUT /v1/settings/cors/whitelist/{id}
DELETE /v1/settings/cors/whitelist/{id}

# CORS Blacklist
GET /v1/settings/cors/blacklist
POST /v1/settings/cors/blacklist
PUT /v1/settings/cors/blacklist/{id}
DELETE /v1/settings/cors/blacklist/{id}
```

### Rate Limit Ayarları

```bash
# Rate limit ayarları
GET /v1/settings/ratelimit
PUT /v1/settings/ratelimit/{id}
```

## Örnek: Admin Token ile API Kullanımı

```bash
# 1. Admin login
RESPONSE=$(curl -s -X POST http://localhost:8080/v1/auth/login \
  -H "Content-Type: application/json" \
  -d '{"email":"admin@gauth.local","password":"Admin@123"}')

# 2. Token'ı al
TOKEN=$(echo $RESPONSE | jq -r '.access_token')

# 3. Kullanıcıları listele
curl -X GET http://localhost:8080/v1/admin/users \
  -H "Authorization: Bearer $TOKEN"
```

## Hard Delete (Kalıcı Silme) Örnekleri

### 1. Önce Kullanıcı ID'sini Bul

```bash
# Admin login ve token al
TOKEN=$(curl -s -X POST http://localhost:8080/v1/auth/login \
  -H "Content-Type: application/json" \
  -d '{"email":"admin@gauth.local","password":"Admin@123"}' | jq -r '.access_token')

# Email ile kullanıcı ara
curl -X GET "http://localhost:8080/v1/admin/users/search?q=test@example.com" \
  -H "Authorization: Bearer $TOKEN"
```

**Yanıt örneği:**
```json
{
  "users": [
    {
      "id": "6df5465d-b8e6-44d2-970a-f682cb428e80",
      "username": "testuser",
      "email": "test@example.com",
      "email_verified": false
    }
  ]
}
```

### 2. Soft Delete (Varsayılan)

Kullanıcı `deleted_at` timestamp ile işaretlenir, veritabanından silinmez:

```bash
# Soft delete
curl -X DELETE "http://localhost:8080/v1/admin/users/6df5465d-b8e6-44d2-970a-f682cb428e80" \
  -H "Authorization: Bearer $TOKEN"
```

**Başarılı Yanıt:**
```json
{
  "message": "User deleted soft successfully"
}
```

### 3. Hard Delete (Kalıcı Silme)

Kullanıcı ve tüm ilişkili kayıtları (user_roles, social_accounts) kalıcı olarak silinir:

```bash
# Hard delete
curl -X DELETE "http://localhost:8080/v1/admin/users/6df5465d-b8e6-44d2-970a-f682cb428e80?hard=true" \
  -H "Authorization: Bearer $TOKEN"
```

**Başarılı Yanıt:**
```json
{
  "message": "User deleted permanently successfully"
}
```

### 4. Tam Örnek (Login'den Hard Delete'e)

```bash
#!/bin/bash

# Admin login
echo "🔐 Admin login..."
LOGIN_RESPONSE=$(curl -s -X POST http://localhost:8080/v1/auth/login \
  -H "Content-Type: application/json" \
  -d '{"email":"admin@gauth.local","password":"Admin@123"}')

TOKEN=$(echo $LOGIN_RESPONSE | jq -r '.access_token')

if [ "$TOKEN" = "null" ]; then
  echo "❌ Login failed!"
  exit 1
fi

echo "✅ Login successful!"
echo "Token: ${TOKEN:0:20}..."

# Kullanıcı ara
echo ""
echo "🔍 Searching user..."
SEARCH_RESULT=$(curl -s -X GET "http://localhost:8080/v1/admin/users/search?q=test@example.com" \
  -H "Authorization: Bearer $TOKEN")

USER_ID=$(echo $SEARCH_RESULT | jq -r '.users[0].id')

if [ "$USER_ID" = "null" ]; then
  echo "❌ User not found!"
  exit 1
fi

echo "✅ User found!"
echo "User ID: $USER_ID"

# Hard delete
echo ""
echo "🗑️  Hard deleting user..."
DELETE_RESULT=$(curl -s -X DELETE "http://localhost:8080/v1/admin/users/$USER_ID?hard=true" \
  -H "Authorization: Bearer $TOKEN")

echo "Response: $DELETE_RESULT"

# Verify deletion
echo ""
echo "✔️  Verifying deletion..."
VERIFY=$(curl -s -X GET "http://localhost:8080/v1/admin/users/$USER_ID" \
  -H "Authorization: Bearer $TOKEN")

echo "Verification: $VERIFY"
```

### 5. Toplu Silme Scripti

```bash
#!/bin/bash

# Kullanıcıları listele ve hard delete yap
TOKEN=$(curl -s -X POST http://localhost:8080/v1/auth/login \
  -H "Content-Type: application/json" \
  -d '{"email":"admin@gauth.local","password":"Admin@123"}' | jq -r '.access_token')

# Test kullanıcılarını sil (email'i test içeren)
USER_IDS=$(curl -s -X GET "http://localhost:8080/v1/admin/users/search?q=test" \
  -H "Authorization: Bearer $TOKEN" | jq -r '.users[].id')

for USER_ID in $USER_IDS; do
  echo "Deleting user: $USER_ID"
  curl -s -X DELETE "http://localhost:8080/v1/admin/users/$USER_ID?hard=true" \
    -H "Authorization: Bearer $TOKEN"
  echo ""
done
```

## Hard Delete ile Soft Delete Farkları

| Özellik | Soft Delete | Hard Delete |
|---------|-------------|-------------|
| **Komut** | `DELETE /v1/admin/users/{id}` | `DELETE /v1/admin/users/{id}?hard=true` |
| **Veritabanı** | `deleted_at` timestamp set edilir | Tamamen silinir |
| **İlişkili Kayıtlar** | Korunur | Silinir (user_roles, social_accounts) |
| **Geri Getirme** | Mümkün (restore edilebilir) | İmkansız |
| **Kullanım** | Güvenli, varsayılan | Dikkatli kullanılmalı |

## Güvenlik Notları

⚠️ **HARD DELETE DİKKAT:**
- Hard delete **geri alınamaz**
- Tüm kullanıcı verileri kalıcı olarak silinir
- İlişkili tüm kayıtlar (roller, sosyal hesaplar) silinir
- Üretim ortamında dikkatli kullanılmalıdır
- Yedek almadan hard delete yapmayın

## Notlar

- Admin kullanıcı email doğrulaması gerektirmez (`email_verified: true`)
- Admin kullanıcı zaten varsa komut hata vermez
- Soft-deleted admin varsa restore edilir
- Admin rolü otomatik olarak atanır

## Şifre Değiştirme

Admin şifresini değiştirmek için user update endpoint'ini kullanabilirsiniz veya başka bir admin oluşturabilirsiniz.
