Skip to main content
#P1621

DELETE /v2/account-history/cache

Route Info

Method Endpoint Controller Middleware
DELETE /v2/account-history/cache AccountHistoryController@clearCache authWithJwt

شرح عملکرد (Functionality)

این API برای پاک‌سازی دستی کش (Invalidation) استفاده می‌شود. زمانی که داده‌های زیرساختی تغییر کرده‌اند و نیاز است محاسبات مجدداً از صفر انجام شوند، این متد صدا زده می‌شود.

  • دامنه پاک‌سازی: هم کش روزانه و هم کش ماهانه مربوط به همکار و سال ورودی را حذف می‌کند.
  • نتیجه: پس از اجرای این متد، اولین درخواست بعدی به روت‌های دریافت اطلاعات (مثل getMonthlyBalance)، باعث محاسبه مجدد (Recalculation) خواهد شد.

ورودی‌ها (Input Parameters)

پارامترها می‌توانند در Query String یا Body (JSON) ارسال شوند.

{
  "colleague_id": 108,
  "year": 1403
}

قوانین اعتبارسنجی (Validation Rules)

  • colleague_id: الزامی | integer | موجود در جدول colleagues.
  • year: الزامی | integer | بازه 1300 تا 1500.

منطق اجرا (Execution Logic)

  • اعتبارسنجی ورودی‌ها.
  • گام اول (روزانه): جستجوی تمام کلیدهای روزانه با الگوی DAILY_BALANCE_KEY{colleagueId}:{year}:* و حذف آن‌ها.
  • گام دوم (ماهانه): جستجوی تمام کلیدهای ماهانه با الگوی MONTHLY_BALANCE_KEY{colleagueId}:{year}:* و حذف آن‌ها.
  • شمارش تعداد کلیدهای حذف شده.
  • ثبت عملیات در Log سیستم (Log::info).
  • بازگشت تعداد کلیدهای حذف شده به کلاینت.

پاسخ موفق (200 OK)

{
  "payload": {
    "cleared_keys": 25
  },
  "meta": {
    "colleague_id": 108,
    "year": 1403,
    "timestamp": "2025-12-01T17:05:00+03:30"
  }
}
* عدد cleared_keys مجموع تعداد روزها و ماه‌های حذف شده است.

پاسخ‌های خطا (Error Responses)

خطای سمت سرویس (500)

اگر اتصال به Redis در حین حذف قطع شود:

{
  "error": {
    "code": "CACHE_CLEAR_ERROR",
    "message": "Redis connection failed..."
  },
  "meta": { ... }
}

نکات فنی (Technical Notes)

  • Non-Atomic Operation: عملیات حذف در دو مرحله (ابتدا روزانه، سپس ماهانه) انجام می‌شود. اگرچه احتمال آن کم است، اما در صورت بروز خطا در وسط کار، ممکن است نیمی از کش پاک شود و نیمی باقی بماند.
  • Race Condition: بین زمانی که دستور Redis::keys کلیدها را پیدا می‌کند و زمانی که Redis::del آن‌ها را پاک می‌کند، اگر کلید جدیدی (در کسری از ثانیه) اضافه شود، آن کلید جدید پاک نخواهد شد. این موضوع در سیستم‌های با نرخ نوشتن بسیار بالا اهمیت دارد اما در اینجا قابل چشم‌پوشی است.