From d21251039290d4da673a70e5dcf12a7a7213ecf0 Mon Sep 17 00:00:00 2001 From: Fransolet Thomas Date: Thu, 23 Mar 2023 18:24:52 +0100 Subject: [PATCH] Add actions to alarm detail + add device detail to automation detail --- .../DTO/MyControlPanel/AlarmModeDTO.cs | 1 + .../DTO/MyControlPanel/AutomationDTO.cs | 1 + .../Models/MyControlPanel/Database/AlarmMode.cs | 1 + .../Models/MyControlPanel/Database/Automation.cs | 5 +++-- MyCore/Controllers/AutomationController.cs | 16 ++++++++++++++-- MyCore/Services/AlarmService.cs | 10 +++++++--- 6 files changed, 27 insertions(+), 7 deletions(-) diff --git a/MyCore.Interfaces/DTO/MyControlPanel/AlarmModeDTO.cs b/MyCore.Interfaces/DTO/MyControlPanel/AlarmModeDTO.cs index 0ecc1cd..1fb5402 100644 --- a/MyCore.Interfaces/DTO/MyControlPanel/AlarmModeDTO.cs +++ b/MyCore.Interfaces/DTO/MyControlPanel/AlarmModeDTO.cs @@ -26,6 +26,7 @@ namespace MyCore.Interfaces.DTO public class AlarmModeDetailDTO : AlarmModeDTO { public List Triggers { get; set; } + public List Actions { get; set; } public List Devices { get; set; } public ProgrammedMode ProgrammedMode { get; set; } public GeolocalizedMode GeolocalizedMode { get; set; } diff --git a/MyCore.Interfaces/DTO/MyControlPanel/AutomationDTO.cs b/MyCore.Interfaces/DTO/MyControlPanel/AutomationDTO.cs index a8e93f6..f25cad9 100644 --- a/MyCore.Interfaces/DTO/MyControlPanel/AutomationDTO.cs +++ b/MyCore.Interfaces/DTO/MyControlPanel/AutomationDTO.cs @@ -22,5 +22,6 @@ namespace MyCore.Interfaces.DTO public List Conditions { get; set; } public List Actions { get; set; } public List DevicesIds { get; set; } + public List Devices { get; set; } } } diff --git a/MyCore.Interfaces/Models/MyControlPanel/Database/AlarmMode.cs b/MyCore.Interfaces/Models/MyControlPanel/Database/AlarmMode.cs index e3017cf..a4a265c 100644 --- a/MyCore.Interfaces/Models/MyControlPanel/Database/AlarmMode.cs +++ b/MyCore.Interfaces/Models/MyControlPanel/Database/AlarmMode.cs @@ -100,6 +100,7 @@ namespace MyCore.Interfaces.Models CreatedDate = CreatedDate, UpdatedDate = UpdatedDate, Triggers = Triggers, + Actions = Actions, Devices = devicesDetail, ProgrammedMode = ProgrammedMode, GeolocalizedMode = GeolocalizedMode diff --git a/MyCore.Interfaces/Models/MyControlPanel/Database/Automation.cs b/MyCore.Interfaces/Models/MyControlPanel/Database/Automation.cs index 89a93d9..c41c939 100644 --- a/MyCore.Interfaces/Models/MyControlPanel/Database/Automation.cs +++ b/MyCore.Interfaces/Models/MyControlPanel/Database/Automation.cs @@ -58,7 +58,7 @@ namespace MyCore.Interfaces.Models }; } - public AutomationDetailDTO ToDetailDTO() + public AutomationDetailDTO ToDetailDTO(List devicesDetail) { return new AutomationDetailDTO() { @@ -71,7 +71,8 @@ namespace MyCore.Interfaces.Models Triggers = Triggers, Conditions = Conditions, Actions = Actions, - DevicesIds = DevicesIds + DevicesIds = DevicesIds, + Devices = devicesDetail }; } } diff --git a/MyCore/Controllers/AutomationController.cs b/MyCore/Controllers/AutomationController.cs index aa622af..4e60daa 100644 --- a/MyCore/Controllers/AutomationController.cs +++ b/MyCore/Controllers/AutomationController.cs @@ -24,13 +24,15 @@ namespace MyCore.Service.Controllers public class AutomationController : ControllerBase { private HomeDatabaseService _HomeDatabaseService; + private DeviceDatabaseService _DeviceDatabaseService; private AutomationDatabaseService _AutomationDatabaseService; private readonly IMqttClientService _mqttClientService; //private readonly IMqttOnlineClientService _mqttOnlineClientService; - public AutomationController(HomeDatabaseService homeDatabaseService, AutomationDatabaseService automationDatabaseService, MqttClientServiceProvider provider)//, MqttClientOnlineServiceProvider onlineProvider) + public AutomationController(HomeDatabaseService homeDatabaseService, DeviceDatabaseService deviceDatabaseService, AutomationDatabaseService automationDatabaseService, MqttClientServiceProvider provider)//, MqttClientOnlineServiceProvider onlineProvider) { this._HomeDatabaseService = homeDatabaseService; + this._DeviceDatabaseService = deviceDatabaseService; this._AutomationDatabaseService = automationDatabaseService; this._mqttClientService = provider.MqttClientService; //this._mqttOnlineClientService = onlineProvider.MqttOnlineClientService; @@ -80,7 +82,17 @@ namespace MyCore.Service.Controllers if (automation == null) throw new KeyNotFoundException("Automation not found"); - return new OkObjectResult(automation.ToDetailDTO()); + List devices = new List(); + foreach (var deviceId in automation.DevicesIds) + { + Device device = _DeviceDatabaseService.GetById(deviceId); + if (device != null) + { + devices.Add(device); + } + } + + return new OkObjectResult(automation.ToDetailDTO(devices.Select(d => d.ToDTO()).ToList())); } catch (ArgumentNullException ex) { diff --git a/MyCore/Services/AlarmService.cs b/MyCore/Services/AlarmService.cs index 2d7b283..a3b2082 100644 --- a/MyCore/Services/AlarmService.cs +++ b/MyCore/Services/AlarmService.cs @@ -54,8 +54,12 @@ namespace MyCore.Service.Services break; } - List devicesIds = alarmModeCreateOrUpdateDetailDTO.Triggers.Select(t => t.DeviceId).ToList(); - alarmMode.DevicesIds = devicesIds; + List devicesIdsTriggers = alarmModeCreateOrUpdateDetailDTO.Triggers.Select(t => t.DeviceId).ToList(); + alarmMode.DevicesIds = devicesIdsTriggers; + + List devicesIdsActions = alarmModeCreateOrUpdateDetailDTO.Actions.Select(t => t.DeviceId).ToList(); + alarmMode.DevicesIds.AddRange(devicesIdsActions); + if (create) alarmMode = _AlarmDatabaseService.Create(alarmMode); else @@ -63,7 +67,7 @@ namespace MyCore.Service.Services // List devices for DTO (only) List devices = new List(); - foreach (var deviceId in devicesIds) + foreach (var deviceId in alarmMode.DevicesIds) { Device device = _DeviceDatabaseService.GetById(deviceId); if (device != null)