#P1618
GET /v2/account-history/monthly
Route Info
| Method | Endpoint | Controller | Middleware |
| GET | /v2/account-history/monthly | AccountHistoryController@getMonthlyBalance | authWithJwt |
شرح عملکرد (Functionality)
این API برای دریافت مانده حساب ماهانه طراحی شده است و دارای مکانیزم هوشمند (Read-Through Cache) است:
- بررسی کش: ابتدا سعی میکند داده را از Redis بخواند.
- محاسبه خودکار (Auto-Calculation): اگر داده در کش نباشد، سیستم به طور خودکار متد
calculateAndStoreMonthlyBalanceرا اجرا میکند تا دادههای آن سال تولید و ذخیره شوند. - بازخوانی: پس از محاسبه، مجدداً داده را از کش میخواند و برمیگرداند.
توجه: اگر کش خالی باشد، پاسخ این سرویس ممکن است کمی طول بکشد (به اندازه زمان محاسبه مانده سالانه)
ورودی (Query Parameters)
?colleague_id=108&year=1403&month=2
قوانین اعتبارسنجی (Validation Rules)
- colleague_id: الزامی | integer | موجود در جدول
colleagues. - year: الزامی | integer | بازه 1300 تا 1500.
- month: الزامی | integer | بازه 1 تا 12 (نیاز به ارسال صفر قبل عدد نیست، سیستم خودکار Pad میکند).
منطق اجرا (Execution Logic)
- اعتبارسنجی ورودیها.
- خطا → 400 (VALIDATION_ERROR).
- تبدیل ماه ورودی به فرمت دورقمی (مثلاً
2به02). - فراخوانی سرویس
getMonthlyBalanceFromCache. - Logic داخل سرویس:
- ساخت کلید Redis.
- چک کردن وجود کلید. اگر بود → بازگشت (Meta:
cached: true). - اگر نبود → اجرای متد محاسبه (Calculation).
- چک کردن مجدد Redis. اگر بود → بازگشت (Meta:
cached: false, calculated: true). - اگر باز هم نبود → بازگشت آرایه خطا (CACHE_MISS).
- اگر خروجی سرویس حاوی
errorباشد → پاسخ 404. - در غیر این صورت → پاسخ 200.
پاسخ موفق (200 OK)
حالت ۱: داده در کش موجود بود (Cache Hit)
{
"payload": {
"credit": 500000,
"debit": 0,
"balance": 500000
},
"meta": {
"colleague_id": 108,
"year": 1403,
"month": "02",
"cached": true,
"timestamp": "2025-12-01T16:00:00+03:30"
}
}
حالت ۲: داده محاسبه شد (Cache Miss -> Calculated)
{
"payload": {
"credit": 500000,
"debit": 0,
"balance": 500000
},
"meta": {
"colleague_id": 108,
"year": 1403,
"month": "02",
"cached": false,
"calculated": true,
"timestamp": "2025-12-01T16:00:05+03:30"
}
}
پاسخهای خطا (Error Responses)
خطای اعتبارسنجی (400)
{
"error": {
"code": "VALIDATION_ERROR",
"message": "The month must be at least 1."
},
"meta": { ... }
}
خطای عدم یافتن/محاسبه (404)
زمانی رخ میدهد که حتی پس از تلاش برای محاسبه، دادهای در کش ذخیره نشود.
{
"error": {
"code": "CACHE_MISS",
"message": "Balance not found in cache and calculation failed"
},
"meta": {
"colleague_id": 108,
"year": 1403,
"month": "02",
"cached": false,
"timestamp": "..."
}
}
خطای سرور (500)
{
"error": {
"code": "INTERNAL_ERROR",