public async Task <IActionResult> Create([FromBody] RawTrigger raw) { Trigger trigger; var invalidInput = new Response <string>(); trigger = null; if (raw == null) { return(this.UnprocessableEntity(invalidInput)); } var type = raw.Type; if (string.IsNullOrEmpty(raw.SensorId) || !ObjectId.TryParse(raw.SensorId, out _)) { invalidInput.AddError("Invalid value in the 'sensorId' field."); return(this.UnprocessableEntity(invalidInput)); } var auth = await this.AuthenticateUserForSensor(raw.SensorId).ConfigureAwait(false); if (!auth) { return(this.CreateNotAuthorizedResult()); } if (type == TriggerType.EdgeTrigger) { trigger = CreateNumberTrigger(raw); } else if (type == TriggerType.Regex) { trigger = CreateNaturalLanguageTrigger(raw, invalidInput); } if (trigger == null) { return(this.UnprocessableEntity(invalidInput)); } trigger.Type = type; await this.m_triggers.CreateAsync(trigger).ConfigureAwait(false); await this.m_mqtt.PublishCommandAsync(CommandType.AddSensor, raw.SensorId).ConfigureAwait(false); return(this.CreatedAtAction(nameof(this.GetById), new { triggerId = trigger.ID }, new Response <Trigger>(trigger))); }
private static Trigger CreateNaturalLanguageTrigger(RawTrigger raw, Response <string> errorResponse) { if (string.IsNullOrEmpty(raw.FormalLanguage)) { errorResponse.AddError("Missing a formal language definition!"); return(null); } var trigger = new Trigger { FormalLanguage = raw.FormalLanguage, SensorID = raw.SensorId, KeyValue = nameof(Message.Data) }; return(trigger); }
private static Trigger CreateNumberTrigger(RawTrigger raw) { if ((raw.LowerEdge != null || raw.UpperEdge != null) && raw.KeyValue == null) { return(null); } if (string.IsNullOrEmpty(raw.KeyValue)) { return(null); } var trigger = new Trigger { KeyValue = raw.KeyValue, UpperEdge = raw.UpperEdge, LowerEdge = raw.LowerEdge, SensorID = raw.SensorId, }; return(trigger); }