bal-chatbot / docs /neon_postgresql.md
brk9999's picture
Upload 54 files
adf3782 verified
|
Raw
History Blame Contribute Delete
2.48 kB
# 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.