public async Task <IActionResult> PostAsync([FromBody] RouteArgs args) { ValidateRouteArgs(args); if (!ModelState.IsValid) { return(BadRequest(ModelState)); } if (!UserPermissions.IsAllowedToCreate(User.Identity, args.Status)) { return(Forbid()); } // validation passed, emit event var ev = new RouteCreated { Id = _entityIndex.NextId(ResourceType.Route), UserId = User.Identity.GetUserIdentity(), Properties = args, Timestamp = DateTimeOffset.Now }; await _eventStore.AppendEventAsync(ev); return(Created($"{Request.Scheme}://{Request.Host}/api/Routes/{ev.Id}", ev.Id)); }
private void Bot_RouteCalculated(object sender, RouteArgs args) { var rover = (DuckieBot)sender; _visitedNodes.Add(new Navigation.Point(rover.CurrentX, rover.CurrentY)); _plannedRoute = args.Route; _plannedNext = args.NextPoint; Application.Current.Dispatcher.Invoke(() => { DrawMap(_map); }); }
public Route(RouteArgs args) { Title = args.Title; Description = args.Description; Duration = args.Duration; Distance = args.Distance; Image.Id = args.Image; Audio.Id = args.Audio; Exhibits.Add(args.Exhibits?.Select(id => (BsonValue)id)); Status = args.Status; Tags.Add(args.Tags?.Select(id => (BsonValue)id)); }
private void ValidateRouteArgs(RouteArgs args) { if (args == null) { return; } // ensure referenced image exists if (args.Image != null && !_mediaIndex.IsImage(args.Image.Value)) { ModelState.AddModelError(nameof(args.Image), ErrorMessages.ImageNotFound(args.Image.Value)); } // ensure referenced audio exists if (args.Audio != null && !_mediaIndex.IsAudio(args.Audio.Value)) { ModelState.AddModelError(nameof(args.Audio), ErrorMessages.AudioNotFound(args.Audio.Value)); } // ensure referenced exhibits exist if (args.Exhibits != null) { var invalidIds = args.Exhibits .Where(id => !_entityIndex.Exists(ResourceType.Exhibit, id)) .ToList(); foreach (var id in invalidIds) { ModelState.AddModelError(nameof(args.Exhibits), ErrorMessages.ContentNotFound(ResourceType.Exhibit, id)); } } // ensure referenced tags exist if (args.Tags != null) { var invalidIds = args.Tags .Where(id => !_entityIndex.Exists(ResourceType.Tag, id)) .ToList(); foreach (var id in invalidIds) { ModelState.AddModelError(nameof(args.Tags), ErrorMessages.ContentNotFound(ResourceType.Tag, id)); } } }
public async Task <IActionResult> PutAsync(int id, [FromBody] RouteArgs args) { ValidateRouteArgs(args); if (!ModelState.IsValid) { return(BadRequest(ModelState)); } if (!_entityIndex.Exists(ResourceType.Route, id)) { return(NotFound()); } if (!UserPermissions.IsAllowedToEdit(User.Identity, args.Status, _entityIndex.Owner(ResourceType.Route, id))) { return(Forbid()); } var oldStatus = _entityIndex.Status(ResourceType.Route, id).GetValueOrDefault(); if (args.Status == ContentStatus.Unpublished && oldStatus != ContentStatus.Published) { return(BadRequest(ErrorMessages.CannotBeUnpublished(ResourceType.Route))); } // validation passed, emit event var ev = new RouteUpdated { Id = id, UserId = User.Identity.GetUserIdentity(), Properties = args, Timestamp = DateTimeOffset.Now, }; await _eventStore.AppendEventAsync(ev); return(StatusCode(204)); }