نرم‌افزار سفارشی · فروشگاه اینترنتی · آموزش رباتیک و برنامه‌نویسی

روبوکد؛ سامانه جامع آموزش، آزمون آنلاین، فروشگاه و مدیریت نمایندگان

طراحی و توسعه سامانه یکپارچه روبوکد با هدف مدیریت و ارائه خدمات آموزشی در یک بستر واحد. این سامانه شامل دوره‌های آنلاین و حضوری، آزمون و صدور کارنامه، فروشگاه با قابلیت قیمت‌گذاری عمده، صدور گواهی قابل استعلام با QR، پنل اختصاصی نمایندگان و مدرسان و سیستم مدیریت پورسانت است.

کارفرما
مؤسسه آموزشی روبوکد
حوزه
آموزش رباتیک و برنامه‌نویسی
سال
1404
وضعیت
تحویل‌شده و در پشتیبانی
مشاهده سایت
  • تحلیل و کشف نیاز
  • طراحی تجربه و رابط کاربری
  • معماری نرم‌افزار
  • توسعه فرانت‌اند
  • توسعه بک‌اند و API
  • طراحی پایگاه داده
  • یکپارچه‌سازی با سیستم‌های دیگر
  • استقرار و DevOps
  • سئوی فنی
  • تست و تضمین کیفیت
  • پشتیبانی و توسعه مستمر

نتیجه در عدد

18
ماژول با اسکیمای مستقل

در یک استقرار واحد، روی یک پایگاه داده

2,831
تست خودکار

1,922 دامنه و API، 697 پنل، 212 سایت

154
صفحه‌ی سایت و پنل

57 صفحه‌ی عمومی، 97 صفحه‌ی مدیریتی

بنر اصلی سایت

چالش

روبوکد فقط یک سایت آموزشی نیست. این مجموعه هم‌زمان یک آموزشگاه، فروشگاه تجهیزات، سامانه آزمون و صدور گواهی و یک شبکه از نمایندگان و مدرسان در شهرهای مختلف دارد. از همان ابتدا قرار بود همه این بخش‌ها در یک سامانه کنار هم کار کنند، نه اینکه برای هرکدام یک نرم‌افزار جدا داشته باشیم.

اگر این بخش‌ها از هم جدا باشند، مشکلات خیلی زود خودش را نشان می‌دهد؛ کاربر باید چند بار ثبت‌نام کند، اطلاعات خرید دوره با فروشگاه ارتباطی ندارد و محاسبه پورسانت نمایندگان هم به گزارش‌های جداگانه وابسته می‌شود. حتی برای دیدن یک گزارش ساده از فروش، ممکن است مدیر مجبور شود چند فایل مختلف را با هم بررسی کند.

از طرف دیگر، چند نیاز خاص هم وجود داشت که کار را کمی پیچیده‌تر می‌کرد. یکی از آن‌ها ورود کاربران از شاد بود. چون بخش زیادی از کاربران را دانش‌آموزان تشکیل می‌دهند، لازم بود ورود به سامانه بدون نیاز به ثبت شماره تلفن و از داخل شبکه دانش‌آموزی انجام شود.

موضوع بعدی، داشتن یک ویترین اختصاصی برای کاربران شاد بود. این بخش باید ظاهر و مسیر خرید خودش را داشته باشد و حتی روش ارسال و درگاه پرداخت متفاوتی ارائه کند، اما اطلاعات محصولات و موجودی آن با فروشگاه اصلی مشترک باشد.

مدیریت ویدیوهای آموزشی هم یکی دیگر از چالش‌های پروژه بود. بعضی از فایل‌ها حجم بسیار بالایی داشتند و آپلود مستقیم فایل‌های چندگیگابایتی با اینترنت خانگی کاربران، عملاً تجربه مناسبی ایجاد نمی‌کرد. برای همین، مدیریت و انتقال این فایل‌ها هم نیاز به راهکار جداگانه‌ای داشت.

راه‌حل

برای روبوکد یک سامانه واحد ساخته شد که هر چهار بخش کسب‌وکار را در خودش جای می‌دهد. با این حال، داخل این سامانه همه‌چیز به هم وابسته نیست؛ پروژه به ۱۸ ماژول تقسیم شده و هر ماژول پایگاه داده و محدوده مشخص خودش را دارد. هیچ ماژولی مستقیماً به جدول‌های ماژول دیگر دسترسی ندارد و ارتباط بین آن‌ها از مسیرهای مشخص انجام می‌شود.

