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

View File

@@ -0,0 +1,142 @@
# خلاصه تغییرات سیستم هشدار شرطی
## 📋 خلاصه کلی
سیستم هشدار قدیمی که بر اساس حداقل و حداکثر ثابت برای هر سنسور کار می‌کرد، به یک سیستم **شرطی پیشرفته** تبدیل شد که امکان تعریف شرایط پیچیده و انعطاف‌پذیر را فراهم می‌کند.
## 🎯 ویژگی‌های جدید
### 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` را مطالعه کنید.