#P1615
POST /v2/account-history/calculate-monthly
Route Info
| Method | Endpoint | Controller | Middleware |
| POST | /v2/account-history/calculate-monthly | AccountHistoryController@calculateMonthlyBalanceForYear | authWithJwt |
شرح عملکرد (Functionality)
این API وظیفه محاسبه و ذخیره ماندههای ماهانه برای یک همکار (Colleague) را دارد. محاسبه میتواند بر اساس:
- یک سال مشخص (مثلاً 1402)
- یا یک بازه تاریخ دلخواه (from / to)
محاسبات میتوانند به صورت:
- همزمان (Sync): خروجی محاسبه همان لحظه بازگردانده میشود.
- غیرهمزمان (Async): پردازش در صف اجرا شده و پاسخ سریع برمیگردد.
در حالت async، عملیات توسط CalculateAccountHistoryJob با type = "monthly" انجام میشود.
ورودی (Request Body)
{
"colleague_id": 108,
"year": 1403, // optional
"from": "1403-01-01", // optional
"to": "1403-12-29", // optional
"async": false // optional (default=false)
}
قوانین اعتبارسنجی
- colleague_id الزامی و باید در جدول colleagues وجود داشته باشد.
- year اختیاری و باید بین 1300 تا 1500 باشد.
- from/to تاریخ شمسی معتبر در فرمت
Y-m-d. - async مقدار boolean.
- ارسال تاریخ آینده ممنوع است → خطای FUTURE_DATE_NOT_ALLOWED.
منطق اجرا (Execution Logic)
- اعتبارسنجی Laravel اجرا میشود.
- اگر from یا to بزرگتر از تاریخ امروز باشد → خطا.
- اگر async=true:
- Job با مقادیر:
- colleague_id
- year
- type = monthly
- پاسخ سریع با وضعیت queued برمیگردد.
- Job با مقادیر:
- اگر async=false:
محاسبه مستقیم با:calculateAndStoreMonthlyBalance()انجام میشود.
مشخصات Job
- timeout: 3600 ثانیه
- tries: 3
- در صورت خطا → fail شدن job
- ثبت کامل لاگ از شروع، پایان یا خطا
پاسخ موفق (Async Mode)
{
"payload": null,
"meta": {
"colleague_id": 108,
"year": 1403,
"from": "1403-01-01",
"to": "1403-12-29",
"type": "monthly",
"status": "queued",
"timestamp": "2025-12-01T12:35:00+03:30"
}
}
پاسخ موفق (Sync Mode)
{
"payload": {
"1403-01": { "credit": 0, "debit": 900000, "balance": -900000 },
"1403-02": { "credit": 500000, "debit": 0, "balance": 500000 }
},
"meta": {
"colleague_id": 108,
"year": 1403,
"total_months": 12,
"timestamp": "2025-12-01T12:35:00+03:30"
}
}
پاسخهای خطا (Error Responses)
اعتبارسنجی (400)
{
"error": {
"code": "VALIDATION_ERROR",
"message": "colleague_id field is required"
},
"meta": {
"timestamp": "2025-12-01T12:40:00+03:30"
}
}
تاریخ آینده مجاز نیست (400)
{
"error": {
"code": "FUTURE_DATE_NOT_ALLOWED",
"message": "Cannot calculate for future dates."
},
"meta": {
"colleague_id": 108,
"to": "1405-01-01",
"timestamp": "2025-12-01T12:40:00+03:30"
}
}
خطای داخلی (500)
{
"error": {
"code": "INTERNAL_ERROR",
"message": "Unexpected error..."
},
"meta": {
"colleague_id": 108,
"timestamp": "2025-12-01T12:41:00+03:30"
}
}
Meta
- Job Class:
CalculateAccountHistoryJob - Service Method:
calculateAndStoreMonthlyBalance - Job Type:
monthly