public async Task <IActionResult> Get(string userId, string view) { //TODO: authorization check // get requested user document ScampUser userDoc = await _userRepository.GetUserById(userId); if (userDoc == null) { return(HttpNotFound()); } // get user usage across all resources List <UserBudgetState> usrBudgets = await _volatileStorageController.GetUserBudgetStates(userId); if (view == "summary") { UserUsageSummary tmpUserSummary = new UserUsageSummary() { totGroups = userDoc.GroupMembership.Count() }; // summarize resource usage foreach (var rscBudget in usrBudgets) { tmpUserSummary.unitsBudgeted += rscBudget.UnitsBudgetted; tmpUserSummary.totUnitsUsed += rscBudget.UnitsUsed; } return(new ObjectResult(tmpUserSummary) { StatusCode = 200 }); } else { return(new ObjectResult(string.Format("view '{0}' not supported", view)) { StatusCode = 400 }); } }
public async Task <IActionResult> Get(string userId, string view) { // get requested user document ScampUser userDoc = await _userRepository.GetUserById(userId); if (userDoc == null) { return(HttpNotFound()); } //TODO: authorization check // build return view if (view == "admin") // do admin view { List <ScampAdminGroupReference> rtnView = new List <ScampAdminGroupReference>(); // build return view foreach (ScampUserGroupMbrship group in userDoc.GroupMembership) { if (!(await _securityHelper.CurrentUserCanManageGroup(group.Id))) { continue; } // get group budget var groupBudget = await _volatileStorageController.GetGroupBudgetState(group.Id); // build return list item ScampAdminGroupReference tmpGroupRef = new ScampAdminGroupReference() { Id = group.Id, Name = group.Name, // be sure to handle user without a budget values totUnitsUsed = (groupBudget == null ? 0 : groupBudget.UnitsUsed), totUnitsAllocated = (groupBudget == null ? 0 : groupBudget.UnitsAllocated), totUnitsBudgeted = (groupBudget == null ? 0 : groupBudget.UnitsBudgetted) }; // add item to list rtnView.Add(tmpGroupRef); } // return results return(new ObjectResult(rtnView) { StatusCode = 200 }); } else if (view == "user") // do user view { List <ScampUserGroupReference> rtnView = new List <ScampUserGroupReference>(); // get user group budgets var groupBudgets = await _volatileStorageController.GetUserBudgetStates(userId); foreach (ScampUserGroupMbrship group in userDoc.GroupMembership) { // get group var groupBudget = groupBudgets.First(g => g.groupId == group.Id); // build return object ScampUserGroupReference tmpGroupRef = new ScampUserGroupReference() { Id = group.Id, Name = group.Name, // be sure to handle user without a budget values totUnitsUsedByUser = (groupBudget == null ? 0 : groupBudget.UnitsUsed), totUnitsRemainingForUser = (groupBudget == null ? 0 : (groupBudget.UnitsBudgetted - groupBudget.UnitsUsed)) }; rtnView.Add(tmpGroupRef); } // return document return(new ObjectResult(rtnView) { StatusCode = 200 }); } else { //TODO: invalid argument "view" } return(new ObjectResult(null) { StatusCode = 200 }); }