public async Task <DomainResult <ObjectId> > Handle(CreateRouteCommand 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 <ObjectId>("Origin or Destination not found")); } var route = Route.Create(origin, destination); if (await _routeRepository.AlreadyExistsAsync(x => route.IsTheSame(x))) { return(DomainResult.Failure <ObjectId>("Route already exists", HttpStatusCode.Conflict)); } await _routeRepository.CreateAsync(route); await _mediator.Publish(new RouteCreatedEvent(route)); return(DomainResult.Ok(route.Id)); }