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

7.1 KiB
Raw Blame History

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.