예제 #1
0
        public async Task <IHttpActionResult> GetForAdminsAsync(string criteria = null, bool?paid = null, bool?suspended = null, string mode = null, int page = 1, int limit = 10, OrganizationSortBy sort = OrganizationSortBy.Newest)
        {
            page  = GetPage(page);
            limit = GetLimit(limit);
            var organizations = await _repository.GetByCriteriaAsync(criteria, o => o.PageNumber(page).PageLimit(limit), sort, paid, suspended);

            var viewOrganizations = (await MapCollectionAsync <ViewOrganization>(organizations.Documents, true)).ToList();

            if (!String.IsNullOrEmpty(mode) && String.Equals(mode, "stats", StringComparison.OrdinalIgnoreCase))
            {
                return(OkWithResourceLinks(await PopulateOrganizationStatsAsync(viewOrganizations), organizations.HasMore, page, organizations.Total));
            }

            return(OkWithResourceLinks(viewOrganizations, organizations.HasMore, page, organizations.Total));
        }
예제 #2
0
        public Task <FindResults <Organization> > GetByCriteriaAsync(string criteria, CommandOptionsDescriptor <Organization> options, OrganizationSortBy sortBy, bool?paid = null, bool?suspended = null)
        {
            var filter = Query <Organization> .MatchAll();

            if (!String.IsNullOrWhiteSpace(criteria))
            {
                filter &= Query <Organization> .Term(o => o.Name, criteria);
            }

            if (paid.HasValue)
            {
                if (paid.Value)
                {
                    filter &= !Query <Organization> .Term(o => o.PlanId, _plans.FreePlan.Id);
                }
                else
                {
                    filter &= Query <Organization> .Term(o => o.PlanId, _plans.FreePlan.Id);
                }
            }

            if (suspended.HasValue)
            {
                if (suspended.Value)
                {
                    filter &= (!Query <Organization> .Term(o => o.BillingStatus, BillingStatus.Active) &&
                               !Query <Organization> .Term(o => o.BillingStatus, BillingStatus.Trialing) &&
                               !Query <Organization> .Term(o => o.BillingStatus, BillingStatus.Canceled)
                               ) || Query <Organization> .Term(o => o.IsSuspended, true);
                }
                else
                {
                    filter &= (
                        Query <Organization> .Term(o => o.BillingStatus, BillingStatus.Active) &&
                        Query <Organization> .Term(o => o.BillingStatus, BillingStatus.Trialing) &&
                        Query <Organization> .Term(o => o.BillingStatus, BillingStatus.Canceled)
                        ) || Query <Organization> .Term(o => o.IsSuspended, false);
                }
            }

            var query = new RepositoryQuery <Organization>().ElasticFilter(filter);

            switch (sortBy)
            {
            case OrganizationSortBy.Newest:
                query.SortDescending((Organization o) => o.Id);
                break;

            case OrganizationSortBy.Subscribed:
                query.SortDescending((Organization o) => o.SubscribeDate);
                break;

            // case OrganizationSortBy.MostActive:
            //    query.WithSortDescending((Organization o) => o.TotalEventCount);
            //    break;
            default:
                query.SortAscending(o => o.Name.Suffix("keyword"));
                break;
            }

            return(FindAsync(q => query, options));
        }
