# 📝 خلاصه تغییرات - سیستم ذخیره و ردیابی سوالات 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` - تنظیمات 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` را مطالعه کنید.