از دید کاربر، این ساختار پیچیده کاملاً ساده به نظر می‌رسد: یک حساب کاربری، یک سبد خرید، یک فرآیند پرداخت و یک گزارش. کسی که یک دوره آموزشی می‌خرد، با همان حساب می‌تواند از فروشگاه هم خرید کند، امتیاز باشگاه مشتریانش در همان حساب ثبت می‌شود و مدیر مجموعه هم اطلاعات فروش را از یک داشبورد می‌بیند.

برای سه چالش اصلی پروژه هم راه‌حل‌های مشخصی در نظر گرفته شد.

ورود از شاد با ارتباط مستقیم سرور به سرور و استفاده از توکن Merchant انجام می‌شود. یک هش یک‌بارمصرف با اعتبار ۱۰ دقیقه‌ای تولید می‌شود و بر اساس آن حساب کاربر بدون نیاز به شماره تلفن ساخته می‌شود.

برای داشتن ویترین جداگانه شاد از مفهومی به نام Surface استفاده شد. فروشگاه اصلی و ویترین شاد می‌توانند کاتالوگ، روش ارسال، سفارش و درگاه پرداخت متفاوتی داشته باشند، اما اطلاعات محصولات و موجودی از یک منبع مشترک خوانده می‌شود. بنابراین نیازی به ساختن یک فروشگاه دوم یا کپی کردن اطلاعات وجود ندارد.

در بخش آپلود ویدیوهای حجیم هم فایل‌های دو گیگابایتی به صورت تکه‌تکه ارسال می‌شوند. اگر اتصال اینترنت هنگام آپلود قطع شود، فرآیند از همان بخشی که متوقف شده ادامه پیدا می‌کند و لازم نیست کل فایل دوباره ارسال شود.

از طرف دیگر، چون عملیات مالی مختلفی در سیستم انجام می‌شود، ارتباط بین ماژول‌ها با یک تراکنش بزرگ و مشترک مدیریت نشده است. رویدادهایی مثل خرید دوره، خرید کالا، شارژ کیف پول، پرداخت پورسانت و بازپرداخت از طریق جدول Outbox منتقل می‌شوند. در نتیجه اگر یک عملیات با خطا مواجه شود، سیستم می‌تواند دوباره آن را اجرا کند و در صورت تکرار خطا، رویداد به Dead Letter منتقل می‌شود. این ساختار باعث می‌شود رویدادها بین ماژول‌ها گم نشوند و هر بخش بتواند مستقل از بخش‌های دیگر کار خودش را انجام دهد.

قابلیت‌های کلیدی

  • آزمون آنلاین با کارنامه‌ی تفکیکی

    بانک سؤال، دسته و بسته‌ی آزمون، برگزاری زمان‌دار، تصحیح خودکار، و کارنامه با نمره‌ی خام و درصد به تفکیک.

  • صدور گواهی و کارت عضویت با QR

    گواهی دوزبانه با قالب و مهر، کارت عضویت با کد QR و صفحه‌ی عمومی استعلام، هرکسی می‌تواند اصالت گواهی را خودش بررسی کند. هنرجو هم می‌تواند از پنلش درخواست گواهی بدهد.

  • فروشگاه با قیمت‌گذاری پلکانی عمده

    محصول با تنوع و موجودی، قیمت عمده به‌صورت پلکانی، روش ارسال بر پایه‌ی منطقه‌ی جغرافیایی و وزن، ارسال رایگان بالای مبلغ، و رسید کارت‌به‌کارت.

  • پنل نمایندگان، مربیان و مدرسان

    درخواست و تأیید همکاری، سطح‌بندی و تخصص، سیاست پورسانت با تسویه‌ی خودکار، و کارنامه‌ی درآمد تفکیک‌شده، نماینده خودش می‌بیند از کدام فروش چقدر سهم دارد.

  • دوره‌ی آنلاین با ویدیوی دو گیگابایتی

    فصل و درس، بارگذاری تکه‌ای تا 2 گیگابایت با ازسرگیری پس از قطعی، فروش درس‌به‌درس یا بسته‌ای، پخش‌کننده‌ی اختصاصی و کنترل دسترسی محتوا.

  • پرداخت، کیف پول و کد تخفیف هدف‌دار

    اتصال مستقیم به درگاه پارسیان با تأیید و برگشت مطابق قرارداد بانک و محافظت در برابر callback تکراری، کیف پول، کد تخفیف با سقف مصرف، و بازپرداخت قابل ردیابی.

  • ورود یکپارچه از شاد

    دانش‌آموز از داخل شبکه‌ی دانش‌آموزی وارد می‌شود، بدون شماره تلفن: تبادل سرور‌به‌سرور با توکن مرچنت و هش یک‌بارمصرف با انقضای ده‌دقیقه‌ای.

  • دو ویترین روی یک داده

    فروشگاه اصلی و لندینگ شاد کاتالوگ، روش ارسال، سفارش و درگاه جدا دارند، روی همان موجودی و همان گزارش، بدون کپی کردن سیستم.

