Example #1
0
        public async Task Invoke(HttpContext httpContext, IExamLogService examLogService)
        {
            var ignores = new List <string>
            {
                "/api",
                "/exams",
                "/resources"
            };

            if (!ignores.Any(
                    x => httpContext.Request.Path.StartsWithSegments(x, StringComparison.OrdinalIgnoreCase)))
            {
                try
                {
                    var guid = examLogService.GetLastExamNotFinished();
                    if (guid != null && guid != Guid.Empty)
                    {
                        var destinationUri = $"/exams/re-work/{guid}";
                        httpContext.Response.Redirect(destinationUri);
                    }
                }
                catch (Exception)
                {
                    // ignore
                }
            }

            await _next(httpContext);
        }
        public async Task <IActionResult> RenderExam(
            RenderExamTypes renderType,
            Guid destId,
            [FromQuery(Name = "instructor")] Guid?instructor)
        {
            // Check if user have other test
            var previousLogId = _ExamLogService.GetLastExamNotFinished();

            if (previousLogId != null && previousLogId != Guid.Empty)
            {
                // Ngắn chặn việc lặp lại tạo bài test
                return(Redirect($"/exams/re-work/{previousLogId}"));
            }

            var res = await _RenderExamService.GetRenderExam(renderType, destId);

            if (!res.Success || res.Data == null)
            {
                this.ToastError(res.Message);
                return(Redirect("/exams/exam-categories"));
            }

            var model = new ExamRenderViewModel();

            model.ExamContent = res.Data;

            // Lưu nhật ký bài thi lại
            model.ExamLogId = await SaveExamLogs(model.ExamContent, destId, instructor);

            if (model.ExamLogId == null || model.ExamLogId == Guid.Empty)
            {
                this.ToastError(L["Can not save your exam, please try again"]);
                return(Redirect("/exams/exam-categories"));
            }

            model = await ProcessParams(model);

            ViewBag.RenderType = res.Data.RenderExamType;

            return(View(AppTheme.ExamContainer, model));
        }