# hDiyanetProxy Diyanet İşleri Başkanlığı namaz vakitleri API'sinden veri çeken, yerel veritabanında saklayan ve güvenli API üzerinden sunan proxy uygulaması. ## Özellikler - 🕌 Namaz vakitleri sorgulama (yıllık, günlük) - 🌙 Ramazan imsakiyesi ve iftar vakitleri - 🎉 Bayram namaz vakitleri - 📍 Ülke/İl/Şehir yer bilgileri yönetimi - 🔐 JWT tabanlı kimlik doğrulama - 👥 Kullanıcı yönetimi (admin paneli) - ⏰ Cron job ile otomatik veri güncelleme (gece 02:00) - 📊 Dashboard ve veri çekme logları - 📥 Manuel veri çekme paneli - 📤 CSV/JSON dışa aktarma ## Teknoloji - **Backend:** Node.js + Express.js - **Veritabanı:** MySQL (mysql2) - **Auth:** JWT (jsonwebtoken + bcrypt) - **Frontend:** Vanilla HTML/CSS/JS - **Kaynak API:** [Diyanet Awqat Salah](https://awqatsalah.diyanet.gov.tr) ## Kurulum ### 1. Bağımlılıkları Kur ```bash cd backend npm install ``` ### 2. Ortam Değişkenleri `.env.example` dosyasını `.env` olarak kopyalayın ve değerlerini güncelleyin: ```bash cp .env.example .env # .env dosyasını düzenleyin ``` Ayrıca backend dizininde de `.env` gereklidir: ```bash cp .env backend/.env ``` ### 3. Veritabanı Migration ```bash cd backend npm run migrate ``` ### 4. İlk Admin Kullanıcı ```bash cd backend npm run seed ``` Varsayılan giriş: `admin` / `admin123` ### 5. Sunucuyu Başlat ```bash cd backend npm start # veya geliştirme modu: npm run dev ``` Uygulama `http://localhost:3000` adresinde çalışır. ## API Endpointleri ### Auth | Method | Endpoint | Açıklama | |--------|----------|----------| | POST | `/api/v1/auth/login` | Giriş yap, JWT token al | | POST | `/api/v1/auth/register` | Yeni kullanıcı kaydı | | GET | `/api/v1/auth/profile` | Profil bilgisi | | POST | `/api/v1/auth/refresh` | Token yenile | | POST | `/api/v1/auth/change-password` | Şifre değiştir | ### Yer Bilgileri | Method | Endpoint | Açıklama | |--------|----------|----------| | GET | `/api/v1/places/countries` | Ülkeleri listele | | GET | `/api/v1/places/states?countryId={id}` | Eyaletleri listele | | GET | `/api/v1/places/cities?stateId={id}` | Şehirleri listele | | GET | `/api/v1/places/city/{cityId}` | Şehir detayı | ### Namaz Vakitleri | Method | Endpoint | Açıklama | |--------|----------|----------| | GET | `/api/v1/prayer-times?cityId={id}&startDate=&endDate=` | Tarih aralığı | | GET | `/api/v1/prayer-times/today?cityId={id}` | Bugünkü vakit | ### Ramazan | Method | Endpoint | Açıklama | |--------|----------|----------| | GET | `/api/v1/ramadan?cityId={id}` | Ramazan takvimi | | GET | `/api/v1/ramadan/today?cityId={id}` | Bugünkü iftar | ### Bayram | Method | Endpoint | Açıklama | |--------|----------|----------| | GET | `/api/v1/eid?cityId={id}` | Bayram vakitleri | ### Admin (Admin yetkisi gerekli) | Method | Endpoint | Açıklama | |--------|----------|----------| | GET | `/api/v1/admin/dashboard` | İstatistikler | | POST | `/api/v1/admin/fetch/places` | Yer bilgilerini çek | | POST | `/api/v1/admin/fetch/yearly` | Yıllık namaz vakitlerini çek | | POST | `/api/v1/admin/fetch/ramadan` | Ramazan vakitlerini çek | | POST | `/api/v1/admin/fetch/eid` | Bayram vakitlerini çek | | POST | `/api/v1/admin/cache/clear` | Diyanet API cache temizle | | GET | `/api/v1/admin/logs` | Veri çekme logları | | GET | `/api/v1/admin/users` | Kullanıcı listesi | | POST | `/api/v1/admin/users` | Kullanıcı oluştur | | PATCH | `/api/v1/admin/users/:id/toggle` | Aktif/Pasif yap | | DELETE | `/api/v1/admin/users/:id` | Kullanıcı sil | ### Örnek Kullanım ```bash # Giriş yap TOKEN=$(curl -s -X POST http://localhost:3000/api/v1/auth/login \ -H "Content-Type: application/json" \ -d '{"username":"admin","password":"admin123"}' | jq -r '.token') # Bugünkü namaz vakti curl -H "Authorization: Bearer $TOKEN" \ http://localhost:3000/api/v1/prayer-times/today?cityId=9541 ``` ## Güvenlik - Şifreler bcrypt ile hash'lenir - JWT token süresi: 24 saat - Rate limiting: 120 istek/dakika (genel), 20 istek/15dk (login) - CORS koruması aktif - Input validation (express-validator) ## Dosya Yapısı ``` hDiyanetProxy/ ├── backend/ │ ├── src/ │ │ ├── controllers/ # Route handler'ları │ │ ├── services/ # İş mantığı servisleri │ │ ├── models/ # Veritabanı modelleri │ │ ├── routes/ # Express route tanımları │ │ ├── middleware/ # Auth middleware │ │ ├── jobs/ # Cron job'lar │ │ └── utils/ # DB bağlantısı, migration │ ├── .env │ └── package.json ├── frontend/ │ └── src/ │ ├── pages/ # HTML sayfaları │ ├── components/ # Sidebar vb. bileşenler │ └── services/ # API çağrıları ├── .env ├── .env.example ├── .gitignore └── README.md ``` ## Lisans ISC