Motoshub · Software Architecture
وضعیت زنده و راستیآزماییشدهی همین نقشه (۱۴۰۵/۰۵/۱۱) · شش ریپو، یک قرارداد. فرانت فقط با قراردادِ /api/v1 حرف میزند؛ Gateway تعیین میکند پاسخ از PHP بیاید یا Django (مهاجرت strangler-fig، بدون big-bang).
■ توپر = موجود و فعال · ▨ خطچین = موجود ولی خارج از مسیر دادهی محصول · سبز = در حال ساخت · کهربایی = اسکلت، نیازمند تکمیل
| قرارداد | شرح | ضامن |
|---|---|---|
| پاکت پاسخ | فهرستها همیشه {data, links, meta}؛ خطاها ۴۰۱/۴۰۳/۴۰۴/۴۲۲ با بدنهی یکسان | تست قرارداد در CI هر دو بکاند |
| Auth واحد | JWT HS256، claims {iat,exp,sub}، راز مشترک — توکن PHP در Django معتبر و برعکس | تست سازگاری متقابل (B2.4) |
| سوییچ مسیر | هر ماژول پس از تایید برابری قرارداد، در Gateway به Django میرود؛ برگشت = برگرداندن همان مسیر | DevOps + چکلیست B19.3 |
| مرجع UX | رفتار هر صفحهی web-client = همان صفحه در demo.shub.ir | پذیرش PO روی staging |
api.shub.ir بالاست و Kong پاسخ میدهد (هدرهای x-kong-*، TLS برقرار). مسیرهای فعال: auth/blogs/news→PHP و projects→Django؛ هر مسیر دیگر ۴۰۴ میگیرد چون catch-all تعریف نشده. کانفیگ همچنان در ایمیج پخته میشود (تغییر مسیر = rebuild). قدم بعدی: catch-all→PHP + مسیرهای سازمانی→Django + اتصال فرانت به Gateway بهجای دو دامنهی جدا.api2.shub.ir با ۳۴۱ عملیات روی ۱۷۳ مسیر بالاست: contracts (۷۵)، funds (۱۰۲)، research (۶۳)، knowledge (۵۰)، projects (۳۴). اینها دقیقاً ماژولهاییاند که PHP ندارد. یعنی فرضِ «Django همان قرارداد PHP را بازمیسازد» درست نیست؛ دو نیمهی مکملِ یک محصولاند و Gateway باید همین تقسیم را منعکس کند. تنها منبعِ مشترک: conversations.API شاملِ ۲۹۳ عملیات روی ۵۵ منبع (۶۲ کنترلر) است، اما api1.shub.ir فقط ۱۲۹ عملیات از ۱۷ منبع را سرو میکند: auth · users · blogs · news · groups · events · photos · albums · videos · forum · files. ماژولهایی مثل feed، conversations، notifications، search، friends، polls و tickets در کد آمادهاند ولی ۴۰۴ میدهند. کوتاهترین مسیرِ رفعِ انسداد = ادغام و استقرارِ همین برنچ. (اندازهگیریِ ۱۴۰۵/۰۵/۱۱ — جدولِ کامل){"error":"…"} و ۴۰۴ → {"message":"…","request_id":"…"}. تا یکسانسازی (B1)، هندلرِ خطای فرانت باید هر دو را بپذیرد.api1.shub.ir/api/v1/docs/index و api2.shub.ir/api/schema/ هر دو زندهاند — اما دو سندِ مستقلاند با پاکت پاسخ و سبکِ خطای متفاوت. تا انتشارِ یک Swaggerِ واحد پشت Gateway، «قراردادِ واحد» فقط روی کاغذ است.api2.shub.ir بالاست، ولی motonextfront.shub.ir (staging فرانت) همچنان resolve نمیشود؛ گیتِ ۷ و ۸ پایپلاین برای تیم Front مقصدی ندارد.holding، company، tenant و scope صفر نتیجه دارد. سلسلهمراتبِ سیستم ← هلدینگ ← شرکت و «دامنهی انتشار» فقط در پروتوتایپ هست. چون این لایه روی هر موجودیت اثر میگذارد، افزودنش الان سه فیلد و یک فیلترِ مشترک است و بعد از پرشدنِ دیتابیس، مهاجرتِ داده روی همهی جدولها.api/v1 فقط auth/login، auth/me و auth/permissions دارد؛ refresh، logout، register و change-password وجود ندارند. چون F3 به هر چهار وابسته است، B4 روی مسیرِ بحرانیِ کلِ برنامه قرار میگیرد.oauth2ی که در URLِ ریموتِ چند مخزن ذخیره بودند چرخانده شدهاند و دیگر معتبر نیستند. باقیمانده: ریموتِ محلیِ توسعهدهندهها هنوز توکنِ مرده دارد و git fetch با آن شکست میخورد — یکبار git remote set-url لازم است.