معماری و فناوری

سبک معماری
مونولیت ماژولار
الگوها
طراحی دامنه‌محور (DDD)رویدادمحورالگوی Outbox

روبوکد به‌صورت مونولیت ماژولار توسعه داده شده است؛ یعنی پروژه یکپارچه مستقر می‌شود، اما ماژول‌ها مرزهای مشخص و مستقل خودشان را دارند.

هر ماژول DbContext و Schema اختصاصی دارد و ۱۸ اسکیمای مجزا در یک PostgreSQL قرار گرفته‌اند. دسترسی مستقیم یک ماژول به جداول ماژول دیگر وجود ندارد و ارتباط بین آن‌ها از طریق قراردادهای مشخص انجام می‌شود.

برای عملیات بین‌ماژولی، از Outbox و ارتباط رویدادمحور استفاده شده است. رویدادهایی مثل اعطای دوره، شارژ کیف پول و محاسبه پورسانت با قابلیت تلاش مجدد و Dead Letter پردازش می‌شوند تا خطای یک بخش روی فرآیند اصلی اثر نگذارد.

ساختار Surface نیز امکان ایجاد چند ویترین با یک داده مشترک را فراهم می‌کند. برای مثال، فروشگاه اصلی و ویترین شاد می‌توانند تنظیمات فروش، ارسال و پرداخت متفاوتی داشته باشند، بدون اینکه اطلاعات محصولات دوباره ایجاد شود.

بخش دیگری از سیستم نیز به‌صورت قابل پیکربندی از پنل مدیریت طراحی شده و مواردی مثل درگاه پرداخت، پیامک، تنظیمات سئو، محتوای لندینگ و اتصال SSO بدون نیاز به استقرار مجدد قابل تغییر هستند.

بک‌اند و API
.NET 10C#Entity Framework CoreMediatRHangfireREST API

API، دامنه و کارهای زمان‌بندی‌شده؛ 96 پروژه، 65 کنترلر نسخه‌دار

پایگاه داده
PostgreSQL

PostgreSQL 16 ، 18 اسکیمای مجزا، 109 مهاجرت نسخه‌بندی‌شده

کش
Redis

Redis 7 ، نشست، کد یک‌بارمصرف، محدودیت نرخ

فرانت‌اند
Next.jsReact.jsTypeScriptTailwind CSS

سایت عمومی با رندر سمت سرور و سئو، 57 صفحه، راست‌چین کامل و تقویم شمسی

فرانت‌اند
Vite

پنل مدیریت با TanStack Query، 97 صفحه‌ی مدیریتی

زیرساخت و استقرار
Dockernginx

Docker Compose، nginx و Let’s Encrypt، تک‌سرور و بازگشت‌پذیر

CI/CD و مانیتورینگ
SerilogSeq

لاگ ساخت‌یافته و ردیابی درخواست

یکپارچه‌سازی‌ها

  • شاد — ورود یکپارچه از شبکه‌ی دانش‌آموزی، بدون شماره تلفن
  • درگاه بانک پارسیان — تأیید، برگشت و محافظت در برابر callback تکراری
  • SMS.ir — پیامک تراکنشی و کمپینی با لاگ کامل
  • سرویس ایمیل اختصاصی با DKIM، SPF و DMARC

شرح تکمیلی

امکانات سامانه

روبوکد از چند بخش مختلف تشکیل شده، اما کاربر همه آن‌ها را در قالب یک سامانه واحد می‌بیند؛ با یک حساب کاربری، یک سبد خرید، یک فرآیند پرداخت و یک سیستم گزارش‌گیری.

آموزش

