Example #1
0
        public async Task <dynamic> GetCountsPerState(Guid country, string kind)
        {
            using (var session = sessionFactory())
            {
                var staticResults = await session
                                    .Query <Documents_CountsByStaticState.Result, Documents_CountsByStaticState>()
                                    .Where(x => x.Kind == kind && x.Country == country)
                                    .ToListAsync();

                var stream = session
                             .Query <Documents_ByDynamicState.Result, Documents_ByDynamicState>()
                             .Where(x => x.Kind == kind && x.Country == country)
                             .As <DocumentCountProjection>();

                string countryName = (await session.LoadAsync <CountryLookup>(country.ToString())).Name;

                var evaluator = new RealtimeStateEvaluator();

                var iterator = await session.Advanced.StreamAsync(stream);

                while (await iterator.MoveNextAsync())
                {
                    DocumentCountProjection projection = iterator.Current.Document;
                    var actualState = evaluator.Evaluate(new RealtimeStateEvaluationContext
                    {
                        StaticState        = projection.State,
                        Country            = projection.Country,
                        NextReviewAt       = projection.NextReviewAt,
                        PlannedPeriod      = new ValidityPeriod(projection.StartDateTime, projection.EndDateTime),
                        ExpirationDateTime = projection.LifetimePeriodEnd
                    });

                    var result = staticResults.SingleOrDefault(r => r.State == actualState);
                    if (result == null)
                    {
                        result = new Documents_CountsByStaticState.Result
                        {
                            Kind        = kind,
                            Country     = country,
                            CountryName = countryName,
                            State       = actualState,
                        };

                        staticResults.Add(result);
                    }

                    result.Count++;
                }

                return(staticResults);
            }
        }
Example #2
0
        public dynamic GetCountsPerState(Guid country, string kind)
        {
            var query =
                from document in database.GetRepository <DocumentCountProjection>()
                let dynamicStates = new[] { "Active" }
            where document.Kind == kind && document.Country == country
            where !dynamicStates.Contains(document.State)
            group document by new {
                Country = document.Country,
                document.CountryName,
                document.RestrictedArea,
                document.Kind,
                document.State
            }
            into grp
                select new Result
            {
                Country           = grp.Key.Country,
                CountryName       = grp.Key.CountryName,
                AuthorizationArea = grp.Key.RestrictedArea,
                Kind  = grp.Key.Kind,
                State = grp.Key.State,
                Count = grp.Count()
            };

            string countryName = database
                                 .GetRepository <CountryLookup>()
                                 .Single(x => x.Id == country.ToString()).Name;

            List <Result> staticResults = query.ToList();

            var dynamicResults =
                from document in database.GetRepository <DocumentCountProjection>()
                let dynamicStates = new[] { "Active" }
            where document.Kind == kind && document.Country == country
            where dynamicStates.Contains(document.State)
            select document;

            var evaluator = new RealtimeStateEvaluator();

            foreach (var document in dynamicResults.ToArray())
            {
                var actualState = evaluator.Evaluate(new RealtimeStateEvaluationContext
                {
                    StaticState        = document.State,
                    Country            = document.Country,
                    NextReviewAt       = document.NextReviewAt,
                    PlannedPeriod      = new ValidityPeriod(document.StartDateTime, document.EndDateTime),
                    ExpirationDateTime = document.LifetimePeriodEnd
                });

                var result = staticResults.SingleOrDefault(r => r.State == actualState);
                if (result == null)
                {
                    result = new Result
                    {
                        Country           = document.Country,
                        CountryName       = countryName,
                        AuthorizationArea = document.RestrictedArea,
                        Kind  = document.Kind,
                        State = document.State,
                        Count = 0
                    };

                    staticResults.Add(result);
                }

                result.Count++;
            }

            return(staticResults);
        }
Example #3
0
        public dynamic GetCountsPerState(Guid country, string kind)
        {
            using (var session = sessionFactory())
            {
                string countryName = session.Query <CountryLookup>().Single(c => c.Id == country.ToString()).Name;

                var staticResults =
                    from document in session.Query <DocumentCountProjection>()
                    let dynamicStates = new[] { "Active" }
                where !dynamicStates.Contains(document.State) && !document.Corrupt
                where document.Kind == kind && document.Country == country
                group document by new { document.Country, AreaRestrictions = document.RestrictedArea, document.Kind, document.State }
                into grp
                    select new Result
                {
                    Kind             = grp.Key.Kind,
                    Country          = grp.Key.Country,
                    CountryName      = countryName,
                    AreaRestrictions = grp.Key.AreaRestrictions,
                    State            = grp.Key.State,
                    Count            = grp.Count()
                };

                var evaluator = new RealtimeStateEvaluator();

                var dynamicResults =
                    from document in session.Query <DocumentCountProjection>()
                    let dynamicStates = new[] { "Active" }
                where document.Kind == kind && document.Country == country
                where !dynamicStates.Contains(document.State) && !document.Corrupt
                select document;

                var results = new List <Result>(staticResults);

                foreach (var projection in dynamicResults.ToArray())
                {
                    var actualState = evaluator.Evaluate(new RealtimeStateEvaluationContext
                    {
                        StaticState        = projection.State,
                        Country            = projection.Country,
                        NextReviewAt       = projection.NextReviewAt,
                        PlannedPeriod      = new ValidityPeriod(projection.StartDateTime, projection.EndDateTime),
                        ExpirationDateTime = projection.LifetimePeriodEnd
                    });

                    var result = staticResults.SingleOrDefault(r => r.State == actualState);
                    if (result == null)
                    {
                        result = new Result
                        {
                            Kind             = kind,
                            Country          = country,
                            CountryName      = countryName,
                            AreaRestrictions = projection.RestrictedArea,
                            State            = actualState,
                            Count            = 1
                        };

                        results.Add(result);
                    }

                    result.Count++;
                }

                return(results);
            }
        }