# Proje: GAuth-Central (Go-Gin Merkezi Kimlik Doğrulama Servisi)

## 1. Proje Özeti
Bu proje, birden fazla istemci uygulama (backend) için merkezi bir kimlik doğrulama ve yetkilendirme (Identity Provider) hizmeti sunar. Go (Gin Framework) ile geliştirilecek olan bu servis; klasik e-posta kaydı, Google ve GitHub OAuth2 girişlerini yönetir ve başarılı giriş sonrası JWT (JSON Web Token) üretir.

## 2. Teknoloji Yığını
- **Dil:** Go 1.25.7 (Golang)
- **Web Framework:** Gin Gonic
- **Veritabanı:** PostgreSQL (GORM üzerinden)
- **Kimlik Doğrulama:** 
    - JWT (github.com/golang-jwt/jwt/v5)
    - OAuth2 (golang.org/x/oauth2 ve github.com/markbates/goth)
- **Güvenlik:** Bcrypt (şifre hashleme), CORS, Rate Limiting.

## 3. Klasör Yapısı
```text
/atahango
├── /api
│   ├── /handlers      # HTTP istek işleyicileri
│   ├── /middlewares   # JWT ve Auth kontrolleri
│   └── /routes        # Route tanımları
├── /config            # Env ve Konfigürasyon yönetimi
├── /internal
│   ├── /models        # DB Modelleri (User, SocialAccount)
│   ├── /services      # Auth ve JWT iş mantığı
│   └── /database      # DB Bağlantısı ve Migration
├── /pkg               # Yardımcı araçlar (utils)
├── .env               # Gizli anahtarlar
├── go.mod
└── main.go
```

## 4. Veritabanı Modeli (GORM)
- **User:** `ID`, `Email`, `Password` (hash), `CreatedAt`, `UpdatedAt`.
- **SocialAccount:** `ID`, `UserID` (FK), `Provider` (google/github), `ProviderID`, `Email`.

## 5. API Uç Noktaları (Endpoints)

### Klasik Auth
- `POST /v1/auth/register`: E-posta ve şifre ile kayıt.
- `POST /v1/auth/login`: E-posta ve şifre ile giriş -> JWT döner.

### OAuth2 (Social Login)
- `GET /v1/auth/:provider`: (google/github) Kullanıcıyı ilgili platforma yönlendirir.
- `GET /v1/auth/:provider/callback`: Platformdan dönen veriyi işler, kullanıcıyı DB'de eşleştirir/oluşturur -> JWT döner.

### Doğrulama ve Yönetim
- `GET /v1/auth/validate`: İstemci uygulama (Django) bu endpoint'e JWT gönderir, servis kullanıcı bilgilerini doğrular.
- `POST /v1/auth/refresh`: Refresh token ile yeni Access Token üretimi.

## 6. JWT Tasarımı
- **Payload:**
    ```json
    {
      "sub": "user_uuid",
      "email": "user@example.com",
      "exp": 1738500000,
      "iss": "gauth-central"
    }
    ```
- **İmzalama:** HS256 veya RS256 algoritması kullanılmalıdır.

## 7. İstemci Entegrasyon Mantığı (Örn: Django)
1. Django, kullanıcıyı `GAuth/v1/auth/google` adresine yönlendirir.
2. GAuth işlemi tamamlar ve kullanıcıyı Django'nun callback URL'ine bir `?token=...` query parametresi ile geri gönderir.
3. Django, bu token'ı alır ve kendi session'ını oluşturmak için GAuth'un `/v1/auth/validate` servisini kullanır.

## 8. Gemini İçin Talimatlar (Implementation Rules)
- Kodları modüler yaz (Handlers, Services, Models ayrımı).
- `.env` dosyasından `CLIENT_ID`, `CLIENT_SECRET` ve `JWT_SECRET` okumayı unutma.
- Hata yönetimini (Error Handling) profesyonelce yap ve JSON formatında hata mesajları dön.
- CORS ayarlarını tüm istemciler (Django vb.) için yapılandırılabilir kıl.
- `github.com/markbates/goth` kütüphanesini kullanarak multi-provider desteğini uygula.

---
**Not:** Bu dosya projenin teknik rehberidir. Kod üretim aşamasında bu mimariye sadık kalınmalıdır.