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