به محتوای اصلی

بک‌اند فروشگاه اینترنتی؛ کاتالوگ، سبد، سفارش و پرداخت

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

عاطفه امیری۳ دقیقه مطالعه
در این مطلب

اگر دنبال «فروشگاه‌ساز» هستید، این مقاله مال شما نیست و صادقانه‌ترین کار این است که همان اول بگوییم. این راهنما برای کسی است که اپ یا سایت فروشگاهی‌اش را خودش می‌سازد — با فلاتر، ری‌اکت‌نیتیو، Next.js — و فقط بک‌اندش را می‌خواهد: کاتالوگ، سبد، سفارش، کاربر و پرداخت. مدل داده‌ی کاملش را نشان می‌دهیم، می‌گوییم کدام بخشش عمومی است، و دو چیزی را باز می‌کنیم که در فروشگاه اینترنتی همیشه اشتباه پیاده می‌شوند: قیمت در لحظه‌ی سفارش، و موجودی.

فروشگاه‌ساز یا بک‌اند اختصاصی؟

معیارفروشگاه‌ساز آمادهبک‌اند آماده + فرانت‌اند خودتان
ظاهر و تجربه‌ی خریدقالب‌های خودشانهرچه بسازید
اپ موبایل اختصاصیمعمولاً نهبله
زمان تا فروش اولکمترینبه‌اندازه‌ی ساخت فرانت‌اند
مدل دادهثابتمال خودتان
مناسب برایفروشندهتیم فنی یا آژانس

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

مدل داده‌ی یک فروشگاه

چهار موجودیت هسته‌ی کار است:

  • دسته‌بندی (category) — برای منوی اپ. نام و نشانی.
  • محصول (product) — نام، توضیح، قیمت، تصویر، موجودی، و ارجاع به دسته‌بندی. فیلد تصویر شناسه‌ی یک فایل آپلودشده را نگه می‌دارد، نه آدرس؛ خودِ آپلود در آپلود عکس و فایل در اپلیکیشن آمده است.
  • سفارش (order) — به کاربر گره خورده، با وضعیت و مبلغ کل.
  • قلم سفارش (order_item) — هر ردیف سبد: کدام محصول، چند تا، به چه قیمتی.

«مشتری» موجودیت جدا نیست. خریدار همان کاربر نهایی پروژه است که ثبت‌نام کرده؛ سفارش خودکار به او گره می‌خورد. جدول مشتریِ مستقل یک دفترچه‌ی موازی است که به احراز هویت وصل نیست.

سطح دسترسی: نصف فروشگاه باید عمومی باشد

  • دسته‌بندی و محصول → عمومی. کاتالوگ باید بدون ورود خوانده شود، وگرنه بازدیدکننده قبل از دیدن محصول باید ثبت‌نام کند و همان‌جا می‌رود. با کلید عمومی خوانده می‌شوند و برای موتورهای جست‌وجو هم قابل دسترسی‌اند.
  • سفارش و قلم سفارش → فقط خودش. هر کاربر فقط سفارش‌های خودش را می‌بیند. این دسترسی سطح رکورد است، نه فیلتر سمت کلاینت — احراز هویت با JWT تفاوتش را باز کرده.

دو چیزی که همیشه اشتباه پیاده می‌شوند

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

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

۲. موجودی را در لحظه‌ی پرداخت کم کنید، نه در لحظه‌ی افزودن به سبد. سبدِ رهاشده نباید کالا را قفل کند. کم کردن موجودی وقتی معنا دارد که پرداخت تأیید شده باشد.

پرداخت

سفارش تا وقتی پرداخت نشده فقط یک ردیف با وضعیت «در انتظار» است. اتصال درگاه — ساخت تراکنش، بازگشت از بانک، تأیید، و تغییر وضعیت سفارش — کاری است که معمولاً بک‌اند می‌خواهد؛ مسیر انجامش بدون نوشتن بک‌اند را در اتصال درگاه پرداخت به اپلیکیشن جدا نوشته‌ایم.

شروع از قالب فروشگاه

لازم نیست این مدل را از صفر بسازید: قالب «فروشگاه اینترنتی» همین چهار موجودیت را با فیلدها، رابطه‌ها و سطوح دسترسی بالا دارد. پروژه را از رویش می‌سازید و به شکل کسب‌وکار خودتان تغییرش می‌دهید — فهرست قالب‌ها.

خواندن کاتالوگ از اپ، یک درخواست است:

curl "https://api.fikaro.ir/my-shop/v1/product?filter[category]=<id>&sort=-created_at&limit=24" \
  -H "Authorization: Bearer apck_..."

صفحه‌بندی مبتنی بر cursor، فیلتر و مرتب‌سازی از همان اول هست و مستندات Swagger و کالکشن Postman خودکار به‌روز می‌مانند. کد اتصال از اپ موبایل در بک‌اند فلاتر و ری‌اکت‌نیتیو و از وب در اتصال فرانت‌اند به API آمده است.

سوالات متداول

برای فروشگاه اینترنتی، بک‌اند آماده بهتر است یا فروشگاه‌ساز؟
اگر فروشنده‌اید و می‌خواهید سریع بفروشید، فروشگاه‌ساز. اگر اپ یا سایت اختصاصی می‌سازید و ظاهر و جریان خرید بخشی از ارزش کارتان است، بک‌اند آماده با فرانت‌اند خودتان — چون فروشگاه‌ساز مدل داده و قالبش را به شما تحمیل می‌کند.
قیمت محصول را کجا ذخیره کنم؟
هم در محصول (قیمت جاری) و هم در قلم سفارش (قیمت لحظه‌ی خرید). اگر فقط در محصول باشد، با اولین تغییر قیمت تمام فاکتورهای قدیمی هم عوض می‌شوند — این کپی عمدی است، نه داده‌ی تکراری.
کاتالوگ محصولات را عمومی بگذارم یا پشت ورود؟
عمومی. دسته‌بندی و محصول باید بدون ورود خوانده شوند تا بازدیدکننده قبل از ثبت‌نام محصول را ببیند و موتورهای جست‌وجو هم بتوانند بخوانند. فقط سفارش و اقلامش خصوصی‌اند و به کاربر گره می‌خورند.
موجودی کالا را کِی کم کنم؟
در لحظه‌ی تأیید پرداخت، نه هنگام افزودن به سبد. اگر هنگام افزودن به سبد کم شود، سبدهای رهاشده کالا را بی‌دلیل قفل می‌کنند.

مطالب مرتبط