using MyCore.Interfaces.DTO; using MyCore.Interfaces.Models; using MyCore.Services.MyControlPanel; using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; namespace MyCore.Service { public class RoomService { public static RoomDetailDTO CreateOrUpdate(RoomDatabaseService _RoomDatabaseService, DeviceDatabaseService _DeviceDatabaseService, string userId, RoomCreateOrUpdateDetailDTO roomCreateOrUpdateDetailDTO, bool create) { List devices = new List(); Room room; if (create) { room = new Room(); room.CreatedDate = DateTime.Now; } else { room = _RoomDatabaseService.GetById(roomCreateOrUpdateDetailDTO.Id); } room.UserId = userId; room.Name = roomCreateOrUpdateDetailDTO.Name; room.UpdatedDate = DateTime.Now; List currentDevices = _DeviceDatabaseService.GetByIds(roomCreateOrUpdateDetailDTO.DeviceIds); // A device cannot have multiple rooms. Filter list currentDevices = currentDevices.Where(c => c.LocationId == null).ToList(); // TODO add exception or something if (create) { room.DevicesIds = currentDevices.Select(c => c.Id).ToList(); room = _RoomDatabaseService.Create(room); } else { room.DevicesIds.AddRange(currentDevices.Select(c => c.Id).ToList()); room = _RoomDatabaseService.Update(room); } foreach (var deviceId in roomCreateOrUpdateDetailDTO.DeviceIds) { Device device = _DeviceDatabaseService.GetById(deviceId); devices.Add(device); device.LocationId = room.Id; _DeviceDatabaseService.Update(device); } return room.ToDTO(devices.Select(d => d.ToDTO()).ToList()); } } }