430 lines
11 KiB
Markdown
430 lines
11 KiB
Markdown
# درخواست APIهای داشبورد
|
||
|
||
سلام تیم بکاند 👋
|
||
|
||
برای تکمیل صفحه داشبورد نیاز به APIهای زیر داریم. لطفاً این APIها را پیادهسازی کنید:
|
||
|
||
---
|
||
|
||
## 1. API آمار کلی داشبورد (Dashboard Overview Stats)
|
||
|
||
**Endpoint:** `GET /api/v1/admin/dashboard/stats`
|
||
|
||
**Description:** دریافت آمار کلی سیستم شامل سفارشات، درآمد، کاربران و محصولات
|
||
|
||
**Response:**
|
||
|
||
```json
|
||
{
|
||
"orders": {
|
||
"total": 1250,
|
||
"pending": 45,
|
||
"completed": 1100,
|
||
"cancelled": 105,
|
||
"today_count": 23,
|
||
"today_amount": 45000000
|
||
},
|
||
"revenue": {
|
||
"total": 2500000000,
|
||
"today": 45000000,
|
||
"this_month": 350000000,
|
||
"last_month": 320000000,
|
||
"growth_percentage": 9.4
|
||
},
|
||
"users": {
|
||
"total": 8500,
|
||
"active": 7200,
|
||
"new_today": 15,
|
||
"new_this_month": 450
|
||
},
|
||
"products": {
|
||
"total": 1250,
|
||
"active": 1100,
|
||
"low_stock": 25,
|
||
"out_of_stock": 8
|
||
}
|
||
}
|
||
```
|
||
|
||
---
|
||
|
||
## 2. API فروش ماهانه (Monthly Sales Chart)
|
||
|
||
**Endpoint:** `GET /api/v1/admin/dashboard/monthly-sales`
|
||
|
||
**Description:** دریافت آمار فروش به صورت ماهانه برای نمایش در چارت
|
||
|
||
**Query Parameters:**
|
||
|
||
- `months` (optional, default: 6) - تعداد ماههای گذشته که باید برگردانده شود
|
||
|
||
**Response:**
|
||
|
||
```json
|
||
{
|
||
"data": [
|
||
{
|
||
"month": "فروردین",
|
||
"month_number": 1,
|
||
"year": 1403,
|
||
"total_amount": 350000000,
|
||
"order_count": 450
|
||
},
|
||
{
|
||
"month": "اردیبهشت",
|
||
"month_number": 2,
|
||
"year": 1403,
|
||
"total_amount": 420000000,
|
||
"order_count": 520
|
||
}
|
||
// ... برای تعداد ماههای درخواستی
|
||
]
|
||
}
|
||
```
|
||
|
||
**Note:** دادهها باید به ترتیب زمانی (از قدیمیترین به جدیدترین) مرتب باشند.
|
||
|
||
---
|
||
|
||
## 3. API روند رشد (Growth Trend)
|
||
|
||
**Endpoint:** `GET /api/v1/admin/dashboard/growth-trend`
|
||
|
||
**Description:** دریافت روند رشد سیستم در بازههای زمانی مختلف
|
||
|
||
**Query Parameters:**
|
||
|
||
- `period` (optional, default: "monthly") - نوع بازه زمانی: `"daily"`, `"weekly"`, `"monthly"`
|
||
- `days` (optional, default: 30) - تعداد روزها برای `period=daily`
|
||
- `weeks` (optional, default: 12) - تعداد هفتهها برای `period=weekly`
|
||
- `months` (optional, default: 12) - تعداد ماهها برای `period=monthly`
|
||
|
||
**Response:**
|
||
|
||
```json
|
||
{
|
||
"period": "monthly",
|
||
"data": [
|
||
{
|
||
"date": "1403/01",
|
||
"revenue": 350000000,
|
||
"orders": 450,
|
||
"users": 120
|
||
},
|
||
{
|
||
"date": "1403/02",
|
||
"revenue": 420000000,
|
||
"orders": 520,
|
||
"users": 135
|
||
}
|
||
// ...
|
||
],
|
||
"growth_rate": 9.4
|
||
}
|
||
```
|
||
|
||
---
|
||
|
||
## 4. API کاربران اخیر (Recent Users)
|
||
|
||
**Endpoint:** `GET /api/v1/admin/dashboard/recent-users`
|
||
|
||
**Description:** دریافت لیست کاربران جدید که اخیراً ثبتنام کردهاند
|
||
|
||
**Query Parameters:**
|
||
|
||
- `limit` (optional, default: 10) - تعداد کاربران
|
||
|
||
**Response:**
|
||
|
||
```json
|
||
{
|
||
"users": [
|
||
{
|
||
"id": 1,
|
||
"first_name": "علی",
|
||
"last_name": "احمدی",
|
||
"username": "ali_ahmadi",
|
||
"email": "ali@example.com",
|
||
"phone": "09123456789",
|
||
"status": "active",
|
||
"created_at": "2024-01-15T10:30:00Z"
|
||
},
|
||
{
|
||
"id": 2,
|
||
"first_name": "فاطمه",
|
||
"last_name": "حسینی",
|
||
"username": "fateme_hosseini",
|
||
"email": "fateme@example.com",
|
||
"phone": "09123456790",
|
||
"status": "active",
|
||
"created_at": "2024-01-14T15:20:00Z"
|
||
}
|
||
// ...
|
||
],
|
||
"total": 10
|
||
}
|
||
```
|
||
|
||
**Note:** کاربران باید به ترتیب تاریخ ثبتنام (جدیدترین اول) مرتب باشند.
|
||
|
||
---
|
||
|
||
## 5. API توزیع دستگاههای کاربری (Device Distribution)
|
||
|
||
**Endpoint:** `GET /api/v1/admin/dashboard/device-distribution`
|
||
|
||
**Description:** دریافت آمار توزیع دستگاههای کاربری (دسکتاپ، موبایل، تبلت)
|
||
|
||
**Response:**
|
||
|
||
```json
|
||
{
|
||
"data": [
|
||
{
|
||
"device_type": "desktop",
|
||
"label": "دسکتاپ",
|
||
"count": 4500,
|
||
"percentage": 45.5
|
||
},
|
||
{
|
||
"device_type": "mobile",
|
||
"label": "موبایل",
|
||
"count": 3500,
|
||
"percentage": 35.2
|
||
},
|
||
{
|
||
"device_type": "tablet",
|
||
"label": "تبلت",
|
||
"count": 2000,
|
||
"percentage": 19.3
|
||
}
|
||
],
|
||
"total": 10000
|
||
}
|
||
```
|
||
|
||
**Note:** درصدها باید به صورت عدد صحیح (بدون اعشار) برگردانده شوند.
|
||
|
||
---
|
||
|
||
## 6. API سفارشهای اخیر (Recent Orders)
|
||
|
||
**Endpoint:** `GET /api/v1/admin/dashboard/recent-orders`
|
||
|
||
**Description:** دریافت لیست آخرین سفارشهای ثبت شده
|
||
|
||
**Query Parameters:**
|
||
|
||
- `limit` (optional, default: 10) - تعداد سفارشها
|
||
|
||
**Response:**
|
||
|
||
```json
|
||
{
|
||
"orders": [
|
||
{
|
||
"id": 1234,
|
||
"order_number": "ORD-2024-001234",
|
||
"customer_name": "علی احمدی",
|
||
"customer_id": 45,
|
||
"total_amount": 2500000,
|
||
"status": "pending",
|
||
"payment_status": "paid",
|
||
"created_at": "2024-01-15T14:30:00Z"
|
||
},
|
||
{
|
||
"id": 1233,
|
||
"order_number": "ORD-2024-001233",
|
||
"customer_name": "فاطمه حسینی",
|
||
"customer_id": 46,
|
||
"total_amount": 1800000,
|
||
"status": "completed",
|
||
"payment_status": "paid",
|
||
"created_at": "2024-01-15T13:20:00Z"
|
||
}
|
||
// ...
|
||
],
|
||
"total": 10
|
||
}
|
||
```
|
||
|
||
**Note:** سفارشها باید به ترتیب تاریخ ایجاد (جدیدترین اول) مرتب باشند.
|
||
|
||
---
|
||
|
||
## 7. API محصولات پرفروش (Top Selling Products)
|
||
|
||
**Endpoint:** `GET /api/v1/admin/dashboard/top-products`
|
||
|
||
**Description:** دریافت لیست محصولات پرفروش
|
||
|
||
**Query Parameters:**
|
||
|
||
- `limit` (optional, default: 5) - تعداد محصولات
|
||
- `period` (optional, default: "month") - بازه زمانی: `"day"`, `"week"`, `"month"`
|
||
|
||
**Response:**
|
||
|
||
```json
|
||
{
|
||
"products": [
|
||
{
|
||
"id": 45,
|
||
"name": "محصول نمونه",
|
||
"sku": "PRD-001",
|
||
"sold_count": 250,
|
||
"revenue": 125000000,
|
||
"image_url": "https://example.com/images/product-45.jpg"
|
||
},
|
||
{
|
||
"id": 78,
|
||
"name": "محصول دیگر",
|
||
"sku": "PRD-002",
|
||
"sold_count": 180,
|
||
"revenue": 90000000,
|
||
"image_url": "https://example.com/images/product-78.jpg"
|
||
}
|
||
// ...
|
||
]
|
||
}
|
||
```
|
||
|
||
**Note:** محصولات باید به ترتیب تعداد فروش (بیشترین اول) مرتب باشند.
|
||
|
||
---
|
||
|
||
## 8. API آمار مقایسهای (Comparison Stats)
|
||
|
||
**Endpoint:** `GET /api/v1/admin/dashboard/comparison`
|
||
|
||
**Description:** دریافت آمار مقایسهای بین دوره فعلی و دوره قبلی
|
||
|
||
**Query Parameters:**
|
||
|
||
- `compare_with` (optional, default: "last_period") - نوع مقایسه: `"last_period"`, `"last_year"`
|
||
- `period` (optional, default: "month") - نوع دوره: `"day"`, `"week"`, `"month"`
|
||
|
||
**Response:**
|
||
|
||
```json
|
||
{
|
||
"current": {
|
||
"revenue": 350000000,
|
||
"orders": 450,
|
||
"users": 120
|
||
},
|
||
"previous": {
|
||
"revenue": 320000000,
|
||
"orders": 410,
|
||
"users": 105
|
||
},
|
||
"changes": {
|
||
"revenue": {
|
||
"amount": 30000000,
|
||
"percentage": 9.4,
|
||
"trend": "up"
|
||
},
|
||
"orders": {
|
||
"amount": 40,
|
||
"percentage": 9.8,
|
||
"trend": "up"
|
||
},
|
||
"users": {
|
||
"amount": 15,
|
||
"percentage": 14.3,
|
||
"trend": "up"
|
||
}
|
||
}
|
||
}
|
||
```
|
||
|
||
**Note:**
|
||
|
||
- `trend` میتواند `"up"`, `"down"` یا `"stable"` باشد
|
||
- درصدها میتوانند اعشار داشته باشند
|
||
|
||
---
|
||
|
||
## نکات مهم و الزامات:
|
||
|
||
1. **احراز هویت:** همه APIها باید نیاز به احراز هویت داشته باشند (Bearer Token)
|
||
|
||
2. **فیلتر تاریخ:** در صورت امکان، همه APIها باید قابلیت فیلتر بر اساس بازه زمانی را داشته باشند:
|
||
|
||
- `from_date` (optional) - تاریخ شروع
|
||
- `to_date` (optional) - تاریخ پایان
|
||
|
||
3. **فرمت تاریخ:**
|
||
|
||
- تاریخها در Response باید به فرمت ISO 8601 برگردانده شوند: `"2024-01-15T14:30:00Z"`
|
||
- تاریخهای ورودی میتوانند به فرمت ISO 8601 یا timestamp باشند
|
||
|
||
4. **فرمت مبالغ:**
|
||
|
||
- همه مبالغ به تومان هستند
|
||
- مبالغ باید به صورت عدد (integer) برگردانده شوند
|
||
|
||
5. **ترتیب دادهها:**
|
||
|
||
- دادههای زمانی باید به ترتیب زمانی (از قدیمیترین به جدیدترین) مرتب باشند
|
||
- دادههای مرتبسازی شده (مثل پرفروشترین) باید به ترتیب مناسب مرتب باشند
|
||
|
||
6. **مقدار پیشفرض:**
|
||
|
||
- در صورت نبود داده، آرایه خالی `[]` یا `null` برگردانده شود
|
||
- مقادیر عددی در صورت نبود داده باید `0` باشند
|
||
|
||
7. **خطاها:**
|
||
|
||
- در صورت خطا، کد HTTP مناسب برگردانده شود
|
||
- پیام خطا به فارسی و واضح باشد
|
||
|
||
8. **Performance:**
|
||
- برای بهینهسازی، میتوان از کش استفاده کرد
|
||
- Queryها باید بهینه باشند تا زمان پاسخگویی کم باشد
|
||
|
||
---
|
||
|
||
## اولویت پیادهسازی:
|
||
|
||
1. **اولویت بالا:**
|
||
|
||
- API آمار کلی داشبورد (#1)
|
||
- API فروش ماهانه (#2)
|
||
- API کاربران اخیر (#4)
|
||
- API سفارشهای اخیر (#6)
|
||
|
||
2. **اولویت متوسط:**
|
||
|
||
- API روند رشد (#3)
|
||
- API محصولات پرفروش (#7)
|
||
- API آمار مقایسهای (#8)
|
||
|
||
3. **اولویت پایین:**
|
||
- API توزیع دستگاههای کاربری (#5) - در صورت وجود داده
|
||
|
||
---
|
||
|
||
## مثال استفاده:
|
||
|
||
```bash
|
||
# دریافت آمار کلی
|
||
curl -X GET "https://api.example.com/api/v1/admin/dashboard/stats" \
|
||
-H "Authorization: Bearer YOUR_TOKEN"
|
||
|
||
# دریافت فروش 6 ماه گذشته
|
||
curl -X GET "https://api.example.com/api/v1/admin/dashboard/monthly-sales?months=6" \
|
||
-H "Authorization: Bearer YOUR_TOKEN"
|
||
|
||
# دریافت کاربران اخیر
|
||
curl -X GET "https://api.example.com/api/v1/admin/dashboard/recent-users?limit=10" \
|
||
-H "Authorization: Bearer YOUR_TOKEN"
|
||
```
|
||
|
||
---
|
||
|
||
**ممنون میشوم اگر این APIها را در اسرع وقت پیادهسازی کنید تا بتوانیم داشبورد را کامل کنیم.** 🙏
|
||
|
||
**در صورت نیاز به توضیحات بیشتر یا تغییرات، لطفاً اطلاع دهید.**
|