public async Task <ActionResult> DeleteLitterPin([FromBody] LitterPin request)
        {
            try
            {
                var requestUid = await HttpContext.Request.AuthorizeWithFirebase();

                if (requestUid == null)
                {
                    return(Unauthorized());
                }

                if (requestUid != request.CreatedByUid)
                {
                    return(Forbid());
                }

                var tasks = new[]
                {
                    _googleCloudStorage.DeleteFiles(request.ImageUrls),
                    _litterTrackerRepository.DeleteLitterPin(request.DataStoreId)
                };

                Task.WaitAll(tasks);

                return(Ok());
            }
            catch (Exception e)
            {
                _logger.LogError(e, "Error updating pin");
                throw;
            }
        }
        public async Task <ActionResult <LitterPin> > UpdateLitterPin([FromBody] LitterPin request)
        {
            try
            {
                var requestUid = await HttpContext.Request.AuthorizeWithFirebase();

                if (requestUid == null)
                {
                    return(Unauthorized());
                }

                if (requestUid != request.CreatedByUid)
                {
                    return(Forbid());
                }

                var result = await _litterTrackerRepository.UpdateLitterPin(request, requestUid);

                return(result == null?Problem(detail : "Failed to update and return requested pin") : Ok(result));
            }
            catch (Exception e)
            {
                _logger.LogError(e, "Error updating pin");
                throw;
            }
        }
Пример #3
0
        public async Task <LitterPin> CreateNewLitterPin(LitterPin request, string requestUid)
        {
            await Insert(request.EnsureObjectValid(requestUid, CreatePin));

            return((await Get(Filter.Equal("MarkerLocation", JsonConvert.SerializeObject(request.MarkerLocation))))
                   .Select(MapEntityToLitterPin).FirstOrDefault());
        }
Пример #4
0
        public async Task <LitterPin> UpdateLitterPin(LitterPin request, string requestUid)
        {
            var result = await Update(request.EnsureObjectValid(requestUid, UpdatePin), request.DataStoreId.ToKey(Kind));

            if (result)
            {
                return((await Get(Filter.Equal("__key__", request.DataStoreId.ToKey(Kind))))
                       .Select(MapEntityToLitterPin).FirstOrDefault());
            }

            return(null);
        }
        public async Task <ActionResult <LitterPin> > CreateNewLitterPin([FromBody] LitterPin request)
        {
            try
            {
                var requestUid = await HttpContext.Request.AuthorizeWithFirebase();

                if (requestUid == null)
                {
                    return(Unauthorized());
                }

                var result = _litterTrackerRepository.CreateNewLitterPin(await request.EnsureWeatherData(_openWeatherServiceAgent), requestUid);

                return(Ok(await result));
            }
            catch (Exception e)
            {
                _logger.LogError(e, "Error creating new pin");
                throw;
            }
        }
        public static LitterPin EnsureObjectValid(this LitterPin pin, string requestUid, DbKinds.PinOperationType operation)
        {
            var now = DateTime.Now;

            if (pin.ImageUrls == null)
            {
                pin.ImageUrls = new List <string>();
            }

            if (pin.WeatherData == null)
            {
                pin.WeatherData = new WeatherData();
            }

            if (pin.MarkerLocation == null)
            {
                pin.MarkerLocation = new LatLng();
            }

            switch (operation)
            {
            case DbKinds.PinOperationType.CreatePin:
                pin.DateCreated      = now;
                pin.CreatedByUid     = requestUid;
                pin.DateLastUpdated  = now;
                pin.LastUpdatedByUid = requestUid;
                break;

            case DbKinds.PinOperationType.UpdatePin:
                pin.DateLastUpdated  = now;
                pin.LastUpdatedByUid = requestUid;
                break;

            default:
                throw new ArgumentOutOfRangeException(nameof(operation), operation, "Invalid Operation Type");
            }
            return(pin);
        }
        public static async Task <LitterPin> EnsureWeatherData(this LitterPin pin, IOpenWeatherServiceAgent service)
        {
            pin.WeatherData = await service.GetWeatherForPin(pin.MarkerLocation);

            return(pin);
        }