# خلفية تطبيق صحي بلغة Go على ToGO: دراسة حالة Health Debug

> كيف يُبقي Health Debug كل مؤقّت وفترة انتظار ونافذة زمنية على الخادم، بمحركات بروتوكول كإضافات ToGO وساعة مُحقنة وواجهة ترفض افتراضيًا. أرقام حقيقية وحدود بصراحة.

*2026-10-19T12:49:03Z*

# خلفية تطبيق صحي بلغة Go على ToGO: دراسة حالة Health Debug

Health Debug منتج للعناية الذاتية والتتبع الصحي لمن يقضون يومهم أمام مكتب. توضح هذه الدراسة كيف بُنيت خلفيته، وهي خلفية تطبيق صحي بلغة Go، على ToGO: محركات بروتوكول كإضافات، وخادم يملك كل التوقيت، وواجهة ترفض افتراضيًا. المستودع خاص، فالشرح هنا معماري بلا مقاطع شيفرة. وHealth Debug ليس مفتوح المصدر.

## 1. المشكلة

القواعد الصحية دقيقة: ماء بوحدات ثابتة مع حد يومي وفترة انتظار، ولا كافيين في أول اليوم، ونافذة قبل النوم، وفترة سماح للدواء، ومنطق دورة لا يتنبأ قبل توفر بيانات كافية. وإذا نفّذ كل عميل (ويب وإضافة متصفح وجوال وسطح مكتب) هذه القواعد بنفسه، تباعدت النتائج ورأى المستخدم إجابات مختلفة على أجهزته.

قاعدتان في المنتج تحكمان كل شيء. الأولى أن البروتوكول تصنيفي لا كمّي: الطعام آمن أو حامل لمحفّز، بلا حساب سعرات. والثانية أن التطبيق لا يختلق يقينًا طبيًا: يحلل الأنماط السلوكية فقط ويُحيل إلى الطبيب.

## 2. لماذا ToGO

- **نواة صغيرة وإضافات.** يمكن أن يكون كل محرك بروتوكول إضافة بقواعده الخاصة، تُسجَّل عند التشغيل.
- **الواجهة أولًا.** REST مع OpenAPI من Huma، فيصير كل عميل عارضًا رقيقًا.
- **المصادقة وPostgres كإضافات.** جلسات للويب ورموز وصول شخصية للعملاء الآخرين ومشغّل Postgres، بلا شيفرة لصق مخصصة.
- **التضمين (vendoring).** وحدات ToGO خاصة ومضمَّنة، فيعمل البناء دون اتصال.

يثبّت Health Debug الإصدار v0.21.0 من ToGO، مع إضافة auth بالإصدار v0.8.0 وdb-postgres بالإصدار v0.1.0 (من `go.mod`).

## 3. المعمارية

**الخادم مصدر الحقيقة.** كل مؤقّت وفترة انتظار ونافذة وفترة سماح وتنبؤ يُحسب في الواجهة. والعملاء يعرضون حالة الخادم ويرسلون نوايا أو أحداث حساسات. ويتحقق فحص في CI من أن ثوابت البروتوكول لا تظهر في شيفرة العملاء.

**الإضافات.** يستورد `internal/plugins/plugins.gen.go` إضافتين من ToGO: auth وdb-postgres. أما المحركات ففي `internal/engines`، وحزمة `enabled` تفعّل كلًّا منها باستيراد فارغ، فتعطيل محرك يعني حذف سطر لا حذف شيفرة. وتستورد هذه الحزمة اليوم ثمانية مدخلات: حجب الكافيين، وأمان وسائل منع الحمل، والدورة، ونافذة الارتجاع، والترطيب، وفترة سماح الدواء، وعائلات المحفّزات، ومحرك مرجعي يُستخدم كقالب. وينقسم كل محرك إلى نواة نقية بلا مدخلات ومخرجات وغلاف رقيق يسجّله.

**الساعة المُحقنة.** لا تستدعي أي حزمة نواة ساعة النظام. يُمرَّر الوقت إليها، فتصبح كل نافذة وفترة انتظار قابلة للاختبار، وتفرض اختبارات النقاء هذه القاعدة.

**المصادقة.** حارس يرفض افتراضيًا أمام الواجهة. والطلب على بيانات مستخدم آخر يُجاب بـ 404 لا 403، فلا يُكشف وجودها. ويستخدم الويب كوكي جلسة، وتستخدم بقية العملاء رموز وصول شخصية. ويظهر في سجل المخطط مسار هاتف/OTP وتحقق بخطوتين.

