# Canlı Operasyon Portalı - Walkthrough Dökümanı (operasyon.kappmes.com)

Bu döküman, sıfırdan kurulan Canlı Operasyon Monitörü (Node.js + Express + Socket.io) projesinin geliştirme süreçlerini, yapılan MVC refaktörünü, veritabanı hata çözümlerini ve canlı sunuculardaki başarılı entegrasyon sonuçlarını özetler.

---

## 🏗️ Yapılan Geliştirmeler & MVC Refaktör Yapısı

Sistemin kod karmaşasını engellemek, ölçeklenebilirliğini artırmak ve modülerliği sağlamak amacıyla backend altyapısı modern bir **MVC / Service** mimarisine dönüştürülmüştür. Tüm kodlar `src/` altındaki ilgili modüllere taşınmıştır:

1.  **Config / Altyapı Katmanı (`src/config/`):**
    *   [secrets.js](file:///Users/kaptanspor/Desktop/monitor.kappmes.com/src/config/secrets.js): API tokenları, Google/Meta OAuth client ID ve secret bilgileri ile ayar dosyası okuma yardımcılarını barındırır.
    *   [socket.js](file:///Users/kaptanspor/Desktop/monitor.kappmes.com/src/config/socket.js): JWT yetkilendirmesi entegre edilmiş Socket.io sunucu kurulumunu ve global `io` erişimini yönetir.
    *   [store.js](file:///Users/kaptanspor/Desktop/monitor.kappmes.com/src/config/store.js): Backend genelinde tüm servislerin ve Socket.io'nun eş zamanlı kullandığı merkezi bellek durumunu (state) yönetir.

2.  **Servis Katmanı (`src/services/`):**
    *   [ga4Service.js](file:///Users/kaptanspor/Desktop/monitor.kappmes.com/src/services/ga4Service.js): Google Analytics 4 API bağlantısını ve 3 sitenin paralel sorgulamalarını yönetir.
    *   [sshService.js](file:///Users/kaptanspor/Desktop/monitor.kappmes.com/src/services/sshService.js): Kaptanspor sunucusuna güvenli tünel açıp CPU/RAM/Uptime verilerini çeken betiği yönetir.
    *   [ecomService.js](file:///Users/kaptanspor/Desktop/monitor.kappmes.com/src/services/ecomService.js): E-ticaret veritabanı sorgularının sonuçlarını ve aktif sipariş/ciro/üye metriklerini çeker.
    *   [trendyolService.js](file:///Users/kaptanspor/Desktop/monitor.kappmes.com/src/services/trendyolService.js): Trendyol API entegrasyon metriklerini yönetir.
    *   [backupService.js](file:///Users/kaptanspor/Desktop/monitor.kappmes.com/src/services/backupService.js): 3 sitenin yedek durumlarını periyodik denetler.

3.  **Kontrolörler (`src/controllers/`):**
    *   [authController.js](file:///Users/kaptanspor/Desktop/monitor.kappmes.com/src/controllers/authController.js): SSO Bridge ve Google OAuth yönlendirme/callback mantığını kapsar.
    *   [settingsController.js](file:///Users/kaptanspor/Desktop/monitor.kappmes.com/src/controllers/settingsController.js): Monitör ayarlarını kaydeder ve günceller.
    *   [instagramController.js](file:///Users/kaptanspor/Desktop/monitor.kappmes.com/src/controllers/instagramController.js): Instagram Business API bağlantısı, veri derleme ve bildirim silme (dismiss) işlemlerini yürütür.
    *   [webhookController.js](file:///Users/kaptanspor/Desktop/monitor.kappmes.com/src/controllers/webhookController.js): Canlı e-ticaret sipariş akışını ve Instagram Meta webhook event'lerini işler.
    *   [backupController.js](file:///Users/kaptanspor/Desktop/monitor.kappmes.com/src/controllers/backupController.js): Manuel yedekleme tetiklemelerini ve log okumalarını yönetir.

4.  **Rotalar ve Giriş Noktası (`src/routes/` ve `server.js`):**
    *   [api.js](file:///Users/kaptanspor/Desktop/monitor.kappmes.com/src/routes/api.js): Tüm API uç noktalarını ve HTTP rotalarını tek bir yerde tanımlayan router.
    *   [server.js](file:///Users/kaptanspor/Desktop/monitor.kappmes.com/server.js): Express uygulamasını kuran, statik dosyaları yetkilendirme ile servis eden, socket'i başlatan ve arka plan Interval cron'larını yöneten sade giriş noktası.

---

## 🔍 Hata Çözümleri & Veritabanı Düzeltmeleri

### Siparişler, Üyeler ve Canlı Akış Kartlarının Boş Kalması Sorunu
*   **Sorun:** Sunucu logları incelendiğinde, Kaptanspor uzak e-ticaret sunucusunun veritabanı sorgusunda `SQLSTATE[42S22]: Column not found: 1054 Unknown column 'saat' in 'field list'` hatası fırlattığı tespit edildi. Bu hata nedeniyle son siparişlerin (`recent_orders`) çekimi yarıda kesiliyor, veritabanı cache'i güncellenemiyor ve arayüze `items: []` boş dizisi dönüyordu.
*   **Çözüm:** E-Ticaret sunucusu üzerindeki `/public_html/includes/config/monitor_events.php` dosyasındaki SQL sorgularından, veritabanı şemasında bulunmayan `, saat` sütun seçimi kaldırıldı (`siparis_tarih` zaten tarih ve saat verisini tam olarak barındırmaktadır).
*   **Sonuç:** Cache sıfırlanıp yeniden tetiklendiğinde **15 adet son sipariş** ve ilgili detaylar başarıyla veritabanından çekilip arayüze yansıtıldı. Tüm sipariş akışı ve üye/ciro metrikleri şu an eksiksiz olarak panele dolmaktadır!

---

## 🚀 Canlıya Dağıtım ve Entegrasyon Adımları

Tüm MVC kodları ve e-ticaret SQL düzeltmeleri `operasyon.kappmes.com` (Port 4000) sunucusuna deploy edilmiş ve PM2 altındaki `kappmes-operations` servisi `--update-env` flag'i ile sıfırsız hata ile yeniden başlatılmıştır.

*   Uygulama Çalışma Durumu: **ONLINE** (Stabil çalışma, 0 hata logu)
*   Dashboard veri bütünlüğü: **Eksiksiz & Akıcı** (Ziyaretçiler, Siparişler, Instagram, Yedekler, Trendyol ve SSH Sunucu durumları anlık senkronizedir).

---

## 🛠️ Son Eklenen Özellikler & Güncellemeler (20 Temmuz 2026)

### 1. Webhook Sipariş Bildirim Çiftleme & Geçersiz Tarih Çözümü
*   **Sorun:** Yeni bir site siparişi geldiğinde hem webhook hem de periyodik arkaplan sorgusu (polling) farklı ID ve geçersiz tarih formatlarıyla çalıştığı için sipariş listesinde çift satır oluşuyor ve tarih `Invalid Date (NaN/NaN)` görünüp zamanla tek satıra iniyordu.
*   **Çözüm:** Webhook'tan gelen siparişin ID alanı `ref_no` ile eşitlendi, zaman formatı ise ISOString'e dönüştürüldü. Listenin başına eklenirken mükerrer kayıt kontrol filtresi konularak çift satır engellendi.

### 2. WSAIO API Kartı & Son 3 İşlem Listesi Düzeni
*   **Düzenleme:** "Son 5 İşlem Özeti" listesi, üst sıradaki mini kartların dikey hizalamasını ve görsel dengesini bozmaması adına **Son 3 İşlem Özeti** olarak kısaltılıp tekrar kendi **WSAIO API** kartının içerisine entegre edildi.

### 3. API Göstergeleri "Sunucu Monitörü"ne Taşındı & Büyütüldü
*   **Düzenleme:** Üst header kısmındaki statik göstergeler tamamen temizlendi. Bunların yerine Sunucu Monitörü kartının en üstüne tamamen dinamik çalışan **GA4**, **DRIVE** ve **IG** göstergeleri büyük, ikonlu ve modern badge tasarımlarıyla yerleştirildi. `MYSQL`, `CURL`, `SSL` ve `SSH` göstergeleri talep üzerine kaldırıldı.

### 4. Instagram Webhook Ses ve SweetAlert Tetikleyicileri & 3 Gün Kuralı
*   **Geliştirme:** Instagram webhook'tan gelen yeni Mesaj, Yorum ve Beğeni event'leri için `new_order` socket yayını yapılarak anlık sesli uyarılar ve özel pembe temalı SweetAlert2 bildirim pencereleri aktif edildi.
*   **3 Gün Kuralı:** Instagram mesaj ve yorumları için önceden tanımlanmış olan "18:30 Vardiya Sistemi" arayüzden ve arka plandan tamamen kaldırılarak, siparişlerde olduğu gibi **son 3 günlük verileri** listeleyen esnek yapıya geçirildi.

### 5. Instagram Bellek Durumu (Cache) Yükleme Hatası Çözümü
*   **Sorun:** Sunucu önbellekten (`instagram_summary.json`) veri yüklediğinde, in-memory durum değişkeni olan `store.currentInstagramSummary` güncellenmiyordu. Bu da sayfa yenilendiğinde veya yeni istemci bağlandığında yorum/mesaj sayılarının arayüzde geçici olarak `0` görünmesine sebep oluyordu.
*   **Çözüm:** Önbellekten okuma yapılan tüm durumlarda ve hata durumlarındaki fallback yapılarında `store.currentInstagramSummary` değişkeni güncellenecek şekilde kod refaktör edildi. Sayfa yenilense de canlı yorum ve mesaj sayıları eksiksiz gelmeye devam edecektir.

### 6. WSAIO İşlem Geçmişi Önceliklendirme Algoritması (Deduplication)
*   **Sorun:** WSAIO log listesinde sadece `STOCK` senkronizasyonlarının görünmesi, `PRODUCT` (ürün) ve `PRICE` (fiyat) senkronizasyonlarının listede hiç yer bulamaması. Bunun sebebi, stok senkronizasyonunun her 10 dakikada bir çok sık çalışması nedeniyle, log apisinden gelen ilk 5 kaydın tamamen stok işlemlerinden ibaret olmasıdır.
*   **Çözüm:** `wsaioService.js` içinde API'den gelen 30 adetlik büyük log listesi alındı. Özel bir önceliklendirme ve tekilleştirme algoritması yazılarak; `STOCK`, `PRODUCT` ve `PRICE` türündeki en son işlemlerden en az birer tanesinin listede **kesinlikle yer alması garanti altına alındı**. Geri kalan boşluklar diğer kronolojik işlemlerle doldurularak zaman sırasına göre sıralandı. Artık listede tüm senkronizasyon tipleri görünür olacaktır.
