چگونه یک بازارگاه چندفروشنده (Multi-Vendor Marketplace) با لاراول بسازیم

ساخت یک بازارگاه، یک مسئله‌ی داده‌محور است.

اکثر توسعه‌دهندگان فکر می‌کنند بخش دشوار کار، داشبورد فروشنده است. اما اینطور نیست. چالش واقعی، چندمستاجری (multi-tenancy) است. شما باید اطمینان حاصل کنید که هر پرس‌وجو (query) به یک سوال پاسخ می‌دهد: مالک این داده‌ها کیست؟

اگر یک فروشگاه استاندارد بسازید و بعداً بخواهید فروشندگان را به آن اضافه کنید، با نیاز به بازنویسی کل پروژه روبرو خواهید شد. شما مجبور خواهید بود شناسه فروشنده (vendor ID) را در هر مدل، هر پرس‌وجو و هر سبد خرید بگنجانید. اگر حتی یک فیلتر را فراموش کنید، یک فروشنده می‌تواند سفارش‌های فروشنده دیگر را ببیند. این یعنی نشت داده (data leak).

شما سه انتخاب دارید:

  • خودتان آن را بسازید: تمام بندهای محدودکننده (scoping clauses) را خودتان می‌نویسید. این کار پرهزینه و پرخطر است.
  • استفاده از یک فروشگاه تک‌مستاجره (single-tenant) با افزونه‌ها: شما ستون‌های مربوط به فروشنده را به طرحواره‌ای (schema) اضافه می‌کنید که برای آن‌ها طراحی نشده است. جداسازی داده‌ها همچنان شکننده باقی می‌ماند.
  • استفاده از یک زیرساخت چندمستاجره: از بسته‌ای مانند Aimeos استفاده کنید که از روز اول، جداسازی را در مدل داده‌ها لحاظ می‌کند.

در اینجا نحوه تبدیل یک فروشگاه ساده به یک بازارگاه با استفاده از Aimeos آورده شده است:

۱. نصب زیرساخت

برای شروع، این دستور را اجرا کنید: composer create-project aimeos/aimeos myshop

۲. فعال‌سازی حالت چندفروشندگی

نیازی به بازنویسی پایگاه داده خود ندارید. فقط کافی است یک خط را در فایل .env تغییر دهید: SHOP_MULTISHOP=true

این پرچم (flag) به طور خودکار هر مسیر (route)، API و پنل مدیریت را به یک سایت خاص محدود می‌کند. سیستم جداسازی داده‌ها را برای شما مدیریت می‌کند.

۳. فعال‌سازی ثبت‌نام خودکار (self-service onboarding)

برای مقیاس‌پذیری، اجازه دهید فروشندگان خودشان ثبت‌نام کنند. این خط را به .env اضافه کنید: SHOP_REGISTRATION=true

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

چرا این روش کار می‌کند:

Aimeos همه چیز را حول محور «سایت» سازماندهی می‌کند. هر محصول، قیمت و سفارش دارای یک site ID است. لایه داده‌ها این مورد را به طور خودکار فیلتر می‌کند. شما نیازی به نوشتن "where site_id = ?" ندارید، زیرا سیستم این کار را برای شما انجام می‌دهد.

این رویکرد سه مشکل اصلی را حل می‌کند:

  • امنیت: جداسازی داده‌ها ویژگیِ خودِ پایگاه داده است، نه تکه‌ای از کد که ممکن است فراموش کنید.
  • پیچیدگی: فروشندگان می‌توانند محصولات پیچیده‌ای مانند اشتراک‌ها یا بسته‌ها را بدون نیاز به تغییر طرحواره (schema) توسط شما، مدیریت کنند.
  • پرداخت‌ها: می‌توانید از افزونه‌هایی مانند Stripe برای تقسیم آنی پرداخت‌ها استفاده کنید. پلتفرم کمیسیون خود را برمی‌دارد و مابقی به فروشنده می‌رسد.

از ساخت زیرساخت‌های تکراری دست بردارید. ساخت بازارگاه خود را شروع کنید.

منبع: https://dev.to/aimeos/how-to-implement-a-multi-vendor-e-commerce-marketplace-397a