#P1614
POST /v2/account-history/calculate-daily
Route Info
| Method | Endpoint | Controller | Middleware |
| POST | /v2/account-history/calculate-daily | AccountHistoryController@calculateDailyBalanceForYear | authWithJwt |
شرح عملکرد (Functionality)
این API برای محاسبه و ذخیره ماندههای روزانه یک همکار (Colleague) استفاده میشود. فرآیند محاسبه میتواند:
- برای کل یک سال مشخص (جلالی)
- یا برای یک بازه تاریخ خاص
محاسبات امکان اجرا به صورت:
- همزمان (Sync) با بازگردانی نتیجه
- غیرهمزمان (Async) با استفاده از Job در Queue
نتیجههای محاسبه شده در Redis با TTL سی روزه ذخیره میشوند.
ورودی (Request Body)
{
"colleague_id": 24,
"year": 1403, // optional
"from": "1403-01-01", // optional
"to": "1403-12-29", // optional
"async": true // optional, default = false
}
قوانین اعتبارسنجی
- colleague_id الزامی و باید در جدول colleagues موجود باشد.
- year اختیاری، عدد بین 1300 تا 1500.
- from/to تاریخ شمسی در فرمت
Y-m-d. - async مقدار boolean.
- ارسال تاریخهای آینده ممنوع است.
منطق اجرا (Execution Logic)
- اول اعتبارسنجی Laravel انجام میشود.
- اگر تاریخ آینده ارسال شود → خطا.
- اگر async=true → Job با پارامترهای:
- colleague_id
- year
- type=daily
- اگر async=false →
calculateAndStoreDailyBalance()مستقیماً فراخوانی میشود.
مشخصات Job
- timeout: 3600 ثانیه
- tries: 3
- در صورت خطا → fail شدن job
- لاگ کامل برای شروع، پایان و خطا
پاسخ موفق (Async Mode)
{
"payload": null,
"meta": {
"colleague_id": 24,
"year": 1403,
"from": "1403-01-01",
"to": "1403-12-29",
"type": "daily",
"status": "queued",
"timestamp": "2025-12-01T10:15:00+03:30"
}
}
پاسخ موفق (Sync Mode)
{
"payload": {
"1403-01-01": {
"credit": 0,
"debit": 1200000,
"balance": -1200000
},
"1403-01-02": {
"credit": 500000,
"debit": 0,
"balance": 500000
}
},
"meta": {
"colleague_id": 24,
"from": "1403-01-01",
"to": "1403-12-29",
"total_days": 365,
"timestamp": "2025-12-01T10:15:00+03:30"
}
}
پاسخهای خطا (Error Responses)
اعتبارسنجی (400)
{
"error": {
"code": "VALIDATION_ERROR",
"message": "colleague_id is required"
},
"meta": {
"timestamp": "2025-12-01T10:18:00+03:30"
}
}
تاریخ آینده مجاز نیست (400)
{
"error": {
"code": "FUTURE_DATE_NOT_ALLOWED",
"message": "Cannot calculate for future dates."
},
"meta": {
"colleague_id": 24,
"to": "1404-01-01",
"timestamp": "2025-12-01T10:18:00+03:30"
}
}
خطای داخلی (500)
{
"error": {
"code": "INTERNAL_ERROR",
"message": "Unexpected error..."
},
"meta": {
"colleague_id": 24,
"timestamp": "2025-12-01T10:20:00+03:30"
}
}
Meta
- Redis Key Format:
account_history:daily:{colleagueId}:{year}:{date} - TTL: 30 روز
- Job Class:
CalculateAccountHistoryJob - Service Method:
calculateAndStoreDailyBalance()