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
     });
 }