Esempio n. 1
0
        public bool AddDevice(string userId, DeviceAddDomainModel model)
        {
            var cancellationTokenSource = new CancellationTokenSource();

            cancellationTokenSource.CancelAfter(TimeSpan.FromSeconds(5));

            DeviceExistenceResponseMessage deviceIsExist;

            try
            {
                var message = new DeviceVerificationMessage {
                    serial_number = model.serial_number, CheckType = "EXISTENCE_IN_NEW"
                };

                deviceIsExist = this._serviceBusSender.SendCallbackMessage <DeviceExistenceResponseMessage, DeviceVerificationMessage>(message, cancellationTokenSource.Token);
            }
            catch (OperationCanceledException)
            {
                _logger.LogError($"Failed to add a new device. DETAILS: Not received response about the existence of a registered device\n\t" +
                                 $"UserId: {userId}, deviceType: {model.type}, serial number: {model.serial_number}, device name: {model.name}");
                throw new ResourceException(-203, 404);
            }

            if (!deviceIsExist.is_exist)
            {
                _logger.LogError($"Failed to add a new device. DETAILS: Not Found in mongo db\n\t" +
                                 $"UserId: {userId}, deviceType: {model.type}, serial number: {model.serial_number}, device name: {model.name}");
                throw new ResourceException(-201, 404);
            }

            var unitOfWork = _unitOfWorkManager.GetUnitOfWork();

            var deviceRepository = unitOfWork.Repository <IGenericRepository <Device>, Device>();
            var deviceParameterBindingsRepository = unitOfWork.Repository <IGenericRepository <DeviceParameterBinding>, DeviceParameterBinding>();
            var deviceTypesRepository             = unitOfWork.Repository <IGenericRepository <DeviceType>, DeviceType>();

            var type = deviceTypesRepository.GetbyFilter(x => x.description.ToLower() == deviceIsExist.device_info.type_text.ToLower(), 0, 0).FirstOrDefault();

            if (type == null)
            {
                _logger.LogError($"Failed to add a new device. DETAILS: Unknown device type\n\t" +
                                 $"UserId: {userId}, deviceType: {model.type}, serial number: {model.serial_number}, device name: {model.name}");
                throw new ResourceException(-204, 400);
            }
            if (type.device_type_id != model.type)
            {
                throw new ResourceException(-205, 400); // the type of device being added does not match the real device
            }

            Device device = new Device
            {
                serial_number  = model.serial_number,
                name           = model.name,
                device_type_id = model.type,
                user_id        = userId,
                is_online      = deviceIsExist.device_info.is_online,
                is_enable      = false,
                mqtt_client_id = deviceIsExist.device_info.mqtt_client_id
            };

            deviceRepository.Insert(device);

            var parameters = deviceParameterBindingsRepository.GetbyFilter(x => x.device_type_id == model.type, 0, 0).Select(x => x.Parameter);

            List <DeviceParameterValue> parameterValues = new List <DeviceParameterValue>();

            foreach (var parameter in parameters)
            {
                parameterValues.Add(new DeviceParameterValue
                {
                    date_on      = DateTime.UtcNow,
                    device_id    = device.device_id,
                    parameter_id = parameter.parameter_id,
                    value        = deviceIsExist.parameters.TryGetValue(parameter.description, out dynamic val) ? val : parameter.default_value
                });
Esempio n. 2
0
 public bool AddDevice(DeviceAddDomainModel model)
 {
     return(AddDevice(GetCurrentUserId(), model));
 }