امکان برگزاری دوره‌های حضوری و آنلاین، تعریف فصل و درس، فروش دوره به‌صورت کامل یا درس‌به‌درس و مدیریت دسترسی هنرجو به محتوا فراهم شده است. ویدیوهای آموزشی حجیم نیز به‌صورت تکه‌ای بارگذاری می‌شوند و در صورت قطع اتصال، آپلود از همان نقطه ادامه پیدا می‌کند. برای پخش محتوا هم یک پخش‌کننده اختصاصی در نظر گرفته شده است.

آزمون

سامانه آزمون شامل بانک سؤال، دسته‌بندی آزمون‌ها و بسته‌های آزمون است. آزمون‌ها می‌توانند زمان‌بندی داشته باشند و پس از پایان، به‌صورت خودکار تصحیح شوند. نتیجه هر آزمون نیز در قالب کارنامه، همراه با نمره خام و درصد در اختیار هنرجو قرار می‌گیرد.

فروشگاه

در بخش فروشگاه، محصولات می‌توانند چند نوع و موجودی متفاوت داشته باشند. قیمت‌گذاری پلکانی برای خرید عمده، محاسبه روش ارسال بر اساس منطقه و وزن، ارسال رایگان برای سفارش‌های بالاتر از مبلغ مشخص و ثبت رسید پرداخت کارت‌به‌کارت از امکانات این بخش است.

پرداخت

پرداخت‌ها مستقیماً به درگاه پارسیان متصل هستند و تراکنش پس از بازگشت از بانک بررسی و تأیید می‌شود. کیف پول کاربران، کدهای تخفیف با محدودیت مصرف و امکان ثبت و پیگیری بازپرداخت نیز در همین بخش مدیریت می‌شود.

گواهی و کارت عضویت

پس از گذراندن دوره یا شرایط موردنظر، گواهی دوزبانه با قالب مشخص صادر می‌شود. کارت عضویت نیز دارای QR Code است و دارنده کارت می‌تواند از طریق یک صفحه عمومی، اعتبار آن را استعلام کند. هنرجو می‌تواند درخواست صدور گواهی را نیز از داخل حساب خود ثبت کند.

شبکه نمایندگان و مدرسان

نمایندگان، مربیان و مدرسان می‌توانند درخواست همکاری خود را ثبت کنند و پس از تأیید، بر اساس سطح و تخصص در سامانه فعالیت داشته باشند. محاسبه پورسانت و تسویه نیز به‌صورت سیستمی انجام می‌شود و هر همکار می‌تواند گزارش درآمد خودش را مشاهده کند.

ارتباط با کاربران

برای ارسال پیامک‌های تراکنشی و کمپین‌ها از SMS.ir استفاده شده و برای هر نوع رویداد، قالب و گزارش ارسال جداگانه وجود دارد. خبرنامه و اطلاعیه‌های داخل سامانه نیز بر اساس نقش و گروه کاربری قابل ارسال هستند و امکان استفاده از متن غنی و فایل پیوست را دارند.

محتوا و رسانه

بخش محتوا شامل وبلاگ و صفحه‌ساز بلوکی است و تنظیمات مربوط به سئو و متادیتا نیز در اختیار مدیر قرار دارد. فایل‌های رسانه‌ای پس از بارگذاری می‌توانند پردازش و برای استفاده در اندازه‌های مختلف آماده شوند. فایل‌های خصوصی نیز به شکل امن در اختیار کاربران مجاز قرار می‌گیرند.

حساب کاربری و دسترسی

ورود با رمز یک‌بارمصرف، مدیریت نقش‌ها و سطح دسترسی، ارتباط حساب والد و دانش‌آموز، دفترچه آدرس و ورود یکپارچه از شاد در بخش هویت و دسترسی مدیریت می‌شوند.

ساختار داخلی سامانه

با وجود اینکه کاربر با یک سامانه واحد روبه‌رو است، ساختار داخلی پروژه به ۱۸ ماژول مستقل تقسیم شده است. هر ماژول محدوده اطلاعاتی خودش را دارد و مستقیماً به جداول ماژول‌های دیگر دسترسی پیدا نمی‌کند. ارتباط بین بخش‌ها از طریق قراردادهای مشخص و رویدادهای داخلی انجام می‌شود.

این ماژول‌ها شامل هویت و دسترسی، آموزش، آزمون، فروشگاه، پرداخت، قیمت و تخفیف، گواهی، نمایندگان، اعلان‌ها، رسانه، محتوا، تنظیمات، جست‌وجو، گزارش‌ها، ثبت تغییرات، باشگاه مشتریان، جشنواره و ابزارهای پشتیبان اداری هستند.

