- Backend: Node.js + Express + MySQL + JWT auth - 8 MySQL tablosu (users, countries, states, cities, prayer_times, ramadan_times, eid_times, fetch_logs) - Diyanet API entegrasyonu (auth + token yönetimi) - Tüm API endpointleri (places, prayer-times, ramadan, eid, admin) - Rate limiting, CORS, input validation - Cron job (gece 02:00 otomatik veri çekme) - Frontend: Login, Dashboard, Fetch Panel, Namaz Vakitleri, Ramazan, Admin, Profil - Admin kullanıcı: admin/admin123
4.9 KiB
4.9 KiB
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
Kurulum
1. Bağımlılıkları Kur
cd backend
npm install
2. Ortam Değişkenleri
.env.example dosyasını .env olarak kopyalayın ve değerlerini güncelleyin:
cp .env.example .env
# .env dosyasını düzenleyin
Ayrıca backend dizininde de .env gereklidir:
cp .env backend/.env
3. Veritabanı Migration
cd backend
npm run migrate
4. İlk Admin Kullanıcı
cd backend
npm run seed
Varsayılan giriş: admin / admin123
5. Sunucuyu Başlat
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
# 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