コード例 #1
0
        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());
            }
        }
コード例 #2
0
        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());
            }
        }
コード例 #3
0
        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());
            }
        }