من Supabase إلى Go للإنتاج: الشهر الأول

قبل شهرين، قمت ببناء Info Links. وهي منصة موارد مجانية لطلاب Le CNAM Lebanon. تخدم المنصة 300 طالب و50 مساقاً.

في البداية، كان الـ backend يعتمد على Supabase مباشرة. كان يعمل، لكنني لم أكن قادراً على الدفاع عن هذا الاختيار في مقابلة تقنية. لم يكن هدفي في الشهر الأول مجرد تعلم قواعد لغة Go، بل أردت بناء نظام يحترمه المهندسون ذوو الخبرة (senior engineers).

إليكم ما تغير:

  • انتقل الـ backend من الاعتماد الكلي على Supabase إلى Go REST API.
  • نمت قاعدة الكود (codebase) من 6 ملفات إلى أكثر من 100 ملف.
  • قمت بتطبيق بنية طبقات (layered architecture): API، وService، وRepository، وMiddleware.
  • أضفت حقن التبعيات (dependency injection) لإزالة المتغيرات العامة (global variables).
  • كتبت 6 سجلات لقرارات الهندسة المعمارية (ADRs) لشرح خياراتي.

يتبع الهيكل الجديد مساراً واضحاً: HTTP request → Router → Handler → Service → Repository → Postgres.

ركزت على الجاهزية للإنتاج (production readiness) من خلال هذه الإضافات:

  • تسجيل منظم للبيانات (structured logging) باستخدام slog.
  • فحوصات الحالة (health checks) والمقاييس (metrics).
  • تحديد معدل الطلبات (rate limiting) لمنع الإساءة.
  • التكامل المستمر (CI) مع اكتشاف السباق (race detection) والتدقيق (linting).
  • بناء Docker متعدد المراحل (multi-stage builds).
  • تغطية عالية للاختبارات (93% للـ API و96% للـ Service).

أجريت أيضاً اختبار حمل (load testing) باستخدام k6. قمت بإرسال 4,400 طلب في الثانية إلى الـ API. قام محدد المعدل (rate limiter) بحظر حركة المرور الزائدة في أقل من 1 مللي ثانية. ولم يتوقف النظام عن العمل.

كان أحد الدروس الكبيرة هو قاعدتي في استخدام الذكاء الاصطناعي. أقضي 45 دقيقة كل يوم في العمل بدون ذكاء اصطناعي. أستخدم هذا الوقت لإعادة هيكلة الكود (refactor) أو شرح الملف بصوت عالٍ. إذا لم أتمكن من شرحه، فلن أقوم بنشره. هذا يقلص الفجوة بين "إنه يعمل" و"أنا أفهم لماذا يعمل".

الهندسة الآن تتماشى مع المهمة. يظل المنتج مجانياً للطلاب، لكن الـ backend أصبح الآن بمستوى احترافي يؤهل للمقابلات التقنية.

في الشهر القادم، سأقوم ببناء خدمة Go مصاحبة للتحقق من سلامة الروابط باستخدام goroutines وcontext.

الموقع المباشر: infolinks.app GitHub: github.com/MohamadObeid9/Info_Links Telegram: @Info_Links9

المصدر: https://dev.to/mohamadobeid9/from-supabase-only-to-production-go-month-1-of-rebuilding-info-links-3a4p