Example #1
0
        public async Task <IActionResult> Post([FromBody] Group userInputGroup)
        {
            // requestor is a group administration and can create groups
            if (!(await _securityHelper.IsGroupAdmin()))
            {
                return(new HttpStatusCodeResult(403)); // Forbidden;
            }
            //TODO: group parameter validation

            // get current user
            var currentUser = await _securityHelper.GetOrCreateCurrentUser();

            // build the resource group object
            var group = new ScampResourceGroup()
            {
                Id          = Guid.NewGuid().ToString(),
                Name        = userInputGroup.Name,
                Description = userInputGroup.Description,
                Budget      = new ScampGroupBudget()
                {
                    OwnerId               = currentUser.Id,
                    OwnerName             = currentUser.Name,
                    unitsBudgeted         = userInputGroup.Budget.unitsBudgeted,
                    DefaultUserAllocation = userInputGroup.Budget.defaultUserBudget,
                    EndDate               = userInputGroup.Budget.expiryDate
                }
            };

            await _groupRepository.CreateGroup(group);

            // after we know the user docs have completed successfully, add the volatile storage records
            Task[] tasks = new Task[2]; // collection to hold the parallel tasks

            // create group volatile storage entries
            var newGrpBudget = new GroupBudgetState(group.Id)
            {
                UnitsBudgetted = userInputGroup.Budget.unitsBudgeted,
                UnitsAllocated = userInputGroup.Budget.defaultUserBudget,
                UnitsUsed      = 0
            };

            tasks[0] = _volatileStorageController.AddGroupBudgetState(newGrpBudget);

            // create volatile storage budget entry for user/group
            var newUsrBudget = new UserBudgetState(currentUser.Id, group.Id)
            {
                UnitsBudgetted = group.Budget.DefaultUserAllocation,
                UnitsUsed      = 0
            };

            tasks[1] = _volatileStorageController.AddUserBudgetState(newUsrBudget);

            // wait for both operations to complete
            Task.WaitAll(tasks);

            return(new ObjectResult(Map(group))
            {
                StatusCode = 200
            });
        }
Example #2
0
 private Group Map(ScampResourceGroup docDbGroup)
 {
     return(new Group
     {
         Id = docDbGroup.Id,
         Name = docDbGroup.Name,
         Description = docDbGroup.Description,
         Templates = new List <GroupTemplateSummary>(), // TODO map these when the repo supports them
         Users = docDbGroup.Members?.Select(MapToSummary).ToList(),
         Budget = Map(docDbGroup.Budget)
     });
 }
Example #3
0
        public async Task UpdateGroup(string groupID, ScampResourceGroup group)
        {
            if (!(await docdb.IsInitialized))
            {
                return;
            }

            var query = docdb.Client.CreateDocumentQuery(docdb.Collection.SelfLink)
                        .Where(d => d.Id == groupID);
            var document = await query.AsDocumentQuery().FirstOrDefaultAsync();

            await docdb.Client.ReplaceDocumentAsync(document.SelfLink, group);
        }
Example #4
0
        public async Task CreateGroup(ScampResourceGroup newGroup)
        {
            if (!(await docdb.IsInitialized))
            {
                return;
            }

            try
            {
                StoredProcedure sproc = docdb.Client.CreateStoredProcedureQuery(docdb.Collection.SelfLink)
                                        .Where(s => s.Id == "CreateGroup").AsEnumerable().FirstOrDefault();

                await docdb.Client.ExecuteStoredProcedureAsync <dynamic>(sproc.SelfLink, newGroup);
            }
            catch (Exception ex)
            {
                //TODO: log issue
                throw;
            }
        }
Example #5
0
        public async Task <IActionResult> Put(string groupId, [FromBody] Group value)
        {
            ScampUser currentUser = await _securityHelper.GetOrCreateCurrentUser();

            ScampResourceGroup group = await _groupRepository.GetGroup(groupId);

            // Only the group budget owner can edit the group information
            if (group.Budget.OwnerId == currentUser.Id)
            {
                await _groupRepository.UpdateGroup(groupId, new ScampResourceGroup
                {
                    Members = value.Users.ConvertAll((a => new ScampUserGroupMbrship()
                    {
                        Id = a.Id,
                        Name = a.Name,
                        isManager = a.isManager
                    })),
                    Id          = value.Id,
                    Name        = value.Name,
                    Description = value.Description,
                    Budget      = new ScampGroupBudget()
                    {
                        OwnerId               = group.Budget.OwnerId,
                        OwnerName             = group.Budget.OwnerName,
                        unitsBudgeted         = value.Budget.unitsBudgeted,
                        DefaultUserAllocation = value.Budget.defaultUserBudget,
                        EndDate               = value.Budget.expiryDate
                    }
                });

                return(new ObjectResult(value)
                {
                    StatusCode = 200
                });
            }
            else
            {
                return(new HttpStatusCodeResult(403));
            }
        }
Example #6
0
        public async Task CreateGroup(ScampResourceGroup newGroup)
        {
            if (!(await docdb.IsInitialized))
                return;

            try
            {
                StoredProcedure sproc = docdb.Client.CreateStoredProcedureQuery(docdb.Collection.SelfLink)
                    .Where(s => s.Id == "CreateGroup").AsEnumerable().FirstOrDefault();

                await docdb.Client.ExecuteStoredProcedureAsync<dynamic>(sproc.SelfLink, newGroup);
            }
            catch (Exception ex)
            {
                //TODO: log issue
                throw;
            }

        }
Example #7
0
        public async Task UpdateGroup(string groupID, ScampResourceGroup group)
        {

            if (!(await docdb.IsInitialized))
                return;

            var query = docdb.Client.CreateDocumentQuery(docdb.Collection.SelfLink)
                .Where(d => d.Id == groupID);
            var document = await query.AsDocumentQuery().FirstOrDefaultAsync();
			await docdb.Client.ReplaceDocumentAsync(document.SelfLink, group);
        }