diff --git a/docs/quality/uygulama-durumu.md b/docs/quality/uygulama-durumu.md index 8a41582..9b405a2 100644 --- a/docs/quality/uygulama-durumu.md +++ b/docs/quality/uygulama-durumu.md @@ -957,3 +957,10 @@ Taslak türü seçicisine erişilebilir ad eklendi. Üretim derlemesi geçti. Ö - Eski modele Uygun durumu ve teknik kaynak açıklaması girilmesi portföy değişikliği engelini kaldırmadı. Güncel ürün bilgilerini al ve kontrolleri sıfırla düğmesi M2'yi aldı; önceki teknik açıklamayı temizledi ve uygunluk durumunu Kontrol gerekli yaptı. - Taslak UI üzerinden kaydedilip sayfa yenilendi; M2 seçimi ve beş kontrolün bekleyen durumu sunucudan geri geldi. Yedi kontrolün tamamı geçti. Kanıt: /Users/hikmettanriverdi/Documents/ChatGPT/ihale/rapor/qa-portfolio-revision.json. - Bu kabul aynı oturumda profil değişikliği, düğme ve kalıcılığı kapsar. İki gerçek oturumun yarışması, tam hazır dosyanın çıktı denemesi veya gerçek başvuru kabulü değildir. Üretim kodu değişmediğinden önceki 217 test ve derleme tekrarlanmadı. Test sekmesi kapatıldı; mevcut QA sunucusu korunuyor. + +### Belge indirmede süre ve oturum kontrolü — 6 Eylül 2026 +- Kimliği doğrulanmış belge indirmede fetch, hata yanıtı ve dosya gövdesi için ortak 120 saniye sınırı eklendi. İptal sinyali desteklenir; oturum yoksa ağ isteği başlamaz, hesap değişimi veya iptal sonrası dosya teslim edilmez. Zaman aşımı anlaşılır hata verir. +- İndirme bağlantısı ve geçici Blob URL, tarayıcıya teslim düğmesi hata verse de temizlenir. Türkçe dosya adı ve özgün dosya baytları korunur. +- Belge deposu her dosyanın indirme işlemini kilitler, düğmede İndiriliyor durumu gösterir; erişilemeyen dosyanın düğmesi devre dışıdır. Depodan çıkılınca bekleyen indirmeler iptal edilir. Aynı e-posta için token yenilenmesi de panel oturumunu yeniden kurar. +- 220 otomatik test ve üretim derlemesi geçti. Yeni testler takılmış başarılı/hatalı yanıt gövdesi, iptal, oturumsuz istek, özgün Türkçe içerik ve dosya adı, tıklama hatasında kaynak temizliğini kapsar. Son küçük hata-mesajı sağlamlaştırmasından sonra belge oturum testleri ayrıca geçti. +- Gerçek tarayıcı Downloads klasöründe dosya kabulü ve yavaş ağda İndiriliyor görünümü henüz doğrulanmadı. Tarayıcıya teslim, dosyanın diske yazıldığının garantisi olarak sunulmaz. Canlıya yayın yapılmadı. diff --git a/src/components/tools/DocumentVault.jsx b/src/components/tools/DocumentVault.jsx index b1d7207..0e8e4d1 100644 --- a/src/components/tools/DocumentVault.jsx +++ b/src/components/tools/DocumentVault.jsx @@ -16,7 +16,7 @@ const KATEGORILER = ['Yasal Belgeler', 'Kalite Belgeleri', 'Mali Belgeler', 'Res */ export const DocumentVault = () => { const { authUser } = useApp(); - return ; + return ; }; const DocumentVaultSession = ({signedIn}) => { @@ -36,6 +36,15 @@ const DocumentVaultSession = ({signedIn}) => { const [islemeBilgi, setIslemeBilgi] = useOwnedState(null); const [kategori, setKategori] = useOwnedState(KATEGORILER[0]); const dosyaRef = useRef(null); + const downloads = useRef(new Set()); + const [downloading,setDownloading] = useOwnedState([]); + const indir = async file => { + if (!current() || downloads.current.has(file.id)) return; + downloads.current.add(file.id);setDownloading([...downloads.current]);setHata(null); + try { await downloadDocument(file.id,file.ad,{signal:readLifetime.current.signal}); } + catch(error) { if(!readLifetime.current.signal.aborted)setHata(error.message); } + finally { downloads.current.delete(file.id);setDownloading([...downloads.current]); } + }; const yukle = () => { if (!signedIn || !current()) return; @@ -320,9 +329,10 @@ const DocumentVaultSession = ({signedIn}) => { Kalemleri yeniden çıkar )} -