示例#1
0
        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
                });
            }
        }
示例#2
0
        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
            });
        }