فهرست مستندات پروژه

مفاهیم اصلی

Ersalv0.2.0-beta.2مشاهده منبعفارسی / انگلیسی

چرخه حیات مرسوله

هر مرسوله در ارسال از چرخه یکسانی پیروی می‌کند، فارغ از اینکه کدام provider را انتخاب کنید:

Quote (استعلام) → Book (ثبت) → Track (ردیابی) → (Cancel — لغو)

۱. Quote — قیمت‌گذاری مرسوله بدون ثبت. لیستی از Quote برمی‌گرداند (گاهی یکی به ازای هر سطح سرویس) ۲. Book — ایجاد مرسوله؛ کد رهگیری و شناسه مرسوله از طرف شرکت حمل دریافت می‌شود ۳. Track — دریافت وضعیت فعلی + تاریخچه زمانی رویدادها ۴. Cancel — لغو در صورت مجاز بودن توسط شرکت حمل و وضعیت مرسوله

انتزاع Provider

تمام providerها ShippingInterface را پیاده‌سازی می‌کنند. با تعویض یک رشته می‌توانید provider را عوض کنید — باقی کد شما دست نخورده می‌ماند.

قابلیت‌های اختیاری

  • SupportsLabel — providerهایی که برچسب قابل چاپ می‌دهند
  • SupportsPickup — providerهایی که جمع‌آوری از مبدأ را برنامه‌ریزی می‌کنند
  • SupportsBranches — providerهایی که شعب فیزیکی دارند
  • SupportsCOD — providerهایی که پس‌کرایه (COD) را می‌پذیرند
if ($provider instanceof SupportsCOD) {
    $booking = $booking->withCashOnDelivery(Amount::fromToman(250_000));
}

مدل وضعیت

ShipmentStatus یک enum با ۱۰ حالت است:

وضعیتپایانی؟معنا
Draftخیرساخته شده ولی هنوز ارسال نشده
Quotedخیرقیمت‌گذاری شده، ثبت نشده
Bookedخیرپذیرش توسط شرکت حمل
PickedUpخیرجمع‌آوری توسط پیک
InTransitخیردر حال حرکت در شبکه
OutForDeliveryخیردر حال تحویل نهایی
Deliveredبلهتحویل موفق
Failedبلهتحویل‌ناپذیر
Returnedبلهبازگشت به مبدأ
Cancelledبلهلغو شده

ShipmentStatus::isTerminal() می‌گوید آیا polling باید متوقف شود یا نه.

واحدها (بدون اعداد اعشاری)

برای حذف خطای ممیز شناور:

  • Parcel::$weightGrams — گرم (int)
  • Parcel::$lengthMm/widthMm/heightMm — میلی‌متر (int)
  • Amount — ریال (int)

هر provider خودش واحدها را به شکل مورد نیاز API تبدیل می‌کند.

تغییرناپذیری (Immutability)

تمام value objectها و DTOها تغییرناپذیرند. withStatus()، withHistory()، withCost() نسخه‌های جدید می‌سازند — نسخه اصلی ثابت می‌ماند.

تزریق وابستگی

$ersal = new Ersal(
    httpClient: $myHttpClient,
    logger: $myLogger,
    eventDispatcher: $myDispatcher,
    soapFactory: $mySoapFactory,
);

همه اختیاری‌اند. پیش‌فرض از ext-curl و ext-soap استفاده می‌کند.

SOAP در مقابل REST

ارسال هر دو را پشتیبانی می‌کند: providerهای SOAP (پست ایران) و REST (بقیه). تمایز از دید کد شما نامرئی است — همه ShippingInterface را پیاده‌سازی می‌کنند.

جستجو در مستندات

در همه پروژه‌ها جستجو کنید. با بستن این پنجره به راهنما برمی‌گردید.

Tab برای جابه‌جایی · Enter برای باز کردنEsc برای بستن