예제 #3
0
        public PagedResult <Organization> List(string criteria = null, bool?isPaidPlan = null, bool?isSuspended = null, OrganizationSortBy sortBy = OrganizationSortBy.Newest, int page = 1, int pageSize = 10)
        {
            int skip = (page - 1) * pageSize;

            if (skip < 0)
            {
                skip = 0;
            }

            if (pageSize < 1)
            {
                pageSize = 10;
            }

            var queries = new List <IMongoQuery>();

            if (!String.IsNullOrWhiteSpace(criteria))
            {
                queries.Add(Query.Matches(OrganizationRepository.FieldNames.Name, new BsonRegularExpression(String.Format("/{0}/i", criteria))));
            }

            if (isPaidPlan.HasValue)
            {
                if (isPaidPlan.Value)
                {
                    queries.Add(Query.NE(OrganizationRepository.FieldNames.PlanId, new BsonString(BillingManager.FreePlan.Id)));
                }
                else
                {
                    queries.Add(Query.EQ(OrganizationRepository.FieldNames.PlanId, new BsonString(BillingManager.FreePlan.Id)));
                }
            }

            if (isSuspended.HasValue)
            {
                if (isSuspended.Value)
                {
                    queries.Add(
                        Query.Or(
                            Query.And(
                                Query.NE(OrganizationRepository.FieldNames.BillingStatus, new BsonInt32((int)BillingStatus.Active)),
                                Query.NE(OrganizationRepository.FieldNames.BillingStatus, new BsonInt32((int)BillingStatus.Trialing)),
                                Query.NE(OrganizationRepository.FieldNames.BillingStatus, new BsonInt32((int)BillingStatus.Canceled))),
                            Query.EQ(OrganizationRepository.FieldNames.IsSuspended, new BsonBoolean(true))));
                }
                else
                {
                    queries.Add(Query.And(
                                    Query.Or(
                                        Query.EQ(OrganizationRepository.FieldNames.BillingStatus, new BsonInt32((int)BillingStatus.Active)),
                                        Query.EQ(OrganizationRepository.FieldNames.BillingStatus, new BsonInt32((int)BillingStatus.Trialing)),
                                        Query.EQ(OrganizationRepository.FieldNames.BillingStatus, new BsonInt32((int)BillingStatus.Canceled))),
                                    Query.EQ(OrganizationRepository.FieldNames.IsSuspended, new BsonBoolean(false))));
                }
            }

            SortByBuilder sort;

            if (sortBy == OrganizationSortBy.Newest)
            {
                sort = SortBy.Descending(OrganizationRepository.FieldNames.Id);
            }
            else if (sortBy == OrganizationSortBy.Subscribed)
            {
                sort = SortBy.Descending(OrganizationRepository.FieldNames.SubscribeDate);
            }
            else if (sortBy == OrganizationSortBy.MostActive)
            {
                sort = SortBy.Descending(OrganizationRepository.FieldNames.TotalErrorCount);
            }
            else
            {
                sort = SortBy.Ascending(OrganizationRepository.FieldNames.Name);
            }

            MongoCursor <Organization> query   = queries.Count > 0 ? ((OrganizationRepository)_repository).Collection.Find(Query.And(queries)) : ((OrganizationRepository)_repository).Collection.FindAll();
            List <Organization>        results = query.SetSortOrder(sort).SetSkip(skip).SetLimit(pageSize).ToList();

            return(new PagedResult <Organization>(results)
            {
                Page = page,
                PageSize = pageSize,
                TotalCount = query.Count()
            });
        }
        public IHttpActionResult GetForAdmins(string criteria = null, bool?paid = null, bool?suspended = null, int page = 1, int limit = 10, OrganizationSortBy sort = OrganizationSortBy.Newest)
        {
            page  = GetPage(page);
            limit = GetLimit(limit);
            var options = new PagingOptions {
                Page = page, Limit = limit
            };
            var results = _repository.GetByCriteria(criteria, options, sort, paid, suspended).Select(Mapper.Map <Organization, ViewOrganization>).ToList();

            return(OkWithResourceLinks(results, options.HasMore, page));
        }
        public ICollection <Organization> GetByCriteria(string criteria, PagingOptions paging, OrganizationSortBy sortBy, bool?paid = null, bool?suspended = null)
        {
            var options = new MongoOptions().WithPaging(paging);

            if (!String.IsNullOrWhiteSpace(criteria))
            {
                options.Query = options.Query.And(Query.Matches(FieldNames.Name, new BsonRegularExpression(String.Format("/{0}/i", criteria))));
            }

            if (paid.HasValue)
            {
                if (paid.Value)
                {
                    options.Query = options.Query.And(Query.NE(FieldNames.PlanId, new BsonString(BillingManager.FreePlan.Id)));
                }
                else
                {
                    options.Query = options.Query.And(Query.EQ(FieldNames.PlanId, new BsonString(BillingManager.FreePlan.Id)));
                }
            }

            if (suspended.HasValue)
            {
                if (suspended.Value)
                {
                    options.Query = options.Query.And(
                        Query.Or(
                            Query.And(
                                Query.NE(FieldNames.BillingStatus, new BsonInt32((int)BillingStatus.Active)),
                                Query.NE(FieldNames.BillingStatus, new BsonInt32((int)BillingStatus.Trialing)),
                                Query.NE(FieldNames.BillingStatus, new BsonInt32((int)BillingStatus.Canceled))
                                ),
                            Query.EQ(FieldNames.IsSuspended, new BsonBoolean(true))));
                }
                else
                {
                    options.Query = options.Query.And(
                        Query.Or(
                            Query.EQ(FieldNames.BillingStatus, new BsonInt32((int)BillingStatus.Active)),
                            Query.EQ(FieldNames.BillingStatus, new BsonInt32((int)BillingStatus.Trialing)),
                            Query.EQ(FieldNames.BillingStatus, new BsonInt32((int)BillingStatus.Canceled))
                            ),
                        Query.EQ(FieldNames.IsSuspended, new BsonBoolean(false)));
                }
            }

            switch (sortBy)
            {
            case OrganizationSortBy.Newest:
                options.SortBy = SortBy.Descending(FieldNames.Id);
                break;

            case OrganizationSortBy.Subscribed:
                options.SortBy = SortBy.Descending(FieldNames.SubscribeDate);
                break;

            case OrganizationSortBy.MostActive:
                options.SortBy = SortBy.Descending(FieldNames.TotalEventCount);
                break;

            default:
                options.SortBy = SortBy.Ascending(FieldNames.Name);
                break;
            }

            return(Find <Organization>(options));
        }
