6.2 KiB
6.2 KiB
Zümrüt Kuyumculuk — Kurumsal Web Sitesi + İçerik API'si
Altın ve döviz işlemleri yapan Zümrüt Kuyumculuk için hazırlanmış kurumsal web sitesi ve bu siteyi besleyen Node.js/Express içerik API'si.
Tema: siyah zemin (#0a0a0a) üzerine altın vurgular (#d4af37) — ürünlerin siyah içinde "vitrindeymiş" gibi görünmesi için tasarlandı.
Hızlı Başlangıç
npm install
npm start
Sunucu http://127.0.0.1:4700 adresinde açılır. Tarayıcıda açmanız yeterli.
Farklı port kullanmak için:
# PowerShell
$env:PORT=8080; npm start
# CMD
set PORT=8080 && npm start
Testleri çalıştırmak için:
npm test
Dizin Yapısı
zumrut-kuyumculuk/
│
├── index.html → Ana sayfa (tek sayfa, bölümlere kaydırmalı)
├── css/
│ ├── style.css → Siyah/altın tema, tipografi, kart, buton
│ └── responsive.css → 1200 / 992 / 768 / 480px kırılımları
├── js/
│ ├── main.js → Mobil menü, scroll animasyon, sayaç, form doğrulama
│ ├── kur.js → Döviz/altın kur bandı (API'den beslenir, yedeği var)
│ └── galeri.js → Vitrin filtreleme + lightbox
├── data/
│ └── urunler.json → Ürün verisi (statik site için yedek kopya)
├── assets/
│ └── img/ → Ürün fotoğrafları (müşteri buraya ekler)
├── vendor/ → Yerelleştirilmiş font dosyaları
│
├── server/ → Node.js / Express katmanı
│ ├── server.js → Giriş noktası (port dinler)
│ ├── app.js → Express uygulaması (statik + API)
│ ├── data/
│ │ ├── urunler.js → Ürün envanteri + filtreleme
│ │ ├── kurlar.js → Döviz/altın kurları + biçimlendirme
│ │ └── iletisim.js → Adres, telefon, saatler, form doğrulama
│ ├── lib/
│ │ ├── logger.js → İstek kaydedici + seviyeli log
│ │ └── hataYonetimi.js → Merkezî hata yakalayıcı + doğrulama hataları
│ ├── routes/
│ │ ├── urunler.js → /api/urunler
│ │ ├── kurlar.js → /api/kurlar
│ │ └── iletisim.js → /api/iletisim
│ └── tests/ → Vitest + Supertest testleri
│ ├── api.test.js
│ ├── urunler.test.js
│ └── veri.test.js
│
└── package.json
API Uç Noktaları
Tüm yanıtlar JSON'dur ve basarili alanı içerir.
| Yöntem | Yol | Açıklama |
|---|---|---|
| GET | /api/saglik |
Servis ayakta mı, sürüm bilgisi |
| GET | /api/urunler |
Tüm ürünler |
| GET | /api/urunler?kategori=bilezik |
Kategoriye göre filtreli ürünler |
| GET | /api/urunler/:id |
Tek ürün |
| GET | /api/kurlar |
Döviz + altın kurları (alış/satış/trend) |
| GET | /api/kurlar/:kod |
Tek kur (usd, eur, gbp, ga, ceyrek, yarim) |
| GET | /api/iletisim |
Adres, telefon, çalışma saatleri, hizmetler |
| POST | /api/iletisim |
İletişim formu gönderimi (doğrulamalı) |
Örnek yanıt — GET /api/kurlar
{
"basarili": true,
"guncellemeZamani": "2026-01-01T10:00:00.000Z",
"kaynak": "demo-simulasyon",
"adet": 6,
"veri": [
{ "kod": "USD", "ad": "Amerikan Doları", "alis": 41.28, "satis": 41.42,
"degisim": 0.12, "trend": "artis", "alisMetin": "41,28 ₺", "satisMetin": "41,42 ₺" }
]
}
Örnek istek — POST /api/iletisim
{
"ad": "Ahmet Yılmaz",
"telefon": "0500 000 00 01",
"eposta": "ahmet@ornek.com",
"mesaj": "Çeyrek altın fiyatı hakkında bilgi almak istiyorum."
}
Geçersiz veride 422 ve alan bazlı hata listesi döner:
{
"basarili": false,
"hata": {
"mesaj": "Gönderilen veriler geçersiz.",
"ayrintilar": { "telefon": "Geçerli bir telefon numarası giriniz (örn. 05xx xxx xx xx)." }
}
}
İşletme Bilgileri
- Adres: Örnek Mahallesi, Çarşı Caddesi No: 1, Merkez / İstanbul
- Telefon: 0500 000 00 00
- Çalışma saatleri: Hafta içi 09:30–19:30, Cumartesi 09:30–18:00, Pazar kapalı
Telefon numarası
tel:+905000000000olarak bağlanmıştır — mobilde dokununca arama başlatır.
Müşterinin Yapması Gerekenler
- Ürün fotoğrafları: Kendi çekimlerinizi
assets/img/klasörüne koyun. Beklenen dosya adlarıdata/urunler.jsoniçindekigorselalanında yazılıdır (örn.bilezik-1.jpg,kolye-2.jpg). Fotoğraf yoksa arayüz otomatik olarak şık bir yer tutucu gösterir — site bozuk görünmez. - Ürün listesi: Yeni ürün eklemek için
server/data/urunler.js(ve statik kopyadata/urunler.json) dosyasına kayıt ekleyin. - Kurlar: Şu an demo/simülasyon verisidir. Gerçek piyasa verisi için
server/data/kurlar.jsiçindekiKURLARbeslemesinin TCMB veya serbest piyasa API'sine bağlanması gerekir. - Domain/e-posta:
info@ornek.comvarsayılan olarak yazıldı; gerçek adres farklıysaserver/data/iletisim.jsiçinden güncellenir.
Geliştirme Notları
- Framework kullanılmadı (React/Vue yok): kurumsal statik site için gereksiz ağırlık; hızlı açılış ve kolay bakım hedeflendi.
- Tema tek merkezden yönetilir: Tüm renkler
css/style.cssbaşındaki CSS değişkenlerinde tanımlı. Marka rengi değişirse tek yerden dönülür. - Erişilebilirlik: Semantik HTML5,
aria-label,altmetinleri, 44px dokunma hedefleri, klavye ile gezilebilir lightbox (ESC ile kapanır). - Sunucu güvenliği:
x-powered-bykapalı, gövde boyutu 100KB ile sınırlı, hata yığın izleri istemciye sızdırılmaz. - Loglama: Her istek süre ve durum koduyla kaydedilir; 4xx uyarı, 5xx hata seviyesinde.
Test kapsamı
npm test komutu 55+ testi çalıştırır:
- api.test.js — tüm uç noktalar, hata durumları (404/422), statik dosya servisi
- urunler.test.js — filtreleme, id arama, veri bütünlüğü
- veri.test.js — kur/fiyat biçimlendirme, çalışma saati mantığı, form doğrulama
© Zümrüt Kuyumculuk