public async Task <ActionResult <MessageListResponse> > GetAsync([Required] double lat, [Required] double lon, [Required] int precision, [Required] long lastTimestamp, CancellationToken cancellationToken = default) { try { // Pull queries matching parameters var region = new Entities.Geospatial.Region { LatitudePrefix = lat, LongitudePrefix = lon, Precision = precision }; IEnumerable <InfectionReportMetadata> results = await this._reportService .GetLatestInfoAsync(region, lastTimestamp, cancellationToken); // Return using mapped proto object return(Ok(this._map.Map <MessageListResponse>(results))); } catch (RequestValidationFailedException ex) { return(BadRequest(ex.ValidationResult)); } catch (ArgumentNullException) { return(BadRequest()); } }
public async Task <ActionResult> PutAsync(SelfReportRequest request, CancellationToken cancellationToken = default) { // Get server timestamp at request immediately long serverTimestamp = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds(); try { // Parse request Entities.Geospatial.Region region = this._map.Map <Entities.Geospatial.Region>(request.Region); IEnumerable <BluetoothSeedMessage> seeds = request.Seeds .Select(s => this._map.Map <BluetoothSeedMessage>(s)); // Store submitted data await this._reportService.PublishAsync(seeds, region, serverTimestamp, cancellationToken); return(Ok()); } catch (RequestValidationFailedException ex) { // Only return validation results return(BadRequest(ex.ValidationResult)); } catch (ArgumentNullException) { return(BadRequest()); } }
public async Task <ActionResult> HeadAsync([Required] double lat, [Required] double lon, [Required] int precision, [Required] long lastTimestamp, CancellationToken cancellationToken = default) { try { // Pull queries matching parameters var region = new Entities.Geospatial.Region { LatitudePrefix = lat, LongitudePrefix = lon, Precision = precision }; long size = await this._reportService .GetLatestRegionDataSizeAsync(region, lastTimestamp, cancellationToken); // Set Content-Length header with calculated size Response.ContentLength = size; return(Ok()); } catch (RequestValidationFailedException ex) { return(BadRequest(ex.ValidationResult)); } catch (ArgumentNullException) { return(BadRequest()); } }