private static async Task FillMissions(List <MissionRequest> missionRequests) { var missionIds = missionRequests.GroupBy(mr => mr.MissionId).Select(group => group.Key).ToArray(); var expressions = new List <Expression <Func <Mission, bool> > >(); for (int index = 0; index < missionIds.Length; index++) { var missionId = missionIds[index]; if (index > 0) { var lastCriteria = expressions[index - 1]; expressions.Add(mission => lastCriteria.Invoke(mission) || mission.Id == missionId); } else { expressions.Add(mission => mission.Id == missionId); } } var queryOptions = new QueryOptions <Mission> { Filter = expressions.Last().Expand() }; var missionManager = new AzureTableStorageManager(AzureTableName.Missions); if (missionRequests.Count > 1) //for admin list { var initialFilter = TableQuery.GenerateFilterCondition( AzureTableConstants.RowKey, QueryComparisons.Equal, AzureTableConstants.MissionRowKey); var missions = await missionManager.GetEntitiesAsync( queryOptions.GenerateTableQuery <Mission, MissionAzure>(initialFilter)); foreach (var missionRequest in missionRequests) { missionRequest.Mission = missions.FirstOrDefault(mission => mission.Id == missionRequest.MissionId).FromAzureModel(); } } else //for single request get full mission { var initialFilter = TableQuery.GenerateFilterCondition( AzureTableConstants.PartitionKey, QueryComparisons.Equal, missionRequests[0].MissionId); var missions = await missionManager.GetEntitiesAsync(queryOptions.GenerateTableQuery <Mission, MissionAzure>(initialFilter)); missionRequests[0].Mission = Converters.ConvertToMission(missions, true); } }
private static async Task FillUsers(List <MissionRequest> missionRequests) { var userIds = missionRequests.GroupBy(mr => mr.UserId).Select(group => group.Key).ToArray(); var expressions = new List <Expression <Func <User, bool> > >(); for (int index = 0; index < userIds.Length; index++) { var userId = userIds[index]; if (index > 0) { var lastCriteria = expressions[index - 1]; expressions.Add(user => lastCriteria.Invoke(user) || user.Id == userId); } else { expressions.Add(user => user.Id == userId); } } var queryOptions = new QueryOptions <User> { Filter = expressions.Last().Expand() }; var userManager = new AzureTableStorageManager(AzureTableName.User); if (missionRequests.Count > 1)//for admin list { var initialFilter = TableQuery.GenerateFilterCondition( AzureTableConstants.RowKey, QueryComparisons.Equal, AzureTableConstants.UserRowKey); var usersResult = await userManager.GetEntitiesAsync(queryOptions.GenerateTableQuery <User, UserAzure>(initialFilter));//TODO don't load all users foreach (var missionRequest in missionRequests) { missionRequest.User = usersResult.SingleOrDefault(user => user.Id == missionRequest.UserId).FromAzureModel(); } } else //for single request get user qualities { var initialFilter = TableQuery.GenerateFilterCondition( AzureTableConstants.PartitionKey, QueryComparisons.Equal, missionRequests[0].UserId); var usersResult = await userManager.GetEntitiesAsync(queryOptions.GenerateTableQuery <User, UserAzure>(initialFilter)); missionRequests[0].User = Converters.ConvertToUser(usersResult, true); } }
/// <summary> /// Return the list of hint requests. /// </summary> /// <param name="options">Options for table query.</param> /// <returns></returns> public async Task <List <HintRequest> > GetHintRequests(QueryOptions <HintRequest> options) { var tableQuery = options.GenerateTableQuery <HintRequest, HintRequestAzure>(); var hintRequests = await _azureManager.GetEntitiesAsync(tableQuery); return(hintRequests.Select(t => t.FromAzureModel()).ToList()); }
/// <summary> /// Gets the person qualities. /// </summary> /// <param name="options">The options.</param> /// <returns>Task{IEnumerable{PersonQuality}}.</returns> public async Task <List <PersonQuality> > GetPersonQualities(QueryOptions <PersonQuality> options) { var tableQuery = options.GenerateTableQuery <PersonQuality, PersonQualityAzure>(); var result = await _azureManager.GetEntitiesAsync(tableQuery); var personQualities = result.Select(az => az.FromAzureModel()).ToList(); return(personQualities.FilterCollectionPostFactum(options)); }
/// <summary> /// Gets the users identities. /// </summary> /// <param name="options">The options.</param> /// <returns>Task{IEnumerable{UserIdentity}}.</returns> public async Task <IEnumerable <UserIdentity> > GetUsersIdentities(QueryOptions <UserIdentity> options) { var tableQuery = options.GenerateTableQuery <UserIdentity, UserIdentityAzure>(); var azureIdentities = await _azureManager.GetEntitiesAsync(tableQuery); var userIdentities = azureIdentities.Select(a => a.FromAzureModel()).ToList(); return(userIdentities.FilterCollectionPostFactum(options)); }
/// <summary> /// Gets the aliases. /// </summary> /// <param name="options">The options.</param> /// <returns>Task{IEnumerable{CommonPlaceAlias}}.</returns> public async Task <IEnumerable <CommonPlaceAlias> > GetAliases(QueryOptions <CommonPlaceAlias> options) { var tableQuery = options.GenerateTableQuery <CommonPlaceAlias, CommonPlaceAliasAzure>(); var azureAliases = await _azureManager.GetEntitiesAsync(tableQuery); var aliases = azureAliases.Select(a => a.FromAzureModel()).ToList(); return(aliases.FilterCollectionPostFactum(options)); }
/// <summary> /// Gets the kindActions. /// </summary> /// <param name="options"> /// The options. /// </param> /// <returns> /// Task{IEnumerable{KindAction}}. /// </returns> public async Task <List <KindAction> > GetKindActions(QueryOptions <KindAction> options) { var tableQuery = options.GenerateTableQuery <KindAction, KindActionAzure>(); var result = await _azureManager.GetEntitiesAsync(tableQuery); var azureKindActions = result.Select(azureModel => azureModel.FromAzureModel()).ToList(); return(azureKindActions.FilterCollectionPostFactum(options)); }
/// <summary> /// Gets the appErrorInfos. /// </summary> /// <param name="options"> /// The options. /// </param> /// <returns> /// Task{IEnumerable{AppErrorInfo}}. /// </returns> public async Task <IEnumerable <AppErrorInfo> > GetAppErrorInfos(QueryOptions <AppErrorInfo> options) { var tableQuery = options.GenerateTableQuery <AppErrorInfo, AppErrorInfoAzure>(); var result = await _azureManager.GetEntitiesAsync(tableQuery); var azureAppErrorInfos = result.Select(azureModel => azureModel.FromAzureModel()).ToList(); return(azureAppErrorInfos.FilterCollectionPostFactum(options)); }
/// <summary> /// Gets the missions. /// </summary> /// <param name="options"> /// The options. /// </param> /// <returns> /// Task{IEnumerable{Mission}}. /// </returns> public async Task <List <Mission> > GetMissions(QueryOptions <Mission> options) { string expandFilter; bool needExpand = CheckExpandGetFilter(options.Expand, out expandFilter); var tableQuery = options.GenerateTableQuery <Mission, MissionAzure>(expandFilter); var azureMissions = await _azureManager.GetEntitiesAsync(tableQuery); var missions = azureMissions.GroupBy(m => m.PartitionKey).Select(group => Converters.ConvertToMission(group.ToList(), needExpand)).ToList(); return(missions.FilterCollectionPostFactum(options)); }
/// <summary> /// Gets the users. /// </summary> /// <param name="options">The options.</param> /// <returns></returns> public async Task <IEnumerable <User> > GetUsers(QueryOptions <User> options) { string expandFilter; var needExpand = CheckExpandGetFilter(options.Expand, out expandFilter); var tableQuery = options.GenerateTableQuery <User, UserAzure>(expandFilter); var azureMissions = await _azureManager.GetEntitiesAsync(tableQuery); var users = azureMissions.GroupBy(m => m.PartitionKey) .Select(group => Converters.ConvertToUser(group.ToIList(), needExpand)) .ToList(); return(users.FilterCollectionPostFactum(options)); }
/// <summary> /// Gets the missionRequests. /// </summary> /// <param name="options"> /// The options. /// </param> /// <returns> /// Task{IEnumerable{MissionRequest}}. /// </returns> public async Task <List <MissionRequest> > GetMissionRequests(QueryOptions <MissionRequest> options) { var tableQuery = options.GenerateTableQuery <MissionRequest, MissionRequestAzure>(); var azureMissionRequests = await _azureManager.GetEntitiesAsync(tableQuery); var missionRequests = azureMissionRequests.Select(missionRequest => missionRequest.FromAzureModel()).ToList(); if (options.Expand != null && missionRequests.Any()) { await GetExpandProperties(options.Expand, missionRequests); } var filteredRequests = missionRequests.FilterCollectionPostFactum(options); return(filteredRequests); }
/// <summary> /// Gets the MissionSets. /// </summary> /// <param name="options"> /// The options. /// </param> /// <returns> /// Task{IEnumerable{MissionSet}}. /// </returns> public async Task <List <MissionSet> > GetMissionSets(QueryOptions <MissionSet> options) { string expandFilter; bool needExpand = CheckExpandGetFilter(options.Expand, out expandFilter); var tableQuery = options.GenerateTableQuery <MissionSet, MissionSetAzure>(expandFilter); var azureMissionSets = await _azureManager.GetEntitiesAsync(tableQuery); var missionSetsQuery = azureMissionSets.GroupBy(m => m.PartitionKey) .Select(group => ConvertToMissionSet(group.ToIList(), needExpand)); var missionSets = await Task.WhenAll(missionSetsQuery); var filteredMissionSets = missionSets.ToList().FilterCollectionPostFactum(options); return(filteredMissionSets); }