**قاعدة البيانات.** PostgreSQL 16 مع ترحيلات موثّقة بنمط التوسيع ثم الانكماش. وكل عمود NOT NULL بقيمة افتراضية، وتتحقق أداة فحص للمخطط في CI من القواعد.

**MCP.** يعرض `mcp/` أدوات ليسجّل مساعد البيانات ويقرأها: حالة اليوم، وتسجيل الماء، وسرد المشروبات، وتسجيل الكافيين، وتسجيل وقت الاستيقاظ، وسجل المحرك، وسرد الأطعمة وتثبيتها وإضافتها، وتسجيل الطعام.

**العملاء.** ويب وإضافة Chrome وتطبيق Expo/React Native وغلاف Electron لسطح المكتب، كلها تستهلك الواجهة نفسها وتشارك الرموز البصرية وكتالوجات ICU (عربي وإنجليزي مع RTL).

## 4. الشيفرة

المستودع خاص، فلا مقاطع شيفرة هنا.

## 5. أرقام (محسوبة من المستودع)

| ما المحسوب | العدد | كيف |
|---|---|---|
| إضافات ToGO في `plugins.gen.go` | 2 | الاستيرادات الفارغة في `internal/plugins` |
| مدخلات المحركات المفعّلة | 8 | الاستيرادات الفارغة في `internal/engines/enabled` |
| أدوات MCP | 10 | مدخلات الأدوات في `mcp/tools.go` |
| ترحيلات قاعدة البيانات | 27 | ملفات `.sql` في `db/atlas/migrations` |
| ملفات اختبار Go (دون vendor) | 67 | عدّ `*_test.go` |
| وثائق الخطة | 14 | `docs/plan` |

يصف README ثمانية محركات بروتوكول، منها محرك بومودورو الحركي. أما الشجرة اليوم ففيها سبع حزم محركات بروتوكول مع المحرك المرجعي، فالثامن ليس في الشيفرة بعد. ولا تُذكر هنا أرقام مستخدمين ولا أداء.

## 6. ما كان صعبًا وكيف ساعد ToGO

- **إبقاء المنطق خارج العملاء.** لا يفرض ToGO هذا. إنها قاعدة يسندها فحص CI واختبار نقاء، لا ميزة في الإطار.
- **المحركات كإضافات.** أعطى نموذج الإضافات في النواة حدًّا طبيعيًا. أما إطار المحركات فوقه (سجل وساعة مُحقنة واختبارات أسماء المخطط) فمن عندنا.
- **ترحيلات آمنة.** ترحيلات التوسيع ثم الانكماش الصارمة أبطأ كتابة، ولازمة حين لا يجوز ضياع سجل صحي.
- **وحدات خاصة.** التضمين يُبقي CI دون اتصال، وهو سبب بقاء المستودع خاصًا.
- **ToGO في الإصدار 0.x.** ثبّت الإصدارات وتوقع التغيير.

لا يشخّص Health Debug ولا يصف أدوية. وهذه المقالة ليست نصيحة طبية.

## الأسئلة الشائعة

### لماذا نُبقي منطق البروتوكول الصحي على الخادم؟
ليعرض كل عميل الحالة نفسها. تُحسب المؤقتات والنوافذ مرة واحدة في الواجهة.

### كيف تُبنى محركات البروتوكول على ToGO؟
كل محرك إضافة: نواة نقية للقواعد وغلاف رقيق يسجّله عند التشغيل.

### هل Health Debug مفتوح المصدر؟
لا. المستودع خاص.

### هل يقدّم Health Debug نصيحة طبية؟
لا. لا يشخّص ولا يصف علاجًا، ويُحيل إلى الطبيب.

## روابط

- [Health Debug](https://healthdebug.com)
- [ToGO على GitHub](https://github.com/togo-framework/togo)
- [معرض ToGO](https://to-go.dev/ar/showcase)

## اقرأ أيضًا

- [اعرض تطبيق Go كخادم MCP مع web-mcp](/ar/blog/go-mcp-server-togo-web-mcp)
- [ToGO أم Gin وEcho وFiber](/ar/blog/togo-vs-gin-echo-fiber)

---

Source: https://to-go.dev/ar/blog/health-debug-togo-case-study
