Example #1
0
        private static async Task <string> AddIntervention(
            InterventionDto intervention,
            CloudTable interventionsTable,
            Address convertedGeoAddress
            )
        {
            int nextId = await InterventionCounter.GetNextId(interventionsTable);

            InterventionEntity interventionEntity = new InterventionEntity()
            {
                PartitionKey     = GeoHash.Encode(convertedGeoAddress.Latitude, convertedGeoAddress.Lognitude, Config.GeoHashPrecision),
                RowKey           = nextId.ToString(),
                Email            = intervention.Email,
                City             = intervention.City,
                Street           = intervention.Street,
                StreetNumber     = intervention.StreetNumber,
                CreationDate     = DateTime.UtcNow,
                ModificationDate = DateTime.UtcNow,
                Description      = intervention.Description,
                FullName         = intervention.FullName,
                PhoneNumber      = intervention.PhoneNumber,
                Status           = (int)intervention.Status,
                GeoLat           = convertedGeoAddress.Latitude,
                GeoLng           = convertedGeoAddress.Lognitude,
            };

            TableOperation insertNewIntervention = TableOperation.Insert(interventionEntity);
            await interventionsTable.ExecuteAsync(insertNewIntervention);

            return(interventionEntity.RowKey);
        }
        public async Task <ActionResult> Run(
            [HttpTrigger(AuthorizationLevel.Function, "post", Route = "interventions")]
            [RequestBodyType(typeof(InterventionDto), "InterventionDto")] InterventionDto intervention,
            [Table(Config.InterventionsTableName, Connection = Config.StorageConnectionName)] IAsyncCollector <InterventionEntity> interventions,
            ILogger log)
        {
            var results = new List <ValidationResult>();

            if (!Validator.TryValidateObject(intervention, new ValidationContext(intervention, null, null), results))
            {
                var errorList = new List <string>();
                foreach (var error in results)
                {
                    errorList.Add(error.ErrorMessage);
                }
                string json = JsonConvert.SerializeObject(errorList);
                return(new BadRequestObjectResult(json));
            }
            Address convertedGeoAddress = new Address();

            try
            {
                // retry should be added
                convertedGeoAddress = await _addressConverter.ConvertToGeoAddress(intervention.Address);
            }
            catch (Exception e)
            {
                log.LogError(e, "error");
                return(new StatusCodeResult(StatusCodes.Status500InternalServerError));
            }
            InterventionEntity interventionEntity = new InterventionEntity()
            {
                Email            = intervention.Email,
                City             = intervention.City,
                Street           = intervention.Street,
                StreetNumber     = intervention.StreetNumber,
                CreationDate     = DateTime.UtcNow,
                ModificationDate = DateTime.UtcNow,
                Description      = intervention.Description,
                FullName         = intervention.FullName,
                PhoneNumber      = intervention.PhoneNumber,
                Status           = (int)intervention.Status,
                GeoLat           = convertedGeoAddress.Latitude,
                GeoLng           = convertedGeoAddress.Lognitude,
                PartitionKey     = GeoHash.Encode(convertedGeoAddress.Latitude, convertedGeoAddress.Lognitude, Config.GeoHashPrecision)
            };
            await interventions.AddAsync(interventionEntity);

            await interventions.FlushAsync();

            return(new JsonResult(new { id = interventionEntity.RowKey }));
        }
Example #3
0
        private static async Task <IActionResult> AddComment(
            string filter, AddCommentDto addCommentDto, CloudTable interventionsTable
            )
        {
            InterventionEntity intervention = await GetIntervention(filter, interventionsTable);

            if (intervention == null)
            {
                return(new StatusCodeResult(StatusCodes.Status404NotFound));
            }

            CommentDto comment = await AddCommentToIntervention(addCommentDto, interventionsTable, intervention);

            return(new JsonResult(comment));
        }
