Files
GreenHomeBack/src/CHANGES_SUMMARY.md
2025-12-16 16:52:40 +03:30

7.1 KiB
Raw Blame History

📝 خلاصه تغییرات - سیستم ذخیره و ردیابی سوالات 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 به صورت خودکار اعمال می‌شود:

cd GreenHome.Api
dotnet run

گزینه 2: دستی

cd GreenHome.Infrastructure
dotnet ef database update --startup-project ../GreenHome.Api

📖 مثال استفاده

قبل از تغییرات:

POST /api/ai/ask
{
  "question": "دمای مناسب چند است?"
}

بعد از تغییرات:

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. ✅ گزارش‌گیری - امکان تولید گزارش‌های مختلف

🔍 دریافت اطلاعات

تاریخچه یک دستگاه:

GET /api/ai/history/device/123?take=50

آمار کلی:

GET /api/ai/stats

در کد C#:

// تاریخچه دستگاه
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 های قبلی همچنان کار می‌کنند
  • فقط قابلیت‌های جدید اضافه شده‌اند

🧪 تست

تست ذخیره سوال:

curl -X POST http://localhost:5000/api/ai/ask \
  -H "Content-Type: application/json" \
  -d '{
    "question": "تست ذخیره سوال",
    "deviceId": 1
  }'

تست دریافت تاریخچه:

curl http://localhost:5000/api/ai/history/device/1

تست آمار:

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 را مطالعه کنید.