/// <summary>
        /// Adds the or update device.
        /// </summary>
        /// <param name="request">The request.</param>
        /// <returns></returns>
        public async Task <DeviceViewModel> AddOrUpdateDevice(AddOrUpdateDeviceRequest request)
        {
            var device = await _unitOfWork.GetRepository <Device>().FindAsync(x => x.Id == request.Id);

            var applications = await _unitOfWork.GetRepository <Application>().GetAll().Where(x => request.ApplicationIds.Contains(x.Id)).ToListAsync();

            if (device == null)
            {
                var newDevice = _mapper.Map <Device>(request);

                foreach (var item in applications)
                {
                    newDevice.Applications.Add(item);
                }

                _unitOfWork.GetRepository <Device>().Add(newDevice);
                device = newDevice;
            }
            else
            {
                var deviceConfigs = _unitOfWork.GetRepository <DeviceConfig>().GetAll().Where(x => x.DeviceId == device.Id);

                foreach (var item in deviceConfigs)
                {
                    item.DeviceName = request.Name;
                    item.AreaCode   = request.AreaCode;
                    _unitOfWork.GetRepository <DeviceConfig>().Update(item);
                }

                if (device.Applications.Count > 0)
                {
                    foreach (var item in device.Applications.ToList())
                    {
                        device.Applications.Remove(item);
                    }
                }

                foreach (var item in applications)
                {
                    device.Applications.Add(item);
                }
                device.Ip          = request.Ip;
                device.Type        = request.Type;
                device.AreaCode    = request.AreaCode;
                device.IsActive    = request.IsActive;
                device.Code        = request.Code;
                device.Name        = request.Name;
                device.UpdatedDate = DateTime.Now;
                _unitOfWork.GetRepository <Device>().Update(device);
            }
            await _unitOfWork.CommitAsync();

            return(_mapper.Map <DeviceViewModel>(device));
        }
Beispiel #2
0
        public async Task <IActionResult> Add(AddOrUpdateDeviceRequest request)
        {
            var response = await _deviceService.AddOrUpdateDevice(request);

            return(Ok(new ApiOkResponse(response)));
        }