public async Task <IActionResult> Update([FromBody] UpdatedConnectionCommand command) { var result = await _bus.Send(command); return(result.Fail ? Error(result.ErrorMessage, result.Code) : NoContent()); }
public async Task <DomainResult> Handle(UpdatedConnectionCommand command, CancellationToken cancellationToken) { var origin = await _pointRepository.FindAsync(command.OriginPointId); var destination = await _pointRepository.FindAsync(command.DestinationPointId); if (origin is null || destination is null) { return(DomainResult.Failure <string>("Origin or Destination not found")); } if (origin.Equals(destination)) { return(DomainResult.Failure <string>("You can't create a connection to the same origin and destination")); } var connection = await _connectionRepository.FindAsync(command.Id); if (connection is null) { return(DomainResult.Failure <string>("Connection not found")); } var arePointsChanged = connection.ArePointsChanged(origin, destination); connection.Update(origin, destination, command.Time, command.Cost); if (arePointsChanged && await _connectionRepository.AlreadyExistsAsync(x => connection.IsTheSame(x))) { return(DomainResult.Failure <string>("Connection already exists.", HttpStatusCode.Conflict)); } await _connectionRepository.UpdateAsync(connection); await _mediator.Publish(new ConnectionUpdatedEvent(connection)); return(DomainResult.Ok()); }