feat: verify offline user data backup and recovery

This commit is contained in:
2026-09-06 09:04:03 +03:00
parent f88a0c7bfe
commit d4d9d17a9f
4 changed files with 137 additions and 1 deletions
+6 -1
View File
@@ -89,7 +89,7 @@ Tarayıcı kanıtı: [Yenileme sonrası beş kart](evidence/qa-kanban-after-relo
## Doğrulama
`npm test`: 45/45 geçti (son yeniden çalıştırma: 6 Eylül 2026).
`npm test`: 46/46 geçti (son yeniden çalıştırma: 6 Eylül 2026).
`npm run build`: geçti; mevcut büyük paket/dinamik import uyarıları sürüyor.
`node --check server/index.js`, `node --check server/user-store.mjs`, `git diff --check`: geçti.
@@ -149,3 +149,8 @@ Bir test mevcut olmayan bulgu, yanlış kaynak, doğru alıntı ve tekrarlı kon
Detayda açık kullanıcı işlemiyle incelendi/yeniden aç durumu sunucuya kaydedilir. Sadece pencerenin açılması incelemenin tamamlandığı iddiasını oluşturmaz. Sağ panel Kanban durumundan inceleme sonucu çıkarmayı bıraktı; aynı incelendi alanını ve filtre ölçütünü kullanır. İncelenmiş kayıt güncel havuzdan düşerse kayıtlı snapshot korunur. Aynı ihalede süren kayıt nedeniyle reddedilen işlem artık sessiz kalmaz.
İki test sayaç/filtre eşitliği ve havuz dışı kaydı kapsar. Tarayıcıda sentetik Giresun kaydı incelendi olarak işaretlenip yenilendi: incelenen1, incelenmemiş4 kaldı. [Kanıt](evidence/qa-reviewed-after-reload.txt). 45 test ve derleme geçti.
## Kullanıcı verisi yedek/geri yükleme aracı
SQLite snapshot, referanslı belge kopyası, SHA-256 manifesti, bütünlük kontrolü ve yeni dizine geri yükleme eklendi. Çalışan yazıcıların durdurulması önkoşuldur; araç canlı üretim servisini kendisi durdurmaz. Bir test gerçek dosya ve hazırlık kaydının geri gelmesini, hedef üzerine yazmama ve bozuk yedek reddini doğrular. 46 test geçti. [Operasyon adımları ve kapsam sınırı](yedek-geri-yukleme.md). Üretim yedeği, tüm volume ve dağıtım geri dönüş provası hâlâ açık.
+29
View File
@@ -0,0 +1,29 @@
# Kullanıcı verisi yedekleme ve geri yükleme
Araç `users.sqlite` ve veritabanında referansı bulunan `belgeler/` dosyalarını kapsar. İhale/kalem arşivi, kaynak önbellekleri, ortam değişkenleri ve dağıtım yapılandırması bu yedeğin parçası değildir. Tam üretim geri dönüşü için bunların ayrıca platform volume/config yedeği gerekir.
## Önkoşul
Uygulamayı ve bu dizine yazan bütün zamanlanmış işleri platform üzerinden durdurun. Etkin sunucu ortamından gerçek `IHALEIST_USER_DATA_DIR`/volume yolunu doğrulayın. `--offline` işlemlerin durdurulduğuna ilişkin operatör beyanıdır; araç çalışan servisleri otomatik bulup kapatmaz. Canlı dosya silme/yükleme sürerken tutarlı yedek garantisi verilmez.
Node'un `node:sqlite` modülü gerekli. Aşağıdaki yollar örnektir; doğrulanan yollarla değiştirin. Hedef dizin henüz bulunmamalı.
```sh
node server/backup-user-data.mjs backup /volume/data /backups/release-001 --offline
node server/backup-user-data.mjs verify /backups/release-001
node server/backup-user-data.mjs restore /backups/release-001 /recovery/release-001
```
Yedek aracı SQLite snapshot oluşturur, bütünlük kontrolü yapar, referanslı dosyaları kopyalar ve SHA-256/byte manifesti üretir. Kayıp dosya başarısızlıktır; eksik yedek başarılı gösterilmez. Dizin/dosya izinleri 0700/0600'dır. Doğrulama şifreleme veya imza değildir; yedeğin erişimini ve dış saklamasını platformda ayrıca yönetin.
## Geri dönüş provası
1. Önce yeni bir test dizinine geri yükleyin. Üretim dizininin üzerine yazmayın.
2. Geri yüklenen dizine bağlı izole uygulamada iki test hesabının kayıtlarını, beş hazırlık kaydını, belgelerin indirilmesini, fiyat/toplam ve sürüm çakışmalarını doğrulayın.
3. Yayın adayının migration'ını bu kopyada çalıştırın. Eski ve yeni uygulama sürümlerinin hangi şemayla uyumlu olduğunu kaydedin; otomatik ters migration varsaymayın.
4. Uygulama ve veri geri dönüş noktalarını birlikte seçin. Platformun volume değiştirme adımı doğrulanmadan üretim dizinini silmeyin/yeniden adlandırmayın.
5. Yayın sonrası kayıt/indirme hatası varsa ilgili özelliği kapatın; doğrulanmış uygulama/volume çiftine dönüşü uygulayın. Başarılı yeni kullanıcı kayıtları varsa eski yedeğe kör dönüşle bunları kaybetmeyin; ileri düzeltme veya veri birleştirme değerlendirin.
## Mevcut kanıt
`tests/backup-user-data.test.mjs` izole SQLite ve gerçek Türkçe dosya baytlarıyla yedek/restore, hazırlık fiyatı, hedef üzerine yazmama ve değiştirilmiş yedeği reddetme senaryolarını doğrular. Üretim servis durdurma, volume yedeği ve platform geri dönüşü henüz denenmedi. Bu dosya yayın onayı veya tüm D11 tamamlandı beyanı değildir.