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