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)); }
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)); }
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)); }
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)); }
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))); }
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)); }