admin/dashboard-api-requirements.md

430 lines
11 KiB
Markdown
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# درخواست 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ها را در اسرع وقت پیاده‌سازی کنید تا بتوانیم داشبورد را کامل کنیم.** 🙏
**در صورت نیاز به توضیحات بیشتر یا تغییرات، لطفاً اطلاع دهید.**