Supabase سے Production Go تک: پہلا مہینہ
دو ماہ قبل، میں نے Info Links بنایا۔ یہ Le CNAM Lebanon کے طلباء کے لیے ایک مفت ریسورس پلیٹ فارم ہے۔ یہ 300 طلباء اور 50 کورسز کی خدمت کرتا ہے۔
شروع میں، بیک اینڈ (backend) براہ راست Supabase استعمال کرتا تھا۔ یہ کام تو کر رہا تھا، لیکن میں کسی تکنیکی انٹرویو میں اس کا دفاع نہیں کر سکتا تھا۔ پہلے مہینے کا میرا مقصد صرف Go syntax سیکھنا نہیں تھا۔ میں ایک ایسا سسٹم بنانا چاہتا تھا جس کی ایک سینئر انجینئر عزت کرے۔
یہاں وہ تبدیلیاں ہیں جو میں نے کیں:
- بیک اینڈ صرف Supabase سے منتقل ہو کر ایک Go REST API بن گیا۔
- کوڈ بیس (codebase) 6 فائلوں سے بڑھ کر 100 سے زائد فائلوں تک پہنچ گیا۔
- میں نے ایک لیئرڈ آرکیٹیکچر (layered architecture) نافذ کیا: API، Service، Repository، اور Middleware۔
- میں نے گلوبل ویری ایبلز (global variables) کو ختم کرنے کے لیے dependency injection کا اضافہ کیا۔
- میں نے اپنے فیصلوں کی وضاحت کے لیے 6 Architecture Decision Records (ADRs) لکھے۔
نیا ڈھانچہ ایک واضح راستے پر چلتا ہے: HTTP request → Router → Handler → Service → Repository → Postgres۔
میں نے ان اضافوں کے ذریعے پروڈکشن کی تیاری (production readiness) پر توجہ دی:
slogکے ساتھ اسٹرکچرڈ لاگنگ (Structured logging)۔- ہیلتھ چیکس (Health checks) اور میٹرکس (metrics)۔
- غلط استعمال کو روکنے کے لیے ریٹ لمٹنگ (Rate limiting)۔
- race detection اور linting کے ساتھ CI۔
- ملٹی سٹیج Docker builds۔
- زیادہ ٹیسٹ کوریج (API کے لیے 93% اور Service کے لیے 96%)۔
میں نے k6 کے ساتھ لوڈ ٹیسٹنگ (load testing) بھی کی۔ میں نے API پر فی سیکنڈ 4,400 درخواستیں بھیجیں۔ ریٹ لمٹر (rate limiter) نے 1ms سے بھی کم وقت میں اضافی ٹریفک کو بلاک کر دیا۔ سسٹم کریش نہیں ہوا۔
ایک بڑا سبق AI کے استعمال کے حوالے سے میرا اصول تھا۔ میں روزانہ 45 منٹ AI کے بغیر کام کرنے میں گزارتا ہوں۔ میں یہ وقت کوڈ کو ریفیکٹر (refactor) کرنے یا کسی فائل کی وضاحت اونچی آواز میں کرنے کے لیے استعمال کرتا ہوں۔ اگر میں اسے سمجھا نہیں سکتا، تو میں اسے شپ (ship) نہیں کرتا۔ یہ "یہ کام کرتا ہے" اور "میں سمجھتا ہوں کہ یہ کیوں کام کرتا ہے" کے درمیان کے فرق کو ختم کر دیتا ہے۔
اب انجینئرنگ مشن کے عین مطابق ہے۔ پروڈکٹ طلباء کے لیے مفت ہے، لیکن بیک اینڈ اب انٹرویو کے معیار (interview-grade) کا ہے۔
اگلے مہینے، میں goroutines اور context کا استعمال کرتے ہوئے لنک کی صحت چیک کرنے کے لیے ایک معاون (companion) Go سروس بناؤں گا۔
Live site: infolinks.app GitHub: github.com/MohamadObeid9/Info_Links Telegram: @Info_Links9