public async Task <IActionResult> Delete(Guid userId) { if (!ProjectId.HasValue) { return(new NotFoundResult()); } var project = await projectsRepository .GetAsync(ProjectId.Value) .ConfigureAwait(false); var user = project?.Users?.FirstOrDefault(u => u.Id == userId); if (user is null) { return(new NotFoundResult()); } var command = new ProjectUserDeleteCommand(currentUser, user, ProjectId.Value); var commandResult = await orchestrator .InvokeAsync <Project>(command) .ConfigureAwait(false); if (commandResult.Links.TryGetValue("status", out var statusUrl)) { return(new AcceptedResult(statusUrl, commandResult)); } else { return(new OkObjectResult(commandResult)); } }
public async Task <ICommandResult> HandleAsync(ProjectUserDeleteCommand command, IAsyncCollector <ICommand> commandQueue, IDurableOrchestrationContext orchestrationContext, ILogger log) { if (command is null) { throw new ArgumentNullException(nameof(command)); } if (commandQueue is null) { throw new ArgumentNullException(nameof(commandQueue)); } var commandResult = command.CreateResult(); try { commandResult.Result = await userRepository .RemoveAsync(command.Payload) .ConfigureAwait(false); commandResult.RuntimeStatus = CommandRuntimeStatus.Completed; } catch (Exception exc) { commandResult.Errors.Add(exc); } finally { await UpdateComponentsAsync(command.User, command.ProjectId, commandQueue) .ConfigureAwait(false); } return(commandResult); }