public IActionResult Submit(int id)
        {
            var homework = _context.Homeworks
                           .Include(h => h.Subject)
                           .FirstOrDefault(h => h.Id == id);

            if (homework == null)
            {
                return(NotFound());
            }

            var model = new HomeworkSubmitViewModel
            {
                Id          = homework.Id,
                SubjectName = homework.Subject.Name,
                Name        = homework.Name
            };

            return(View(model));
        }
        public async Task <IActionResult> Submit([Bind("Id,Document")] HomeworkSubmitViewModel submitViewModel)
        {
            var homework = _context.Homeworks
                           .Include(h => h.Subject)
                           .FirstOrDefault(h => h.Id == submitViewModel.Id);

            if (homework == null)
            {
                return(NotFound());
            }

            if (homework.Deadline < DateTime.Now)
            {
                ModelState.AddModelError("Document", "Deadline passed");
            }
            if (!ModelState.IsValid)
            {
                submitViewModel.Name        = homework.Name;
                submitViewModel.SubjectName = homework.Subject.Name;

                return(View(submitViewModel));
            }

            var submited = await _context.SubmitedHomeworks
                           .Include(sh => sh.Document)
                           .FirstOrDefaultAsync(sh => sh.StudentId == User.GetLoggedInUserId <string>() && sh.HomeworkId == homework.Id);

            if (submited != null)
            {
                _context.SubmitedHomeworks.Remove(submited);
                _context.Documents.Remove(submited.Document);
            }

            var extension = Path.GetExtension(submitViewModel.Document.FileName);

            if (extension == null || extension.Length > 4)
            {
                return(BadRequest("Not supported file type"));
            }
            var document = new Document
            {
                Name        = $"homework_{homework.Id}_{Guid.NewGuid()}",
                ContentType = submitViewModel.Document.ContentType,
                Extension   = extension
            };

            using (var memoryStream = new MemoryStream())
            {
                await submitViewModel.Document.CopyToAsync(memoryStream);

                if (memoryStream.Length > 2097152)
                {
                    ModelState.AddModelError("File", "The file is larger than 2MB.");
                    submitViewModel.Name        = homework.Name;
                    submitViewModel.SubjectName = homework.Subject.Name;

                    return(View(submitViewModel));
                }

                document.Data = memoryStream.ToArray();
            }

            _context.Documents.Add(document);
            submited = new SubmitedHomework
            {
                StudentId  = User.GetLoggedInUserId <string>(),
                HomeworkId = homework.Id,
                Time       = DateTime.Now,
                Document   = document
            };
            _context.SubmitedHomeworks.Add(submited);

            _context.SaveChanges();
            return(RedirectToAction(nameof(Details), new { id = homework.Id }));
        }