تخطَّ إلى المحتوى الرئيسي

Control Panel Specifications

Archive (Delete)

Soft-delete flow. 30-day HTTP 410, 90-day restore window. Pending-lead blocker. Hard delete restricted to Super Admin DB script.

مكتمل

لا يوجد حذف نهائي في الـ Admin CP. الإجراء التدميري هو "Archive" — حذف ناعم يُخفي الملف علناً، يحفظ السجلّ القانوني للعملاء، ويبدأ نافذة 30 يوم HTTP 410. الأدمن يقدر يعمل Restore خلال 90 يوم. الحذف النهائي مقصور على سكربت Super Admin بعد 365 يوم. Form preview يعرض مودال التأكيد اللي QC هيختبره.


إجراء Archive — المواصفات الكاملة

  • الغرض حذف ناعم للملف: يخفيه من العامّ، يوقف التقاط عملاء جدد، يحفظ العملاء الموجودين. مش حذف حقيقي — الصفّ يبقى في قاعدة البيانات.
  • نوع DB UPDATE على FounderFile: SET Status='archived', ArchivedAt=GETUTCDATE(), ArchivedBy=@adminId. لا تُصدَر تعليمة DELETE. الصفوف المرتبطة (Lang، Topics، LearningPoints، DownloadLeads، AuditLog) لا تُمَس.
  • التحقّق زرّ Archive لازم يكون معطّل لمّا: (a) `DownloadLead WHERE FounderFileId=@id AND DeliveredAt IS NULL` ترجع ≥ 1 صفّ، (b) `Status = under-review`. اختبارات QC: حاول أرشفة ملف عنده تسليمات معلّقة → الزرّ معطّل، الـ tooltip يشرح ليه؛ حاول أرشفة ملف تحت المراجعة → الزرّ معطّل.

نافذة الاستجابة على الجانب العام

  • الغرض يبلّغ الـ crawlers + الإشارات المرجعية إن الـ URL أُزيل عمداً (مش معطّل مؤقتاً). HTTP 410 Gone هو الإشارة الصحيحة — يطلب من محرّكات البحث الـ de-index أسرع من 404.
  • نوع DB لا جدول جديد. بوّابة الجانب العام تقرأ `FounderFile.Status` + `ArchivedAt`. خلال 30 يوم من ArchivedAt → HTTP 410. بعد 30 يوم → HTTP 404.
  • التحقّق اختبارات QC: curl للـ URL العام بعد ساعة من الأرشفة → توقّع `HTTP/1.1 410 Gone` + صفحة شرح ودودة؛ curl بعد 31 يوم من الأرشفة → توقّع `HTTP/1.1 404 Not Found`.

إجراء Restore (خلال 90 يوم)

  • الغرض استعادة ملف اتأرشف بالغلط. يرجعه لـ `draft` عشان المحرّر يعيد إرساله عبر تدفّق المراجعة العادي.
  • نوع DB UPDATE على FounderFile: SET Status='draft', ArchivedAt=NULL, ArchivedBy=NULL. ادخل صفّ في `FounderFileAuditLog` بـ eventType='restored'.
  • التحقّق زرّ Restore مخفي (مش معطّل) لمّا `DATEDIFF(day, ArchivedAt, GETUTCDATE()) > 90`. اختبارات QC: أرشف ملف، استعِد خلال يوم → الزرّ ظاهر والإجراء ينجح؛ أرشف ملف، انتظر 91 يوم (استخدم fixed-clock test mode)، افتح من جديد → الزرّ غائب.

الآثار الجانبية عند الأرشفة

  • حدث `founder-file.archived` يُطلق → ماسح الروابط المكسورة يعمل عبر المنصة ويعرض العدد في dashboard الأدمن.
  • الراعي (لو مربوط) يستلم إيميل: "الملف X تم أرشفته. توجيه العملاء لهذا الملف توقّف."
  • كاش CDN للـ URL العام يُمسح فوراً عشان الردّ 410 يظهر مباشرة، مش بعد انتهاء الـ TTL.
  • الـ Sitemap يُعاد توليده بدون هذا الملف. مدخل RSS يُحذف.

معاينة الفورم — مودال تأكيد الأرشفة

زرّ Archive يفتح مودال التأكيد ده. الأدمن لازم يأكّد المربعَين قبل ما زرّ "Archive file" يصبح فعّال.

أرشفة الملف؟ · الحالة: PUBLISHED → archived
ماذا تفعل الأرشفة
🌐 الـ URL العام يرجع فوراً HTTP 410 Gone لمدة 30 يوم، ثم 404. الملف يختفي من القوائم وRSS وsitemap.
💾 صفّ قاعدة البيانات + كل الصفوف المرتبطة (Lang، Topics، LearningPoints، Leads، AuditLog) محفوظة. لا DELETE.
⏱ تقدر تستعيد هذا الملف خلال 90 يوم (بدون أسئلة). بعد 90 يوم زرّ Restore يختفي.
تأكيدات إلزامية
off
off
سبب اختياري (سجلّ التدقيق)

نصّ حرّ. يُخزَّن في `FounderFileAuditLog.Reason`. ظاهر في تبويب History.