Example #1
0
        /// <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));
        }
Example #2
0
        protected override Task <ActionResult <LineItem> > OnAddLineItemAsync(AddLineItemRequest request)
        {
            var result = (ActionResult <LineItem>) new ObjectResult(request.LineItem);

            return(Task.FromResult(result));
        }