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

5.9 KiB

خلاصه تغییرات سیستم هشدار شرطی

📋 خلاصه کلی

سیستم هشدار قدیمی که بر اساس حداقل و حداکثر ثابت برای هر سنسور کار می‌کرد، به یک سیستم شرطی پیشرفته تبدیل شد که امکان تعریف شرایط پیچیده و انعطاف‌پذیر را فراهم می‌کند.

🎯 ویژگی‌های جدید

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        - فعال/غیرفعال کردن شرط

⚙️ نحوه استفاده

مثال ایجاد شرط:

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