public async Task <ActionResult <CustomPagedResponse <Problemset.ProblemSummary> > > List(
            [FromRoute][BindRequired][ModelBinder(Name = "problemsetId")] Problemset problemset
            )
        {
            var problems = await problemset.GetProblems();

            return(new CustomPagedResponse <Problemset.ProblemSummary>(problems));
        }
        public async Task <ActionResult <CustomResponse> > Add(
            [FromRoute][BindRequired][ModelBinder(Name = "problemsetId")] Problemset problemset,
            [FromBody] AddProblemRequest request
            )
        {
            var problem = await objectService.GetObject(dbContext, request.ProblemId) as IProblem;

            if (problem == null)
            {
                ModelState.AddModelError("ProblemId", "Problem does not exist.");
                return(BadRequest(ModelState));
            }
            await problemset.AddProblem(problem, request.Identifier);

            return(new CustomResponse());
        }
        public async Task <ActionResult <CustomResponse <Guid> > > Submit(
            [FromServices] IObjectService objectService,
            [FromServices] ApplicationDbContext dbContext,
            [FromRoute][BindRequired][ModelBinder(Name = "problemsetId")] Problemset problemset,
            [FromBody] SubmitRequest request
            )
        {
            var id = await problemset.Submit(request.EntryId, request.Token);

            if (!id.HasValue)
            {
                ModelState.AddModelError("", "Invalid EntryId or Token.");
                return(BadRequest(ModelState));
            }
            return(new CustomResponse <Guid>(id.Value));
        }
        public async Task <ActionResult <CustomResponse <SubmissionViewResponse> > > SubmissionView(
            [FromRoute][BindRequired][ModelBinder(Name = "problemsetId")] Problemset problemset,
            [FromRoute][BindRequired] Guid entryId
            )
        {
            var content = await problemset.GetSubmissionContent(entryId);

            if (content == null)
            {
                ModelState.AddModelError("entryId", "Submission with specified entryId does not exist.");
                return(BadRequest(ModelState));
            }
            return(new CustomResponse <SubmissionViewResponse>(new SubmissionViewResponse()
            {
                Content = content
            }));
        }
        public async Task <ActionResult <CustomResponse <ViewResponse> > > View(
            [FromRoute][BindRequired][ModelBinder(Name = "problemsetId")] Problemset problemset,
            [FromRoute] string id
            )
        {
            var entryId = await problemset.GetProblemEntryId(id);

            if (!entryId.HasValue)
            {
                ModelState.AddModelError("id", "The specified id does not exist in the problemset.");
                return(BadRequest(ModelState));
            }

            var content = await problemset.GetProblemContent(entryId.Value);

            return(new CustomResponse <ViewResponse>(new ViewResponse()
            {
                EntryId = entryId.Value,
                Content = content
            }));
        }