public async Task <IActionResult> Put([FromBody] CreateTelemetryCommand command) { //validate request if (!ModelState.IsValid) { return(BadRequest(ModelState)); } //ensure telemetry is for existing device var device = _deviceRepository.AsQueryable().FirstOrDefault(q => q.SerialNumber == command.SerialNumber); if (device == null) { ModelState.AddModelError("SerialNumber", "Device with this serial number doesn't exist"); return(BadRequest(ModelState)); } //convert request to the core entity var entity = command.ToCoreEntity(); //save entity in the telemetryRepository await _telemetryRepository.AddAsync(entity); //dispatch event to process telemetry await _messageBroker.BroadcastAsync(entity); // return 201 return(CreatedAtAction(nameof(Get), new { id = entity.Id }, entity)); }
public static DeviceTelemetry ToCoreEntity(this CreateTelemetryCommand @this) { return(new DeviceTelemetry { Id = Guid.NewGuid(), CreatedAt = DateTime.UtcNow, SerialNumber = @this.SerialNumber, DeviceDate = @this.DeviceDate, Latitude = @this.Latitude, Longitude = @this.Longitude, ServerDate = DateTime.UtcNow }); }