version 2

This commit is contained in:
2025-12-16 16:52:40 +03:30
parent 61e86b1e96
commit 139924db94
52 changed files with 7350 additions and 321 deletions

246
src/CHANGES_SUMMARY.md Normal file
View File

@@ -0,0 +1,246 @@
# 📝 خلاصه تغییرات - سیستم ذخیره و ردیابی سوالات AI
## ✅ تغییرات اعمال شده
### 1. Entity جدید در Domain
**فایل:** `GreenHome.Domain/AIQuery.cs`
- ذخیره سوال و پاسخ
- ذخیره اطلاعات توکن (PromptTokens, CompletionTokens, TotalTokens)
- ارتباط با Device (DeviceId)
- ارتباط با User (UserId)
- ذخیره Model و Temperature
- ذخیره زمان پاسخ (ResponseTimeMs)
- تاریخ ایجاد (CreatedAt)
### 2. آپدیت DbContext
**فایل:** `GreenHome.Infrastructure/GreenHomeDbContext.cs`
- اضافه شدن `DbSet<AIQuery>`
- تنظیمات Entity Framework
- Foreign Keys به Device و User
- Index ها برای کوئری سریع
### 3. Interface و Service جدید
**فایل‌ها:**
- `GreenHome.Application/IAIQueryService.cs` - Interface
- `GreenHome.Infrastructure/AIQueryService.cs` - پیاده‌سازی
**قابلیت‌ها:**
- `SaveQueryAsync()` - ذخیره سوال
- `GetDeviceQueriesAsync()` - دریافت تاریخچه دستگاه
- `GetUserQueriesAsync()` - دریافت تاریخچه کاربر
- `GetDeviceTotalTokensAsync()` - مجموع توکن‌های دستگاه
- `GetUserTotalTokensAsync()` - مجموع توکن‌های کاربر
- `GetRecentQueriesAsync()` - آخرین سوالات
- `GetStatsAsync()` - آمار کلی
### 4. آپدیت AIController
**فایل:** `GreenHome.Api/Controllers/AIController.cs`
**تغییرات:**
- Inject کردن `IAIQueryService`
- اضافه شدن `DeviceId` و `UserId` به Request Models
- ذخیره خودکار تمام سوالات و پاسخ‌ها
- اندازه‌گیری زمان پاسخ
- برگرداندن اطلاعات توکن در Response
**Endpoints جدید:**
- `GET /api/ai/history/device/{deviceId}` - تاریخچه سوالات دستگاه
- `GET /api/ai/stats` - آمار کلی
**Endpoints به‌روز شده:**
- `POST /api/ai/ask` - حالا DeviceId و UserId می‌گیرد
- `POST /api/ai/chat` - حالا DeviceId و UserId می‌گیرد
- `POST /api/ai/suggest` - حالا DeviceId و UserId می‌گیرد
### 5. ثبت Service در DI
**فایل:** `GreenHome.Api/Program.cs`
- اضافه شدن `IAIQueryService` به Dependency Injection
### 6. Migration دیتابیس
**فایل:** `GreenHome.Infrastructure/Migrations/20251216113127_AddAIQueryTable.cs`
- ایجاد جدول `AIQueries`
- Foreign Keys
- Indexes
### 7. مستندات
**فایل‌ها:**
- `AI_QUERY_TRACKING.md` - راهنمای کامل استفاده
- `CHANGES_SUMMARY.md` - این فایل
## 📊 ساختار جدول AIQueries
```
AIQueries
├── Id (PK)
├── DeviceId (FK -> Devices) - اختیاری
├── UserId (FK -> Users) - اختیاری
├── Question (nvarchar(max))
├── Answer (nvarchar(max))
├── PromptTokens (int)
├── CompletionTokens (int)
├── TotalTokens (int)
├── Model (nvarchar(100))
├── Temperature (float) - اختیاری
├── ResponseTimeMs (bigint) - اختیاری
└── CreatedAt (datetime2)
Indexes:
- IX_AIQueries_DeviceId
- IX_AIQueries_UserId
- IX_AIQueries_CreatedAt
```
## 🔄 نحوه اعمال تغییرات
### گزینه 1: خودکار (پیشنهادی)
فقط برنامه را اجرا کنید، Migration به صورت خودکار اعمال می‌شود:
```bash
cd GreenHome.Api
dotnet run
```
### گزینه 2: دستی
```bash
cd GreenHome.Infrastructure
dotnet ef database update --startup-project ../GreenHome.Api
```
## 📖 مثال استفاده
### قبل از تغییرات:
```json
POST /api/ai/ask
{
"question": "دمای مناسب چند است?"
}
```
### بعد از تغییرات:
```json
POST /api/ai/ask
{
"question": "دمای مناسب چند است؟",
"deviceId": 123,
"userId": 456
}
// Response:
{
"question": "دمای مناسب چند است؟",
"answer": "بین 20 تا 24 درجه...",
"deviceId": 123,
"tokens": {
"prompt": 15,
"completion": 85,
"total": 100
},
"responseTimeMs": 1234,
"timestamp": "2025-12-16T12:00:00Z"
}
```
## 🎯 مزایای جدید
1. ✅ **ردیابی کامل** - تمام سوالات و پاسخ‌ها ذخیره می‌شوند
2. ✅ **مدیریت هزینه** - میزان دقیق مصرف توکن قابل محاسبه است
3. ✅ **تحلیل عملکرد** - زمان پاسخ‌دهی اندازه‌گیری می‌شود
4. ✅ **تاریخچه** - سوالات قبلی هر دستگاه قابل مشاهده است
5. ✅ **آمار** - آمار کلی و تفصیلی در دسترس است
6. ✅ **گزارش‌گیری** - امکان تولید گزارش‌های مختلف
## 🔍 دریافت اطلاعات
### تاریخچه یک دستگاه:
```bash
GET /api/ai/history/device/123?take=50
```
### آمار کلی:
```bash
GET /api/ai/stats
```
### در کد C#:
```csharp
// تاریخچه دستگاه
var queries = await aiQueryService.GetDeviceQueriesAsync(123);
// مجموع توکن‌ها
var totalTokens = await aiQueryService.GetDeviceTotalTokensAsync(123);
// آمار
var stats = await aiQueryService.GetStatsAsync();
```
## 📈 آمار قابل دسترسی
از endpoint `/api/ai/stats` می‌توانید این اطلاعات را دریافت کنید:
- تعداد کل سوالات
- مجموع توکن‌های استفاده شده
- توکن‌های Prompt
- توکن‌های Completion
- میانگین زمان پاسخ
- سوالات امروز
- توکن‌های امروز
## ⚡ تغییرات Breaking
هیچ! تمام تغییرات backward compatible هستند:
- `deviceId` و `userId` اختیاری هستند
- API های قبلی همچنان کار می‌کنند
- فقط قابلیت‌های جدید اضافه شده‌اند
## 🧪 تست
### تست ذخیره سوال:
```bash
curl -X POST http://localhost:5000/api/ai/ask \
-H "Content-Type: application/json" \
-d '{
"question": "تست ذخیره سوال",
"deviceId": 1
}'
```
### تست دریافت تاریخچه:
```bash
curl http://localhost:5000/api/ai/history/device/1
```
### تست آمار:
```bash
curl http://localhost:5000/api/ai/stats
```
## 📚 فایل‌های تغییر یافته
```
✅ Domain Layer:
- GreenHome.Domain/AIQuery.cs (جدید)
✅ Application Layer:
- GreenHome.Application/IAIQueryService.cs (جدید)
✅ Infrastructure Layer:
- GreenHome.Infrastructure/GreenHomeDbContext.cs (آپدیت)
- GreenHome.Infrastructure/AIQueryService.cs (جدید)
- GreenHome.Infrastructure/Migrations/20251216113127_AddAIQueryTable.cs (جدید)
✅ API Layer:
- GreenHome.Api/Controllers/AIController.cs (آپدیت)
- GreenHome.Api/Program.cs (آپدیت)
✅ Documentation:
- AI_QUERY_TRACKING.md (جدید)
- CHANGES_SUMMARY.md (جدید)
```
## 🎉 آماده استفاده!
تمام تغییرات اعمال شده و سیستم آماده است. فقط کافی است:
1. برنامه را اجرا کنید
2. از API استفاده کنید
3. سوالات به صورت خودکار ذخیره می‌شوند!
برای اطلاعات بیشتر، فایل `AI_QUERY_TRACKING.md` را مطالعه کنید.