Spaces:
Running
Running
| # Neon PostgreSQL Kurulumu | |
| Bu proje kullanici hesaplarini ve kota sayaclarini `DATABASE_URL` ile baglanilan veritabaninda saklar. | |
| ## 1. Neon'da Veritabani Ac | |
| 1. Neon dashboard'da yeni bir project olustur. | |
| 2. `Connection string` alanindan PostgreSQL URL'sini kopyala. | |
| 3. URL'nin sonunda `sslmode=require` oldugundan emin ol. | |
| Ornek format: | |
| ```env | |
| DATABASE_URL=postgresql://USER:PASSWORD@HOST.neon.tech/DB?sslmode=require | |
| ``` | |
| Kod bu URL'yi otomatik olarak SQLAlchemy'nin `postgresql+psycopg://` surucusune cevirir. | |
| ## 2. .env Ayari | |
| `.env` dosyasinda su alanlari doldur: | |
| ```env | |
| DATABASE_URL=postgresql://USER:PASSWORD@HOST.neon.tech/DB?sslmode=require | |
| FLASK_SECRET_KEY=uzun-rastgele-bir-deger | |
| GOOGLE_CLIENT_ID=google-web-client-id | |
| ADMIN_EMAILS=admin@example.com | |
| ``` | |
| `FLASK_SECRET_KEY` icin ornek uretim: | |
| ```bash | |
| python3 -c "import secrets; print(secrets.token_hex(32))" | |
| ``` | |
| ## 3. Tablolar | |
| Uygulama ilk acilista tablolari otomatik olusturur. | |
| Neon Table Editor'da sunlari goreceksin: | |
| - `users`: hesap acan veya Google ile giris yapan kullanicilar | |
| - `usage_counters`: gunluk ve dakikalik soru limitleri | |
| Misafirler de `users` tablosunda tutulur: | |
| - `provider = 'guest'` | |
| - `role = 'guest'` | |
| - `email = 'guest-...@guest.local'` | |
| Bu sayede misafir kotasi sadece tarayici ekraninda degil, veritabaninda da kalici izlenir. | |
| ## 4. Kontrol SQL'leri | |
| Son kayit olan kullanicilar: | |
| ```sql | |
| SELECT id, email, provider, role, created_at | |
| FROM users | |
| ORDER BY created_at DESC; | |
| ``` | |
| Misafir kullanicilar: | |
| ```sql | |
| SELECT id, email, created_at | |
| FROM users | |
| WHERE role = 'guest' | |
| ORDER BY created_at DESC; | |
| ``` | |
| Bugunku kullanımlar: | |
| ```sql | |
| SELECT * | |
| FROM usage_counters | |
| WHERE period_type = 'day' | |
| ORDER BY updated_at DESC; | |
| ``` | |
| Hesapli kullanicilarin gunluk soru sayilari: | |
| ```sql | |
| SELECT u.email, c.period_key, c.count | |
| FROM usage_counters c | |
| JOIN users u ON c.subject_id = u.id::text | |
| WHERE c.subject_type = 'user' | |
| AND c.period_type = 'day' | |
| ORDER BY c.period_key DESC, c.count DESC; | |
| ``` | |
| Misafirlerin gunluk soru sayilari: | |
| ```sql | |
| SELECT u.id, u.email, c.period_key, c.count | |
| FROM usage_counters c | |
| JOIN users u ON c.subject_id = u.id::text | |
| WHERE u.role = 'guest' | |
| AND c.period_type = 'day' | |
| ORDER BY c.period_key DESC, c.count DESC; | |
| ``` | |
| ## 5. Notlar | |
| - Sifreler duz metin olarak saklanmaz; `password_hash` olarak tutulur. | |
| - `DATABASE_URL` bos kalirsa uygulama lokal gelistirme icin `data/app.db` SQLite dosyasini kullanir. | |
| - Production'da `DATABASE_URL` mutlaka Neon PostgreSQL URL'si olmalidir. | |