- 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
241 lines
7.1 KiB
Markdown
241 lines
7.1 KiB
Markdown
## hDiyanetProxy Projesi - AI Agent Prompt'u
|
||
|
||
---
|
||
|
||
**Proje Adı:** hDiyanetProxy
|
||
|
||
**Görev:** Aşağıdaki gereksinimlere göre tam kapsamlı bir web uygulaması ve API servisi geliştir.
|
||
|
||
---
|
||
|
||
### 📌 GENEL TANIM
|
||
|
||
Türkiye Diyanet İşleri Başkanlığı'nın namaz vakitleri API'sinden (`https://awqatsalah.diyanet.gov.tr`) veri çeken, bu verileri yerel veritabanında saklayan ve dışarıya kendi güvenli API'si üzerinden sunan **hDiyanetProxy** adlı bir uygulama geliştir.
|
||
|
||
---
|
||
|
||
### 🏗️ TEKNOLOJİ YIĞINI
|
||
|
||
- **Backend:** Node.js + Express.js (veya Python + FastAPI — tercihe bırak)
|
||
- **Veritabanı:** PostgreSQL (ya da SQLite geliştirme ortamı için)
|
||
- **Auth:** JWT tabanlı token sistemi
|
||
- **Frontend:** Sade, modern bir web arayüzü (HTML/CSS/JS veya React)
|
||
- **Ortam:** Docker Compose ile ayağa kalkabilir yapı (opsiyonel ama önerilir)
|
||
|
||
---
|
||
|
||
### 🔌 KAYNAK API BİLGİLERİ
|
||
|
||
**Base URL:** `https://awqatsalah.diyanet.gov.tr`
|
||
|
||
Kullanılacak endpointler:
|
||
|
||
#### Namaz Vakitleri
|
||
```
|
||
POST /api/AwqatSalah/Yearly
|
||
Body:
|
||
{
|
||
"cityId": {cityId},
|
||
"startDate": "2026-01-01T00:00:00.0Z",
|
||
"endDate": "2026-12-31T23:59:59.0Z"
|
||
}
|
||
```
|
||
|
||
#### Ramazan İmsakiyesi
|
||
```
|
||
GET /api/AwqatSalah/Ramadan/{cityId}
|
||
```
|
||
|
||
#### Bayram Vakti ve Bayram Namazı
|
||
```
|
||
GET /api/AwqatSalah/Eid/{cityId}
|
||
```
|
||
|
||
#### Yer Bilgileri
|
||
```
|
||
GET /api/Place/Countries
|
||
GET /api/Place/States
|
||
GET /api/Place/States/{countryId}
|
||
GET /api/Place/Cities
|
||
GET /api/Place/Cities/{stateId}
|
||
GET /api/Place/CityDetail/{cityId}
|
||
```
|
||
|
||
#### Cache Temizleme
|
||
```
|
||
GET /api/Cache/ClearCache
|
||
```
|
||
|
||
---
|
||
|
||
### 🗄️ VERİTABANI YAPISI
|
||
|
||
Aşağıdaki tabloları oluştur:
|
||
|
||
1. **users** — Kullanıcı adı, şifre (hash'li), rol, oluşturulma tarihi
|
||
2. **countries** — Ülke id, adı
|
||
3. **states** — İl/Eyalet id, adı, ülke foreign key
|
||
4. **cities** — Şehir id, adı, eyalet foreign key, koordinatlar
|
||
5. **prayer_times** — cityId, tarih, imsak, güneş, öğle, ikindi, akşam, yatsı, kıble vakti
|
||
6. **ramadan_times** — cityId, tarih, imsak, iftar, sahur saati gibi alanlar
|
||
7. **eid_times** — cityId, bayram adı, tarih, namaz saati
|
||
8. **fetch_logs** — Ne zaman, kim tarafından, hangi şehir için veri çekildiği logu
|
||
|
||
---
|
||
|
||
### ⚙️ BACKEND FONKSİYONELLİK
|
||
|
||
#### 1. Veri Çekme Servisi
|
||
- Manuel tetikleme: Kullanıcı arayüzden şehir ve tarih aralığı seçip "Veri Çek" butonuna basar
|
||
- Zamanlanmış çekme: Cron job ile belirli aralıklarla otomatik çekme (örn. her gün gece 02:00)
|
||
- Çekilen veriler önce kontrol edilir; aynı şehir + tarih için kayıt varsa güncellenir, yoksa eklenir (upsert)
|
||
- Yer bilgileri (ülke, eyalet, şehir) ayrı tablolarda saklanır ve periyodik olarak güncellenir
|
||
|
||
#### 2. Kimlik Doğrulama
|
||
- `POST /auth/register` — Yeni kullanıcı kaydı (admin onaylı veya açık, tercihe göre)
|
||
- `POST /auth/login` — Kullanıcı adı + şifre ile giriş, JWT token döner
|
||
- Token süresi: 24 saat (refresh token desteği eklenebilir)
|
||
- Tüm veri endpointleri `Authorization: Bearer {token}` header'ı zorunlu tutar
|
||
|
||
#### 3. Cache Yönetimi
|
||
- Kaynak API'nin cache'ini temizlemek için `/api/Cache/ClearCache` çağrısını proxy eden bir endpoint yaz
|
||
- Yerel cache için Redis entegrasyonu eklenebilir (opsiyonel)
|
||
|
||
---
|
||
|
||
### 🌐 hDiyanetProxy API ENDPOINTLERİ
|
||
|
||
Token ile korunan aşağıdaki endpointleri oluştur:
|
||
|
||
```
|
||
# Auth
|
||
POST /api/v1/auth/login
|
||
POST /api/v1/auth/register
|
||
|
||
# Yer Bilgileri
|
||
GET /api/v1/places/countries
|
||
GET /api/v1/places/states?countryId={id}
|
||
GET /api/v1/places/cities?stateId={id}
|
||
GET /api/v1/places/city/{cityId}
|
||
|
||
# Namaz Vakitleri
|
||
GET /api/v1/prayer-times?cityId={id}&startDate={date}&endDate={date}
|
||
GET /api/v1/prayer-times/today?cityId={id}
|
||
|
||
# Ramazan / İftar
|
||
GET /api/v1/ramadan?cityId={id}
|
||
GET /api/v1/ramadan/today?cityId={id}
|
||
|
||
# Bayram
|
||
GET /api/v1/eid?cityId={id}
|
||
|
||
# Veri Çekme (Admin)
|
||
POST /api/v1/admin/fetch/yearly Body: { cityId, startDate, endDate }
|
||
POST /api/v1/admin/fetch/ramadan Body: { cityId }
|
||
POST /api/v1/admin/fetch/eid Body: { cityId }
|
||
POST /api/v1/admin/fetch/places (Tüm yer bilgilerini günceller)
|
||
|
||
# Cache
|
||
POST /api/v1/admin/cache/clear
|
||
|
||
# Loglar
|
||
GET /api/v1/admin/logs
|
||
```
|
||
|
||
---
|
||
|
||
### 🖥️ WEB ARAYÜZÜ
|
||
|
||
Aşağıdaki sayfaları içeren sade ve işlevsel bir web arayüzü oluştur:
|
||
|
||
#### 1. Giriş Sayfası (`/login`)
|
||
- Kullanıcı adı ve şifre formu
|
||
- Başarılı girişte token'ı localStorage'a kaydet
|
||
- Hata mesajlarını göster
|
||
|
||
#### 2. Dashboard (`/dashboard`)
|
||
- Sistemdeki toplam kayıt sayıları (şehir, namaz vakti, ramazan kaydı)
|
||
- Son veri çekme logları tablosu
|
||
- Hızlı veri sorgulama alanı
|
||
|
||
#### 3. Veri Çekme Paneli (`/fetch`)
|
||
- Ülke → Eyalet → Şehir dropdown seçimi (dinamik, birbirini tetikleyen)
|
||
- Tarih aralığı seçici
|
||
- "Yıllık Namaz Vakitlerini Çek", "Ramazan Verilerini Çek", "Bayram Verilerini Çek" butonları
|
||
- İşlem sonucunu canlı gösteren log/konsol alanı
|
||
|
||
#### 4. Namaz Vakitleri Sorgulama (`/prayer-times`)
|
||
- Şehir ve tarih aralığı seçimi
|
||
- Tablo şeklinde listeleme
|
||
- CSV/JSON dışa aktarma butonu
|
||
|
||
#### 5. Ramazan / İftar Vakitleri (`/ramadan`)
|
||
- Şehir seçimi
|
||
- Ramazan takvimi tablo görünümü
|
||
- İftar vakti vurgulu satır tasarımı
|
||
|
||
#### 6. Kullanıcı Yönetimi (`/admin/users`) — Sadece admin rolü
|
||
- Kullanıcı listeleme, ekleme, pasif etme
|
||
|
||
#### 7. API Token Bilgisi (`/profile`)
|
||
- Mevcut token'ı göster
|
||
- Yeni token üret butonu
|
||
- API kullanım dokümantasyonu linki
|
||
|
||
---
|
||
|
||
### 🔐 GÜVENLİK GEREKSİNİMLERİ
|
||
|
||
- Şifreler `bcrypt` ile hash'lenmeli
|
||
- JWT secret `.env` dosyasında saklanmalı
|
||
- Rate limiting eklenmeli (örn. dakikada 60 istek)
|
||
- CORS ayarları yapılmalı
|
||
- Input validasyonu tüm endpointlerde olmalı
|
||
- `.env.example` dosyası oluşturulmalı
|
||
|
||
---
|
||
|
||
### 📁 PROJE DOSYA YAPISI
|
||
|
||
```
|
||
hDiyanetProxy/
|
||
├── backend/
|
||
│ ├── src/
|
||
│ │ ├── controllers/
|
||
│ │ ├── services/
|
||
│ │ ├── models/
|
||
│ │ ├── routes/
|
||
│ │ ├── middleware/
|
||
│ │ ├── jobs/ (cron jobs)
|
||
│ │ └── utils/
|
||
│ ├── .env.example
|
||
│ └── package.json
|
||
├── frontend/
|
||
│ ├── src/
|
||
│ │ ├── pages/
|
||
│ │ ├── components/
|
||
│ │ └── services/ (API çağrıları)
|
||
│ └── package.json
|
||
├── docker-compose.yml
|
||
└── README.md
|
||
```
|
||
|
||
---
|
||
|
||
### 📋 TAMAMLANMA KRİTERLERİ
|
||
|
||
- [ ] Kaynak Diyanet API'sinden başarıyla veri çekilebiliyor
|
||
- [ ] Çekilen veriler veritabanına doğru şekilde kaydediliyor
|
||
- [ ] JWT ile kullanıcı girişi ve token alma çalışıyor
|
||
- [ ] Token ile korunan tüm endpointler çalışıyor
|
||
- [ ] Web arayüzünden veri çekme ve sorgulama yapılabiliyor
|
||
- [ ] Şehir listesi dinamik dropdown'larla yüklenebiliyor
|
||
- [ ] Ramazan ve bayram verileri ayrı ayrı sorgulanabiliyor
|
||
- [ ] Admin panelinden kullanıcı yönetimi yapılabiliyor
|
||
- [ ] Tüm işlemler loglanıyor
|
||
- [ ] README.md kurulum adımlarını içeriyor
|
||
|
||
---
|
||
|
||
Projeyi adım adım geliştir. Önce veritabanı şemasını ve backend iskeletini kur, ardından API endpointlerini yaz, en son web arayüzünü tamamla. Her adımda çalışır durumda kod üret.
|