예제 #6
0
        public Task <FindResults <Organization> > GetByCriteriaAsync(string criteria, PagingOptions paging, OrganizationSortBy sortBy, bool?paid = null, bool?suspended = null)
        {
            var filter = Filter <Organization> .MatchAll();

            if (!String.IsNullOrWhiteSpace(criteria))
            {
                filter &= Filter <Organization> .Term(o => o.Name, criteria);
            }

            if (paid.HasValue)
            {
                if (paid.Value)
                {
                    filter &= !Filter <Organization> .Term(o => o.PlanId, BillingManager.FreePlan.Id);
                }
                else
                {
                    filter &= Filter <Organization> .Term(o => o.PlanId, BillingManager.FreePlan.Id);
                }
            }

            if (suspended.HasValue)
            {
                if (suspended.Value)
                {
                    filter &= Filter <Organization> .And(and => ((
                                                                     !Filter <Organization> .Term(o => o.BillingStatus, BillingStatus.Active) &&
                                                                     !Filter <Organization> .Term(o => o.BillingStatus, BillingStatus.Trialing) &&
                                                                     !Filter <Organization> .Term(o => o.BillingStatus, BillingStatus.Canceled)
                                                                     ) || Filter <Organization> .Term(o => o.IsSuspended, true)));
                }
                else
                {
                    filter &= Filter <Organization> .And(and => ((
                                                                     Filter <Organization> .Term(o => o.BillingStatus, BillingStatus.Active) &&
                                                                     Filter <Organization> .Term(o => o.BillingStatus, BillingStatus.Trialing) &&
                                                                     Filter <Organization> .Term(o => o.BillingStatus, BillingStatus.Canceled)
                                                                     ) || Filter <Organization> .Term(o => o.IsSuspended, false)));
                }
            }

            var query = new ExceptionlessQuery().WithPaging(paging).WithElasticFilter(filter);

            switch (sortBy)
            {
            case OrganizationSortBy.Newest:
                query.WithSort(OrganizationIndex.Fields.Organization.Id, SortOrder.Descending);
                break;

            case OrganizationSortBy.Subscribed:
                query.WithSort(OrganizationIndex.Fields.Organization.SubscribeDate, SortOrder.Descending);
                break;

            // case OrganizationSortBy.MostActive:
            //    query.WithSort(OrganizationIndex.Fields.Organization.TotalEventCount, SortOrder.Descending);
            //    break;
            default:
                query.WithSort(OrganizationIndex.Fields.Organization.Name, SortOrder.Ascending);
                break;
            }

            return(FindAsync(query));
        }
