İlk sürüm: hDiyanetProxy v1.0.0

- 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
This commit is contained in:
hOLOlu
2026-02-27 07:53:41 +03:00
commit a798066049
44 changed files with 6092 additions and 0 deletions

176
README.md Normal file
View File

@@ -0,0 +1,176 @@
# 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