Example #4
0
        private static async Task <CommentDto> AddCommentToIntervention(
            AddCommentDto addCommentDto, CloudTable interventionsTable, InterventionEntity intervention
            )
        {
            CommentDto comment = new CommentDto()
            {
                CreatedDate = DateTime.UtcNow,
                Comment     = addCommentDto.Comment,
                Id          = Guid.NewGuid().ToString()
            };

            intervention.AddComment(comment);
            await interventionsTable.ExecuteAsync(TableOperation.Merge(intervention));

            return(comment);
        }
        public async Task <IActionResult> RunWithGeoHash(
            [HttpTrigger(AuthorizationLevel.Function, "put", Route = "interventions/{latitude}/{longitude}/{interventionId}")]
            [RequestBodyType(typeof(InterventionDto), "InterventionDto")] InterventionDto editedIntervention,
            [Table(Config.InterventionsTableName, Connection = Config.StorageConnectionName)] CloudTable interventionsTable,
            string latitude, string longitude, string interventionId, ILogger log)
        {
            var geoHash     = GeoHasher.GetGeoHash(latitude, longitude);
            var finalFilter = InterventionFilterBuilder.GetInterventionGeoHashFilter(geoHash, interventionId);

            var queryResult = await interventionsTable.ExecuteQuerySegmentedAsync(new TableQuery <InterventionEntity>().Where(
                                                                                      finalFilter).Take(1), null);

            var interventionToEdit = queryResult.Results.FirstOrDefault();

            if (interventionToEdit == null)
            {
                return(new StatusCodeResult(StatusCodes.Status404NotFound));
            }

            if (AddressChanged(interventionToEdit, editedIntervention))
            {
                Address convertedGeoAddress = new Address();
                try
                {
                    convertedGeoAddress = await _addressConverter.ConvertToGeoAddress(editedIntervention.Address);
                }
                catch (Exception e)
                {
                    log.LogError(e, "error");
                    return(new StatusCodeResult(StatusCodes.Status500InternalServerError));
                }

                InterventionEntity adddedInterventionEntity = new InterventionEntity()
                {
                    Email            = editedIntervention.Email,
                    CreationDate     = interventionToEdit.CreationDate,
                    ModificationDate = DateTime.UtcNow,
                    Description      = editedIntervention.Description,
                    FullName         = editedIntervention.FullName,
                    PhoneNumber      = editedIntervention.PhoneNumber,
                    Status           = (int)editedIntervention.Status,
                    City             = editedIntervention.City,
                    Street           = editedIntervention.Street,
                    StreetNumber     = editedIntervention.StreetNumber,
                    GeoLat           = convertedGeoAddress.Latitude,
                    GeoLng           = convertedGeoAddress.Lognitude,
                    PartitionKey     = GeoHash.Encode(convertedGeoAddress.Latitude, convertedGeoAddress.Lognitude, Config.GeoHashPrecision)
                };

                TableOperation deleteOldIntervention = TableOperation.Delete(interventionToEdit);
                TableOperation insertNewIntervention = TableOperation.InsertOrReplace(adddedInterventionEntity);

                TableBatchOperation batch = new TableBatchOperation {
                    deleteOldIntervention, insertNewIntervention
                };
                await interventionsTable.ExecuteBatchAsync(batch);

                var addedItemResponse = _mapper.Map <InterventionItemResponse>(adddedInterventionEntity);
                return(new JsonResult(addedItemResponse));
            }

            interventionToEdit.Email            = editedIntervention.Email;
            interventionToEdit.ModificationDate = DateTime.UtcNow;
            interventionToEdit.Description      = editedIntervention.Description;
            interventionToEdit.FullName         = editedIntervention.FullName;
            interventionToEdit.PhoneNumber      = editedIntervention.PhoneNumber;
            interventionToEdit.Status           = (int)editedIntervention.Status;

            await interventionsTable.ExecuteAsync(TableOperation.Merge(interventionToEdit));

            var interventionItemResponses = _mapper.Map <InterventionItemResponse>(interventionToEdit);

            return(new JsonResult(interventionItemResponses));
        }
 private bool AddressChanged(InterventionEntity interventionToEdit, InterventionDto editedIntervention)
 {
     return(interventionToEdit.Address != editedIntervention.Address);
 }