Example #1
0
        public async Task <DomainResult <ObjectId> > Handle(CreateConnectionCommand 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 connection = new Connection(origin, destination, command.Time, command.Cost);

            var alreadyExists = await _connectionRepository.AlreadyExistsAsync(x => connection.IsTheSame(x));

            if (alreadyExists)
            {
                return(DomainResult.Failure <ObjectId>("Connection already exists.", HttpStatusCode.Conflict));
            }

            await _connectionRepository.CreateAsync(connection);

            await _mediator.Publish(new ConnectionCreatedEvent(connection));

            return(DomainResult.Ok(connection.Id));
        }
        public async Task <DomainResult> Handle(InactivePointCommand command, CancellationToken cancellationToken)
        {
            var point = await _pointRepository.FindAsync(command.Id);

            if (point is null)
            {
                return(DomainResult.Failure <string>("Point not found"));
            }

            point.Inactive();

            await _pointRepository.UpdateAsync(point);

            await _mediator.Publish(new PointInactivatedEvent(point));

            return(DomainResult.Ok());
        }
        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));
        }