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:

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:

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:

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:

SELECT id, email, provider, role, created_at
FROM users
ORDER BY created_at DESC;

Misafir kullanicilar:

SELECT id, email, created_at
FROM users
WHERE role = 'guest'
ORDER BY created_at DESC;

Bugunku kullanımlar:

SELECT *
FROM usage_counters
WHERE period_type = 'day'
ORDER BY updated_at DESC;

Hesapli kullanicilarin gunluk soru sayilari:

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:

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.