public async Task <IActionResult> Update([FromBody] UpdatedConnectionCommand command)
        {
            var result = await _bus.Send(command);

            return(result.Fail
                ? Error(result.ErrorMessage, result.Code)
                : NoContent());
        }
Ejemplo n.º 2
0
        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());
        }