public async Task <Result <Create.Response, Error> > Handle(Create.Command request, CancellationToken cancellationToken) { var maybeEdition = await _editionProvider.GetEdition(request.EditionID); if (maybeEdition.HasNoValue) { return(Result.Failure <Create.Response, Error>(new Error.ResourceNotFound($"Edition with ID={request.EditionID} not found"))); } if (maybeEdition.Value.StartDateTime > request.StartDateTime.ToInstant()) { return(Result.Failure <Create.Response, Error>(new Error.ValidationFailed(nameof(request.StartDateTime), Create.ErrorMessages.CampaignCannotStartBeforeEditionStart))); } if (maybeEdition.Value.EndDateTime < request.EndDateTime.ToInstant()) { return(Result.Failure <Create.Response, Error>(new Error.ValidationFailed(nameof(request.EndDateTime), Create.ErrorMessages.CampaignMustEndBeforeEditionEnd))); } var existingCampaigns = await _repository.GetAll(); var interval = new Interval(request.StartDateTime.ToInstant(), request.EndDateTime.ToInstant()); if (existingCampaigns.Any(x => new Interval(x.StartDateTime.ToInstant(), x.EndDateTime.ToInstant()).Overlaps(interval))) { return(Result.Failure <Create.Response, Error>(new Error.DomainError(Create.ErrorMessages.CampaignsCannotOverlap))); } var campaign = new Entities.Campaign(request.StartDateTime, request.EndDateTime, request.EditionID, request.Name); var id = await _repository.Insert(campaign); return(Result.Success <Create.Response, Error>(new Create.Response() { ID = id })); }
public async Task <IActionResult> OnPostAsync() { if (ModelState.IsValid) { var campaign = new Entities.Campaign { Name = CreateCampaign.Name, Place = CreateCampaign.Place, DateTime = CreateCampaign.DateTime }; if (CreateCampaign.Id.HasValue) { campaign.Id = CreateCampaign.Id.Value; await _campaignFacade.UpdateAsync(campaign); } else { await _campaignFacade.AddAsync(campaign); } return(RedirectToPage("Index")); } return(RedirectToPage("Index")); }
public async Task Update(Entities.Campaign campaign) { await _session.UpdateAsync(campaign); }
public async Task <int> Insert(Entities.Campaign campaign) { return((int)await _session.SaveAsync(campaign)); }