예제 #7
0
        public Task <FindResults <Organization> > GetByCriteriaAsync(string criteria, PagingOptions paging, OrganizationSortBy sortBy, bool?paid = null, bool?suspended = null)
        {
            var filter = Filter <Organization> .MatchAll();

            if (!String.IsNullOrWhiteSpace(criteria))
            {
                filter &= Filter <Organization> .Term(o => o.Name, criteria);
            }

            if (paid.HasValue)
            {
                if (paid.Value)
                {
                    filter &= !Filter <Organization> .Term(o => o.PlanId, BillingManager.FreePlan.Id);
                }
                else
                {
                    filter &= Filter <Organization> .Term(o => o.PlanId, BillingManager.FreePlan.Id);
                }
            }

            if (suspended.HasValue)
            {
                if (suspended.Value)
                {
                    filter &= Filter <Organization> .And(and => ((
                                                                     !Filter <Organization> .Term(o => o.BillingStatus, BillingStatus.Active) &&
                                                                     !Filter <Organization> .Term(o => o.BillingStatus, BillingStatus.Trialing) &&
                                                                     !Filter <Organization> .Term(o => o.BillingStatus, BillingStatus.Canceled)
                                                                     ) || Filter <Organization> .Term(o => o.IsSuspended, true)));
                }
                else
                {
                    filter &= Filter <Organization> .And(and => ((
                                                                     Filter <Organization> .Term(o => o.BillingStatus, BillingStatus.Active) &&
                                                                     Filter <Organization> .Term(o => o.BillingStatus, BillingStatus.Trialing) &&
                                                                     Filter <Organization> .Term(o => o.BillingStatus, BillingStatus.Canceled)
                                                                     ) || Filter <Organization> .Term(o => o.IsSuspended, false)));
                }
            }

            Func <SortFieldDescriptor <Organization>, IFieldSort> sort = descriptor => descriptor.OnField(o => o.Name).Ascending();

            switch (sortBy)
            {
            case OrganizationSortBy.Newest:
                sort = descriptor => descriptor.OnField(o => o.Id).Descending();
                break;

            case OrganizationSortBy.Subscribed:
                sort = descriptor => descriptor.OnField(o => o.SubscribeDate).Descending();
                break;
                // case OrganizationSortBy.MostActive:
                //    sort = descriptor => descriptor.OnField(o => o.TotalEventCount).Descending();
                //    break;
            }

            return(FindAsync(new ElasticSearchOptions <Organization>().WithPaging(paging).WithFilter(filter).WithSort(sort)));
        }
예제 #8
0
        public IHttpActionResult GetForAdmins(string criteria = null, bool?paid = null, bool?suspended = null, string before = null, string after = null, int limit = 10, OrganizationSortBy sort = OrganizationSortBy.Newest)
        {
            var options = new PagingOptions().WithBefore(before).WithAfter(after).WithLimit(limit);
            var results = _repository.GetByCriteria(criteria, options, sort, paid, suspended).Select(Mapper.Map <Organization, ViewOrganization>).ToList();

            return(OkWithResourceLinks(results, options.HasMore, i => i.Id));
        }