protected async Task <Campaign> ProcessCampaign(Guid competitionKey, DateTime matchDate)
        {
            var campaign = await Provider.FindCampaignAsync(competitionKey, matchDate);

            if (campaign != null)
            {
                return(campaign);
            }

            var competitionViewModel = await Provider.GetCompetition(competitionKey, matchDate);

            if (competitionViewModel == null)
            {
                return(null);
            }

            var startDate = Date.LowDate;
            var endDate   = Date.HighDate;

            if (!competitionViewModel.GetCampaignDates(matchDate, ref startDate, ref endDate))
            {
                return(null);
            }

            var newCampaign = Campaign.CreateNew(competitionViewModel.HeaderKey, startDate, endDate);

            campaign = newCampaign;

            Provider.Add(newCampaign);
            Provider.SaveChanges();

            return(campaign);
        }