# خلاصه تغییرات سیستم هشدار شرطی ## 📋 خلاصه کلی سیستم هشدار قدیمی که بر اساس حداقل و حداکثر ثابت برای هر سنسور کار می‌کرد، به یک سیستم **شرطی پیشرفته** تبدیل شد که امکان تعریف شرایط پیچیده و انعطاف‌پذیر را فراهم می‌کند. ## 🎯 ویژگی‌های جدید ### 1. سیستم شرط‌گذاری پیشرفته - تعریف نامحدود شرط برای هر دستگاه - ترکیب چندین قانون با منطق AND - انتخاب نوع اعلان (تماس یا پیامک) برای هر شرط - تنظیم زمان اعمال شرط (روز، شب، همیشه) ### 2. مدیریت زمان هوشمند - محاسبه خودکار طلوع و غروب خورشید بر اساس موقعیت جغرافیایی - فیلتر کردن هشدارها بر اساس روز/شب بودن - اضافه شدن فیلدهای استان، شهر، Latitude، Longitude به تنظیمات دستگاه ### 3. کنترل Cooldown جداگانه - تنظیم فاصله زمانی مجزا برای تماس (پیش‌فرض 60 دقیقه) - تنظیم فاصله زمانی مجزا برای پیامک (پیش‌فرض 15 دقیقه) - قابل تنظیم برای هر شرط به صورت جداگانه ### 4. انواع مقایسه - بیشتر از (GreaterThan) - کمتر از (LessThan) - بین دو عدد (Between) - خارج از محدوده (OutOfRange) ## 🗂️ فایل‌های ایجاد شده ### Domain Layer - `GreenHome.Domain/AlertCondition.cs` - مدل شرط هشدار - `GreenHome.Domain/AlertCondition.cs` (enums) - SensorType, ComparisonType, AlertNotificationType, AlertTimeType ### Application Layer - `GreenHome.Application/IAlertConditionService.cs` - Interface سرویس مدیریت شرایط - `GreenHome.Application/ISunCalculatorService.cs` - Interface محاسبه طلوع/غروب - تغییرات در `GreenHome.Application/Dtos.cs` - DTOs جدید ### Infrastructure Layer - `GreenHome.Infrastructure/AlertConditionService.cs` - سرویس مدیریت شرایط - `GreenHome.Infrastructure/SunCalculatorService.cs` - سرویس محاسبه خورشید - تغییرات در `GreenHome.Infrastructure/AlertService.cs` - بازنویسی کامل - Migration جدید: `UpdateAlertSystemWithConditions` ### API Layer - `GreenHome.Api/Controllers/AlertConditionsController.cs` - Controller جدید ## 🔄 فایل‌های تغییر یافته 1. **GreenHome.Domain/DeviceSettings.cs** - حذف فیلدهای Min/Max سنسورها - اضافه فیلدهای Province, City, Latitude, Longitude 2. **GreenHome.Domain/AlertNotification.cs** - تغییر از AlertType به AlertConditionId - اضافه NotificationType 3. **GreenHome.Infrastructure/GreenHomeDbContext.cs** - پیکربندی جداول جدید - تغییر پیکربندی DeviceSettings و AlertNotifications 4. **GreenHome.Application/MappingProfile.cs** - اضافه Mapping های جدید برای AlertCondition و AlertRule 5. **GreenHome.Api/Program.cs** - ثبت IAlertConditionService - ثبت ISunCalculatorService 6. **GreenHome.Infrastructure/GreenHome.Infrastructure.csproj** - اضافه reference به GreenHome.VoiceCall.Avanak ## 📊 تغییرات Database ### جداول جدید: - **AlertConditions**: شرایط هشدار - **AlertRules**: قوانین مربوط به هر شرط ### جداول تغییر یافته: - **DeviceSettings**: - حذف: DangerMaxTemperature, DangerMinTemperature, MaxTemperature, MinTemperature, MaxGasPPM, MinGasPPM, MaxLux, MinLux, MaxHumidityPercent, MinHumidityPercent - اضافه: Province, City, Latitude, Longitude - **AlertNotifications**: - حذف: AlertType - اضافه: AlertConditionId, NotificationType ## 🔌 API Endpoints جدید ``` GET /api/AlertConditions/device/{deviceId} - لیست شرایط یک دستگاه GET /api/AlertConditions/{id} - دریافت یک شرط POST /api/AlertConditions - ایجاد شرط جدید PUT /api/AlertConditions - به‌روزرسانی شرط DELETE /api/AlertConditions/{id} - حذف شرط PATCH /api/AlertConditions/{id}/toggle - فعال/غیرفعال کردن شرط ``` ## ⚙️ نحوه استفاده ### مثال ایجاد شرط: ```json POST /api/AlertConditions { "deviceId": 1, "notificationType": 1, // SMS "timeType": 0, // Day only "smsCooldownMinutes": 15, "rules": [ { "sensorType": 0, // Temperature "comparisonType": 0, // GreaterThan "value1": 35.0, "order": 0 } ] } ``` این شرط می‌گوید: **اگر در روز، دما بیشتر از 35 درجه شد، هر 15 دقیقه یکبار پیامک بفرست.** ## ⚠️ نکات مهم 1. **Migration**: حتماً قبل از اجرای migration از database بک‌آپ بگیرید 2. **Data Loss**: فیلدهای قدیمی Min/Max حذف می‌شوند و قابل بازگشت نیستند 3. **Location**: برای استفاده از قابلیت Day/Night، باید Latitude و Longitude را در تنظیمات دستگاه وارد کنید 4. **Backward Compatibility**: سیستم قدیمی دیگر کار نمی‌کند و باید شرایط جدید تعریف شوند ## 📝 TODO برای آینده - [ ] پیاده‌سازی کامل تماس صوتی (در حال حاضر placeholder است) - [ ] اضافه کردن تست‌های واحد - [ ] اضافه کردن Validation برای DTOs - [ ] پیاده‌سازی Logging بهتر برای Debug - [ ] اضافه کردن Dashboard برای مشاهده تاریخچه هشدارها ## 📚 مستندات برای اطلاعات بیشتر، فایل `ALERT_SYSTEM_UPDATE.md` را مطالعه کنید.