/// <inheritdoc /> /// <summary> /// Adds a gradebook column to a course. /// </summary> /// <returns>The line item corresponding to the new gradebook column.</returns> protected override async Task <ActionResult <LineItem> > OnAddLineItemAsync(AddLineItemRequest request) { if (!int.TryParse(request.ContextId, out var contextId)) { var name = $"{nameof(request)}.{nameof(request.ContextId)}"; ModelState.AddModelError(name, $"The {name} field cannot be converted into a course id."); return(BadRequest(new ValidationProblemDetails(ModelState))); } if (!await _courseValidator.UserHasAccess(contextId)) { return(Unauthorized(new ProblemDetails { Title = "Not authorized", Detail = "User not authorized to access the requested course." })); } var course = await _context.GetCourseAsync(contextId); if (course == null) { return(NotFound(new ProblemDetails { Title = ReasonPhrases.GetReasonPhrase(StatusCodes.Status404NotFound), Detail = "Course not found" })); } // Add a gradebook column to the course var gradebookColumn = new GradebookColumn { EndDateTime = request.LineItem.EndDateTime, Label = request.LineItem.Label, ScoreMaximum = request.LineItem.ScoreMaximum, StartDateTime = request.LineItem.StartDateTime, Tag = request.LineItem.Tag }; if (request.LineItem.ResourceLinkId.IsPresent()) { if (!int.TryParse(request.LineItem.ResourceLinkId, out var resourceLinkId)) { var name = $"{nameof(request)}.{nameof(request.LineItem.ResourceLinkId)}"; ModelState.AddModelError(name, $"The {name} field cannot be converted into a resource link id."); return(BadRequest(new ValidationProblemDetails(ModelState))); } var resourceLink = await _context.GetResourceLinkAsync(resourceLinkId); if (resourceLink == null) { var name = $"{nameof(request)}.{nameof(request.LineItem)}.{request.LineItem.ResourceLinkId}"; ModelState.AddModelError(name, $"The {name} field is not a valid resource link id."); return(BadRequest(new ValidationProblemDetails(ModelState))); } gradebookColumn.ResourceLink = resourceLink; } course.GradebookColumns.Add(gradebookColumn); await _context.SaveChangesAsync(); request.LineItem.Id = Url.Link(LtiAdvantage.Constants.ServiceEndpoints.Ags.LineItemService, new { contextId = request.ContextId, lineItemId = gradebookColumn.Id }); return(Created(request.LineItem.Id, request.LineItem)); }
protected override Task <ActionResult <LineItem> > OnAddLineItemAsync(AddLineItemRequest request) { var result = (ActionResult <LineItem>) new ObjectResult(request.LineItem); return(Task.FromResult(result)); }