Files
hDiyanetProxy/REQUIREMENTS.md
hOLOlu a798066049 İ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
2026-02-27 07:53:41 +03:00

241 lines
7.1 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
## 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.