public async Task <IResponseModel <CampaignCreateResponse> > Handle(CampaignCreateCommand request, CancellationToken cancellationToken) { // TODO: Logs var fromBuilding = await _buildingQueryService.FindAsync(request.FromIdBuilding); var toBuilding = await _buildingQueryService.FindAsync(request.ToIdBuilding); if (fromBuilding.City != toBuilding.City) { return(new BadRequestResponse <CampaignCreateResponse>("The buildings must be in the same city.")); } if (fromBuilding.Street != toBuilding.Street) { return(new BadRequestResponse <CampaignCreateResponse>("The buildings must be on the same street.")); } if (toBuilding.StreetNumber % 2 == 0 != (fromBuilding.StreetNumber % 2 == 0)) { return(new BadRequestResponse <CampaignCreateResponse>( "The buildings must be on the same side of the road.")); } if (fromBuilding.StreetNumber > toBuilding.StreetNumber) { return(new BadRequestResponse <CampaignCreateResponse>( "FromIdBuilding must have smaller street number than ToIdBuilding.")); } if (fromBuilding.StreetNumber == toBuilding.StreetNumber) { return(new BadRequestResponse <CampaignCreateResponse>( "The buildings must have different street number.")); } var buildings = _buildingQueryService.GetAll(fromBuilding.City, fromBuilding.Street, fromBuilding.IdBuilding, toBuilding.IdBuilding, toBuilding.StreetNumber % 2 == 0); var calculation = await _bannerCalculateService.CalculateAsync(buildings.ToList(), request.PricePerSquareMeter); if (calculation == null) { return(new InternalError <CampaignCreateResponse>("The calculation task could not be completed.")); } var result = await _campaignCreateService.CreateAsync(request, calculation); if (result == null) { return(new InternalError <CampaignCreateResponse>("The campaign could not be created.")); } return(new SuccessResponse <CampaignCreateResponse>("Campaign has been created.", calculation)); }
public async Task <IActionResult> Create(CampaignCreateCommand command) { var result = await _mediator.Send(command); return(Response(result)); }