public void SaveAssignmentLearnContent( [HttpTrigger(AuthorizationLevel.Anonymous, "post", Route = "assignments/{assignmentId}/learn-content/{contentUid}")] HttpRequest req, [Table(AssignmentLearnContentTableName)] out AssignmentLearnContentEntity assignmentLearnContentEntity, string assignmentId, string contentUid) { _logger.LogInformation($"Saving assignment learn content with uid [{contentUid}] to assignment {assignmentId}"); assignmentLearnContentEntity = new AssignmentLearnContentEntity { PartitionKey = assignmentId, RowKey = contentUid, ETag = "*" }; }
public async Task <IActionResult> RemoveAssignmentLearnContent( [HttpTrigger(AuthorizationLevel.Anonymous, "delete", Route = "assignments/{assignmentId}/learn-content/{contentUid}")] HttpRequest req, [Table(AssignmentLearnContentTableName)] CloudTable assignmentLearnContentTable, [Table(AssignmentLearnContentTableName, "{assignmentId}", "{contentUid}")] AssignmentLearnContentEntity assignmentLearnContentEntityToDelete, string assignmentId, string contentUid, [User] UsersClient usersClient) { bool isSystemCallOrUserWithValidEmail = req.Headers.TryGetUserEmails(out List <string> userEmails); if (!isSystemCallOrUserWithValidEmail) { _logger.LogError("Could not get user email."); return(new BadRequestErrorMessageResult("Could not get user email.")); } _logger.LogInformation($"Getting user information for '{string.Join(';', userEmails)}'."); if (userEmails.Count > 0) { User[] allUsers = await usersClient.GetAllUsers(assignmentId); User user = allUsers.FirstOrDefault(member => userEmails.Any(userEmail => (member.Email ?? String.Empty).Equals(userEmail))); if (user == null || !user.Role.Equals("teacher")) { return(new UnauthorizedResult()); } } if (assignmentLearnContentEntityToDelete == null) { return(new NoContentResult()); } _logger.LogInformation($"Removing assignment learn content with uid [{contentUid}] from assignment {assignmentId}"); TableOperation deleteOperation = TableOperation.Delete(assignmentLearnContentEntityToDelete); TableResult deleteResult = await assignmentLearnContentTable.ExecuteAsync(deleteOperation); if (deleteResult.HttpStatusCode < 200 || deleteResult.HttpStatusCode >= 300) { return(new InternalServerErrorResult()); } return(new OkResult()); }
public async Task <IActionResult> SaveAssignmentLearnContent( [HttpTrigger(AuthorizationLevel.Anonymous, "post", Route = "assignments/{assignmentId}/learn-content/{contentUid}")] HttpRequest req, [Table(AssignmentLearnContentTableName)] IAsyncCollector <AssignmentLearnContentEntity> learnContentCollector, string assignmentId, string contentUid, [User] UsersClient usersClient) { bool isSystemCallOrUserWithValidEmail = req.Headers.TryGetUserEmails(out List <string> userEmails); if (!isSystemCallOrUserWithValidEmail) { _logger.LogError("Could not get user email."); return(new BadRequestErrorMessageResult("Could not get user email.")); } _logger.LogInformation($"Getting user information for '{string.Join(';', userEmails)}'."); if (userEmails.Count > 0) { User[] allUsers = await usersClient.GetAllUsers(assignmentId); User user = allUsers.FirstOrDefault(member => userEmails.Any(userEmail => (member.Email ?? String.Empty).Equals(userEmail))); if (user == null || !user.Role.Equals("teacher")) { return(new UnauthorizedResult()); } } _logger.LogInformation($"Saving assignment learn content with uid [{contentUid}] to assignment {assignmentId}"); AssignmentLearnContentEntity assignmentLearnContentEntity = new AssignmentLearnContentEntity { PartitionKey = assignmentId, RowKey = contentUid, ETag = "*" }; await learnContentCollector.AddAsync(assignmentLearnContentEntity); await learnContentCollector.FlushAsync(); AssignmentLearnContentDto savedLearnContentDto = _mapper.Map <AssignmentLearnContentDto>(assignmentLearnContentEntity); string assignmentUrl = $"{req.Scheme}://{req.Host}/api/assignments/{assignmentId}/learn-content/{savedLearnContentDto.ContentUid}"; return(new CreatedResult(assignmentUrl, savedLearnContentDto)); }
public async Task <IActionResult> RemoveAssignmentLearnContent( [HttpTrigger(AuthorizationLevel.Anonymous, "delete", Route = "assignments/{assignmentId}/learn-content/{contentUid}")] HttpRequest req, [Table(AssignmentLearnContentTableName)] CloudTable assignmentLearnContentTable, [Table(AssignmentLearnContentTableName, "{assignmentId}", "{contentUid}")] AssignmentLearnContentEntity assignmentLearnContentEntityToDelete, string assignmentId, string contentUid) { _logger.LogInformation($"Removing assignment learn content with uid [{contentUid}] from assignment {assignmentId}"); TableOperation deleteOperation = TableOperation.Delete(assignmentLearnContentEntityToDelete); TableResult deleteResult = await assignmentLearnContentTable.ExecuteAsync(deleteOperation); if (deleteResult.HttpStatusCode < 200 || deleteResult.HttpStatusCode >= 300) { return(new InternalServerErrorResult()); } return(new OkResult()); }