Exemple #1
0
        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));
 }