منصة التأهيل والتقييم
منصة لتأهيل الطلبات وتقييمها بنماذج متعددة الأقسام ومرفقات كبيرة، متكاملة مع أنظمة حكومية خارجية ومصممة حول إعادة المحاولة وIdempotency.
- دوري
- مطوّر خلفي · مشروع عمل
- التقنيات
- Java / Spring Boot / MySQL / Liquibase
شكل ٠٢ إعادة المحاولة دون تكرار
- 1 سجل واحد لكل طلب، مهما تكررت المحاولة
- Idempotency-Key مفتاح ثابت يرافق الطلب في كل محاولة
- Liquibase هجرات مُرقّمة وقابلة للتتبع عبر البيئات
رسم مبسّط ومعمّم لمشروع عمل — القيم في المحاكاة ليست قياسات. اقرأ الرسم
- نموذج التقديم: أقسام متعددة ومرفقات كبيرة، يُرسل كطلب واحد.
- المنصة: تمنح كل طلب مفتاحًا فريدًا (Idempotency-Key) قبل أي اتصال خارجي.
- الشبكة: الأنظمة الخارجية قد تتأخر أو يضيع ردّها — فعّل «شبكة غير مستقرة» لترى ذلك.
- إعادة المحاولة: بعد انتهاء المهلة يُعاد الطلب بالمفتاح نفسه، لا بطلب جديد.
- النظام الخارجي: يتعرّف على المفتاح المكرر ويعيد النتيجة المحفوظة، فيبقى سجل واحد لكل طلب.
مشروع عمل — حُذفت أسماء الجهات والتفاصيل الحساسة.
المشكلة
منصة لتأهيل الطلبات وتقييمها: نماذج متعددة الأقسام، ومرفقات مستندات كبيرة، وتكامل مع أنظمة حكومية خارجية لا يمكن الاعتماد على استقرارها دائمًا. أي اتصال قد يتأخر أو يضيع ردّه، وإعادة المحاولة العمياء قد تُنشئ السجل نفسه مرتين.
دوري
مطوّر خلفي في فريق المشروع: أعمل على الخدمات، وتصميم قاعدة البيانات، والتكامل مع الأنظمة الخارجية.
القرارات
- إعادة المحاولة مع Idempotency: كل طلب يحمل مفتاحًا ثابتًا في كل محاولة، فتكرار الإرسال لا يكرر الأثر.
- التقييم وفق معايير محددة: حساب الدرجات داخل خدمة Spring Boot.
- هجرات منضبطة: مخطط MySQL يُدار عبر Liquibase، بشكل قابل للتتبع عبر البيئات.
ما يمكن إثباته
تفاصيل المشروع وأرقامه مملوكة لجهة العمل، لذا حُذفت أسماء الجهات، والرسم أعلاه تبسيط معمّم للنمط — لا لواجهات النظام الفعلية.
الحدود والدروس
مع الأنظمة الخارجية، السؤال ليس «هل ستفشل؟» بل «ماذا يحدث حين تفشل في منتصف العملية؟». تصميم الطلب ليكون آمن التكرار من البداية أرخص بكثير من تنظيف السجلات المكررة لاحقًا.