Motoshub · Verified Status
این صفحه «ادعا» نیست؛ نتیجهی اندازهگیریِ مستقیم است. هر عدد و هر وضعیت در این صفحه با درخواستِ واقعی به سرویسِ زنده یا با شمارشِ مسیرها از روی کدِ مخزن بهدست آمده. هدف: تیم Front و Backend بدانند امروز واقعاً چه چیزی در دسترس است، تا تسکی که دادهاش وجود ندارد زودتر از موعد شروع نشود.
همهی آدرسها مستقیماً تست شدند. از بازبینی اول تا دوم، سه محیطِ تازه بالا آمد: Gateway، Swaggerِ PHP و Swaggerِ Django.
| آدرس | نقش | نتیجه | توضیح |
|---|---|---|---|
motonext.shub.ir | سایت فعلی (برنچ motonext) | ۲۰۰ | بالا — رابط Oxwall. |
api.shub.ir | Gateway (Kong) — موبایل و آیندهی کلِ اپ | فعال، ناقص | Kong وارد مدار شد (هدرهای x-kong-*). فقط ۴ مسیر: auth، blogs، news → PHP و projects → Django. مسیر catch-all ندارد؛ هر مسیرِ دیگر ۴۰۴ میگیرد. |
api1.shub.ir | Swagger و APIِ فعلیِ PHP | ۲۰۰ | /api/v1/docs/index و /api/v1/docs/json هر دو زنده. ۱۲۹ عملیات / ۱۷ منبع. |
api2.shub.ir | Swagger و APIِ Django | ۲۰۰ | /api/schema/ زنده. ۳۴۱ عملیات / ۱۷۳ مسیر — بسیار جلوتر از آنچه اسناد قبلی میگفتند. |
demo.shub.ir | مرجع تجربه و پذیرش | ۲۰۰ | بالا — GitHub Pages. |
docs.shub.ir | اسناد تحویل | ۲۰۰ | بالا — همین سایت. |
motonextfront.shub.ir | Staging فرانت جدید | DNS ندارد | تنها محیطِ همچنان غایب. گیتِ ۷ و ۸ پایپلاین (دیپلوی staging و پذیرش PO) هنوز مقصدی برای تیم Front ندارد. |
هر دو Swagger خوانده و مقایسه شد. نتیجه با فرضِ اسنادِ قبلی («Django همان قرارداد را از نو میسازد») نمیخواند.
conversations است. یعنی این دو رقیب هم نیستند — دو نیمهی یک محصولاند و Gateway باید هر کدام را سرِ جای خودش بنشاند.
| بکاند | عملیات | منابع | پوشش |
|---|---|---|---|
api1.shub.ir — PHP/Oxwall | ۱۲۹ | ۱۷ | auth · users · blogs · news · groups · events · forum · feed · photos · albums · videos · conversations · messages · files · tags · flags · contact |
api2.shub.ir — Django/DRF | ۳۴۱ | ۱۳ | contracts (۷۵) · funds (۱۰۲) · research (۶۳) · knowledge (۵۰) · projects (۳۴) · conversations · login/logout/register · legacy-users · public · health |
| مجموعِ سطحِ زنده | ۴۷۰ | ۲۹ | همپوشانی: فقط conversations |
API ولی مستقرنشدهبرنچ API شاملِ ۲۹۳ عملیات روی ۵۵ منبع است؛ api1 فقط ۱۲۹ عملیات از ۱۷ منبع را سرو میکند. ۳۹ منبعِ زیر کد دارند ولی روی هیچ محیطی بالا نیستند:
tickets · ticket-categories · ticket-orders · polls · quizzes · quiz-questions ·
competitions · competition-submissions · challenges · challenge-* · friends ·
notifications · search · comments · mentions · privacy · cfps · grants ·
evaluations · technologies · tech-units · companies · employees · journal-* · landing-*
مسیر روی api.shub.ir | پاسخ | یعنی |
|---|---|---|
/api/v1/auth/me | ۴۰۱ | روت شده → PHP |
/api/v1/blogs | ۴۰۱ | روت شده → PHP |
/api/v1/news | ۴۰۱ | روت شده → PHP |
/api/v1/projects | ۳۰۱ | روت شده → Django |
هر مسیر دیگر (/groups، /feed، /funds، …) | ۴۰۴ | روت ندارد — بدون catch-all |
/api/v1/* → PHP بهعنوان پیشفرض، و مسیرهای contracts|funds|research|knowledge|projects → Django. با همین یک تغییر، هر ۴۷۰ عملیات از یک دامنهی واحد در دسترس میآید و فرانت دیگر لازم نیست بداند کدام سرویس پاسخ میدهد.
شمارشِ مستقیمِ RouteGet/RoutePost/RoutePatch/RouteDelete روی کنترلرهای Http/Controllers/API/V1 در هر برنچ.
برنچ در motoshub-web | کنترلر | عملیات | منبع | وضعیت |
|---|---|---|---|---|
API (کارِ مهاجرتِ کامل) | ۶۲ | ۲۹۳ | ۵۵ | ادغامنشده و مستقرنشده. منبعِ عددِ ۲۹۳ در اسناد همین برنچ است. |
moto-next | ۵ | ۲۴ | ۵ | مبنای استقرارِ production. |
main | ۰ | ۰ | ۰ | بدون لایهی api/v1. |
سرویسِ زنده api1.shub.ir | — | ۱۲۹ | ۱۷ | استقرارِ فعلی — جلوتر از moto-next و عقبتر از برنچ API. |
API کارِ انجامشدهای است که پشتِ یک MR مانده. تا وقتی ادغام و مستقر نشود، تیم Backend همان قابلیتها را در Django از صفر میسازد و تیم Front منتظرِ هر دو میماند. ادغامِ این برنچ کوتاهترین مسیر به «فرانت روی دادهٔ واقعی» است.
git به gl.iiscenter.ir از سرورِ تحلیل برقرار نشد، بنابراین ممکن است برنچها جلوتر رفته باشند. ارقامِ بخشهای ۱ و ۲ همگی امروز و زنده اندازهگیری شدهاند.سه قراردادِ الزامآورِ اسناد با پاسخِ واقعیِ سرویس مقایسه شد.
| قرارداد | آنچه سند میگوید | آنچه سرویس برمیگرداند | اثر |
|---|---|---|---|
| بدنهی یکسانِ خطا | خطاها با 401/403/404/422 و بدنهی یکسان |
۴۰۱ → {"error":"Authorization header token is missing."}۴۰۴ → {"message":"no Route matched…","request_id":"…"} |
دو شکلِ متفاوت. هیچکدام هم شکلِ استانداردِ اعلامشده نیست. تا یکسانسازی، هندلرِ خطای Front باید هر دو را بپذیرد. → B1، و یک نکته در F5. |
| مرجعِ فیلدها = Swagger | لینکِ Swagger در راهنمای هر دو تیم | حل شد — api1.shub.ir/api/v1/docs/index و api2.shub.ir/api/schema/ هر دو ۲۰۰ |
هر دو تیم حالا مرجعِ رسمیِ فیلد دارند. نکته: دو Swagger مجزا است، نه یک سند واحد؛ تا ادغامنشدنشان، «قرارداد واحد» روی کاغذ است نه در عمل. |
| auth واحد و کاملِ نشست | F3: POST /auth/refresh، logout با ابطالِ سمتِ سرور، F3.6 «endpointِ تغییر رمز هست» |
در کلِ api/v1 فقط auth/login، auth/me، auth/permissions وجود دارد |
refresh، logout، register و change-password در PHP وجود ندارند. F3 (فاز ۱، P1، پیشنیازِ همه) به B4 گره خورده است و بدونِ آن قابلِ اتمام نیست. |
| نامِ مسیرِ فید | F7/B7: GET /newsfeed |
مسیرِ واقعی در قرارداد: GET/POST /api/v1/feed (+ /feed/{id}/like، /feed/{id}/forward، /feed/{id}/privacy) |
در صفحههای تسک اصلاح شد؛ /newsfeed فقط نامِ پلاگینِ PHP است، نه مسیرِ API. |
oauth2 که در URLِ ریموتِ چند مخزن ذخیره شده بودند دیگر معتبر نیستند (چرخانده شدهاند). نکتهی باقیمانده: ریموتِ محلیِ توسعهدهندهها هنوز همان توکنِ مرده را دارد و git fetch با آن شکست میخورد — هر کس یکبار باید git remote set-url بزند.
مرجعِ پذیرش، demo.shub.ir است. همهی صفحههای پروتوتایپ با فهرستِ F1–F20 و B1–B19 تطبیق داده شد؛ موارد زیر در هیچ تسکی نیامدهاند.
| صفحه در پروتوتایپ | مسیر | حجم | وضعیت در برنامه | تخمینِ افزوده |
|---|---|---|---|---|
| نمای عمومی (لندینگ + ویترینِ عمومی + جزئیاتِ آیتمِ عمومی) | /، /public/* | ~۱۴۷۰ خط | هیچ تسکی ندارد. تنها سطحِ بدونِ ورودِ محصول و ایستگاهِ پایانیِ سناریوی فروش. | F21 — ۵ روز |
| دوستان و دنبالکردن | /dashboard/friends | ۱۸۷ خط | Backend دارد (B15) — Front فقط یک «تبِ دوستان» داخلِ F9.2 دارد، نه صفحهی مستقل. | F22 — ۲ روز |
| نظرسنجی و آزمون · مسابقات و چالشها | /dashboard/polls، /dashboard/competitions | ۴۲۲ خط | Backend دارد (B18) — در سرفصلِ فاز ۵ نام برده شده ولی هیچ subtaskِ Frontی ندارد. | F23 — ۴ روز |
| تیکت پشتیبانی | /dashboard/tickets | ۲۳۴ خط | در هیچکدام از دو تیم تسک ندارد، با اینکه ۱۲ عملیاتِ آماده در PHP دارد. | F24 + B20 — ۲ + ۲ روز |
| جایزه نوآوری و فناوری | /dashboard/award | ۹۳ خط | پس از نگارشِ تسکها به صفحهی مستقل تبدیل شد؛ در برنامه نیامده. | داخل F18.5 |
| جمعِ دامنهی کشفشده — خارج از تخمینهای فعلی | ~۱۵ روز | |||
| ماژول پروتوتایپ | بکاند | وضعیت |
|---|---|---|
| فید، اخبار، بلاگ، گروه، انجمن، رویداد، رسانه، گفتگو، کاربران | PHP | زنده روی api1 |
| دانش، پروژه، قرارداد، صندوق، پژوهش | Django | زنده روی api2 |
| تیکت، نظرسنجی/آزمون، مسابقات/چالش، دوستان، اعلان، جستجوی سراسری | PHP | کد دارد، مستقر نیست — در برنچ API |
| آموزش، جایزه نوآوری، گزارشگیری عمومی، مدیریت نقشها، برندسازی | — | در هیچ بکاندی نیست |
| هلدینگ / شرکت و دامنهبندی محتوا | — | در هیچ بکاندی نیست — نه مدل، نه فیلد، نه فیلتر |
holding، company، tenant یا scope نیست. یعنی سلسلهمراتبِ سیستم ← هلدینگ ← شرکت و «دامنهی انتشار» فقط در پروتوتایپ وجود دارد. چون این لایه روی هر موجودیتِ محتوایی اثر میگذارد (فیلدِ مالک + فیلترِ خواندن + مجوزِ نوشتن)، هرچه دیرتر اضافه شود گرانتر است: افزودنش الان یعنی سه فیلد و یک فیلترِ مشترک؛ افزودنش بعد از پرشدنِ دیتابیس یعنی مهاجرتِ داده روی همهی جدولها.
به ترتیبِ اثر بر جریانِ کار. سه موردِ بازبینی اول («بازگرداندن Swagger»، «DNSِ Django») دیگر لازم نیست.
| # | اقدام | مالک | باز میکند |
|---|---|---|---|
| ۱ | catch-all در Kong: /api/v1/* → PHP بهعنوان پیشفرض + مسیرهای contracts|funds|research|knowledge|projects → Django | DevOps | هر ۴۷۰ عملیات از یک دامنه؛ فرانت از api.shub.ir تغذیه میشود نه مستقیم از دو سرویس |
| ۲ | تصمیم دربارهی مدل هلدینگ/شرکت و افزودن scope/holdingId/companyId به موجودیتهای هر دو بکاند | PO + هر دو لید | تنها لایهای که در پروتوتایپ هست و در بکاند نیست؛ هرچه دیرتر، گرانتر |
| ۳ | استقرارِ برنچ API (۲۹۳ عملیات) روی api1 | Backend لید + DevOps | تیکت، نظرسنجی، مسابقات، دوستان، اعلان، جستجو — بدون یک خط کدِ تازه |
| ۴ | افزودنِ auth/refresh، auth/logout، auth/change-password | Backend ۱ | F3 — پیشنیازِ همهی صفحههای محافظتشده |
| ۵ | یکسانسازی پاکت پاسخ و بدنهی خطای دو بکاند + انتشارِ یک Swaggerِ واحد پشت Gateway | هر دو لید | «قرارداد واحد» را از کاغذ به عمل میآورد؛ تستِ قرارداد در CI |
| ۶ | ساختِ رکورد DNS برای motonextfront.shub.ir | DevOps | گیتِ ۷ و ۸ پایپلاین (staging و پذیرشِ PO) |
| ۷ | تصمیمِ PO دربارهی ماژولهای بیبکاند: آموزش، جایزه، گزارشگیری، مدیریت نقش، برندسازی | PO | تعریفِ روشنِ «پروتوتایپِ کامل» |