Mobil uygulamam için Docker, PostgreSQL ve PHP (PDO pgsql sürücüsü kullanarak) mimarisiyle çalışan, JSON yanıtlar üreten ve CORS destekleyen eksiksiz bir REST API backend projesi oluşturmanı istiyorum. Proje Klasör Yapısı şu şekilde olmalı: /sirat-backend ├── docker-compose.yml ├── init.sql (PostgreSQL tabloları için) └── /src ├── db.php (Ortak PostgreSQL PDO bağlantısı ve CORS ayarları) ├── inspiration.php (GET /inspiration.php) ├── sync_kaza.php (POST /sync_kaza.php) └── chat.php (POST /chat.php - Gemini veya OpenAI API entegrasyonlu) Lütfen aşağıdaki gereksinimlere göre tüm bu dosyaların kodlarını eksiksiz şekilde yaz: -------------------------------------------------- 1. docker-compose.yml GEREKSİNİMLERİ: -------------------------------------------------- - İki adet servis barındırsın: "web" (PHP 8.2 Apache) ve "db" (PostgreSQL 15-alpine). - "web" servisi 80 portunu dışarı açsın, "./src" klasörünü "/var/www/html" dizinine bağlasın. PostgreSQL pdo_pgsql sürücülerini otomatik kuran komutu içersin. - "db" servisi 5432 portunu açsın, verileri "pgdata" volume'üne kaydetsin ve "./init.sql" dosyasını "/docker-entrypoint-initdb.d/init.sql" olarak bağlayarak veritabanı kurulduğunda tabloları otomatik oluştursun. - Veritabanı adı: sirat_db, kullanıcı adı: sirat_user, şifre: sirat_pass olsun. -------------------------------------------------- 2. init.sql GEREKSİNİMLERİ: -------------------------------------------------- - "kaza_debts" tablosu oluştur: user_id (VARCHAR unique), sabah, ogle, ikindi, aksam, yatsi, vitir, oruc sütunları (hepsi INT default 0). - "inspiration" tablosu oluştur: verse (TEXT), verse_source, hadith (TEXT), hadith_source. - Tablo oluştuktan sonra "inspiration" tablosuna örnek olarak 1 adet ayet ve hadis içeren INSERT cümlesi ekle. -------------------------------------------------- 3. src/db.php GEREKSİNİMLERİ: -------------------------------------------------- - CORS izinlerini versin (Access-Control-Allow-Origin: * ve gerekli headers/methods). - docker-compose environment değişkenlerinden (DB_HOST, DB_NAME, DB_USER, DB_PASSWORD) veritabanı bilgilerini çekerek PDO ile PostgreSQL bağlantısı kursun. Hata durumunda JSON formatında hata dönsün. -------------------------------------------------- 4. src/inspiration.php GEREKSİNİMLERİ: -------------------------------------------------- - GET isteklerini kabul etsin. - db.php'yi import edip, "inspiration" tablosundaki verilerden rastgele 1 tanesini seçip (SELECT * FROM inspiration ORDER BY RANDOM() LIMIT 1 veya benzeri bir yöntemle) JSON formatında dönsün. -------------------------------------------------- 5. src/sync_kaza.php GEREKSİNİMLERİ: -------------------------------------------------- - POST isteklerini kabul etsin (application/json gövdesini php://input ile okusun). - İstekle gelen kaza verilerini alsın. Eğer o user_id (varsayılan olarak sabit bir id veya istekte gelen bir parametre) tabloda varsa kaza adetlerini UPDATE etsin, yoksa INSERT etsin (ON CONFLICT (user_id) DO UPDATE... PostgreSQL yapısına uygun şekilde). - Sonuçta {"success": true} veya hata mesajı dönsün. -------------------------------------------------- 6. src/chat.php GEREKSİNİMLERİ: -------------------------------------------------- - POST isteklerini kabul etsin. Gelen JSON içindeki "message" değerini okusun. - PHP cURL ile resmi LLM API'sine (Örn: OpenAI veya Gemini API) istek atsın. İstek atarken yapay zekaya şu sistem promptunu enjekte etsin: "Sen İslami yaşam uygulamasının asistanı 'Hikmet'sin. Cevaplarını her zaman Diyanet ve muteber ehl-i sünnet kaynaklarına dayandır. Mezhepler arasında (Hanefi, Şafi vb.) görüş ayrılığı olan konularda bunu mutlaka belirt. Kesin bilgi sahibi olmadığın konularda tahminde bulunma, kullanıcıyı din görevlilerine yönlendir." - Yapay zekadan dönen cevabı {"response": "cevap metni"} formatında JSON olarak dönsün. Tüm kodları tek seferde kopyalamaya uygun, yorum satırlarıyla açıklanmış ve PostgreSQL uyumlu şekilde üret.