کنترل کیفیت و توسعه

برای اینکه تغییرات پروژه باعث ایجاد مشکل در بخش‌های دیگر نشود، تست‌های خودکار بخش مهمی از فرآیند توسعه هستند. در مجموع ۲۸۳۱ تست خودکار برای بخش‌های مختلف سامانه نوشته شده و هر باگ مهم با یک تست مشخص پوشش داده می‌شود تا دوباره تکرار نشود.

ساختار پایگاه داده نیز به‌صورت نسخه‌بندی‌شده مدیریت می‌شود و تاکنون ۱۰۹ مهاجرت پایگاه داده برای تغییرات ساختاری انجام شده است. هیچ تغییر مستقیمی روی پایگاه داده اصلی انجام نمی‌شود.

ارتباط بین ماژول‌ها نیز بر اساس ۴۴ رویداد یکپارچه‌سازی انجام می‌شود و APIهای سامانه در قالب ۶۵ کنترلر با نسخه‌بندی، محدودیت درخواست و ساختار استاندارد برای پاسخ خطا در دسترس هستند.

سرویس‌های متصل به سامانه

روبوکد برای بعضی از قابلیت‌های خود به چند سرویس خارجی متصل است:

  • شاد: ورود یکپارچه کاربران از شبکه دانش‌آموزی با ارتباط سرور‌به‌سرور و توکن اختصاصی.
  • بانک پارسیان: ایجاد تراکنش، دریافت callback، بررسی اطلاعات پرداخت و مدیریت برگشت وجه.
  • SMS.ir: ارسال پیامک‌های تراکنشی و کمپین‌ها همراه با ثبت سوابق ارسال.
  • سرویس ایمیل اختصاصی: ارسال ایمیل‌های سازمانی با تنظیمات DKIM، SPF و DMARC و کنترل‌های امنیتی مربوط به ورود.
صفحه اصلی سایت روبوکد
صفحه نمایندگان سایت روبوکد

پروژه‌ی مشابهی در ذهن دارید؟

یک تماس پانزده دقیقه‌ای کافی است تا بگوییم چه چیزی لازم است، چقدر طول می‌کشد و از کجا شروع کنیم.

رویدادیار شهرداری تهران: رویدادهای فرهنگی 22 منطقه روی یک سامانه
کار شاخص

نرم‌افزار سفارشی

رویدادیار شهرداری تهران: رویدادهای فرهنگی 22 منطقه روی یک سامانه

سامانه‌ی یکپارچه‌ی رویدادها و اماکن فرهنگی شهر تهران: زنجیره‌ی تأیید چندمرحله‌ای، اطلس فرهنگی روی نقشه، گزارش میدانی ژئوفنس‌شده و نظرسنجی شهروندی، سه کلاینت وب، موبایل و API روی یک هسته.

  • React.js
  • Vite
  • TypeScript
  • Leaflet

شهرداری تهران · 1404

صفحه‌ی اصلی سایت کلینیک زیبایی شایلین، ساخته‌ی ایده‌پوکار شاخص

نرم‌افزار سفارشی

کلینیک زیبایی شایلین: رزرو آنلاین، مجله‌ی تخصصی و یک پنل مدیریت

سامانه‌ی جامع کلینیک زیبایی شایلین روی .NET 10 و Next.js: رزرو آنلاین با انتخاب خدمت و پزشک و تقویم شمسی، گالری قبل و بعد، مجله‌ی تخصصی با صفحه‌ساز، وب‌اپلیکیشن نصب‌شدنی با اعلان Web Push، و یک پنل مدیریت برای همه‌ی این‌ها.

  • Next.js
  • React.js
  • TypeScript
  • Vite

کلینیک زیبایی شایلین · 1404

بنر صفحه اصلی سایتکار شاخص

نرم‌افزار سفارشی

کلینیک مشاوره روشا: سامانه‌ی رزرو تا تسویه‌ی مشاور، روی وردپرس اختصاصی

سامانه‌ی یکپارچه‌ی مدیریت کلینیک روان‌شناسی روی وردپرس: رزرو آنلاین با قفل ضد تداخل، پرداخت و بیعانه، میز پذیرش 15 ماژولی، پنل مشاور با محاسبه‌ی سهم، و گزارش مالی با PDF فارسی. بدون افزونه‌ی رزرو یا قالب آماده.

  • WordPress
  • PHP
  • REST API
  • MariaDB

کلینیک مشاوره روشا · 1404