public async Task <IActionResult> SubmitFile(IFormFile file, int assignmentId) { AddAssignmentFileDto dto = new AddAssignmentFileDto { File = file, AssignmentId = assignmentId }; ServiceResponse <string> response = await _assignmentService.SubmitAssignmentFile(dto); if (response.Success) { return(Ok(response)); } return(NotFound(response)); }
public async Task <ServiceResponse <string> > SubmitAssignmentFile(AddAssignmentFileDto file) { ServiceResponse <string> response = new ServiceResponse <string>(); User user = await _context.Users.Include(u => u.InstructedCourses).FirstOrDefaultAsync(u => u.Id == GetUserId()); Assignment assignment = await _context.Assignments.FirstOrDefaultAsync(a => a.Id == file.AssignmentId); if (file.File == null || assignment == null) { response.Data = "No submission"; response.Message = "There is no submission under this id or you didnt provide a file to submit"; response.Success = false; return(response); } Course course = await _context.Courses.FirstOrDefaultAsync(s => s.Id == assignment.AfilliatedCourseId); if (course == null) { response.Data = "No submission"; response.Message = "There is no course under this id"; response.Success = false; return(response); } if (course.Instructors.FirstOrDefault(c => c.UserId == user.Id) == null) { response.Data = "Not allowed"; response.Message = "You are not allowed to post file for this assignment"; response.Success = false; return(response); } if (Path.GetExtension(file.File.FileName) != ".pdf") { response.Data = "Bad Request"; response.Message = "Assignments should be pdf"; response.Success = false; return(response); } var target = Path.Combine(_hostingEnvironment.ContentRootPath, string.Format("{0}/{1}/{2}", "StaticFiles/Assignments", assignment.AfilliatedCourseId, assignment.Id)); Directory.CreateDirectory(target); if (file.File.Length <= 0) { response.Success = false; } else { string oldfile = Directory.GetFiles(target).FirstOrDefault(); if (File.Exists(oldfile)) { File.Delete(oldfile); } var filePath = Path.Combine(target, string.Format("{0}_{1}", course.Name.Trim().Replace(" ", "_"), assignment.Title.Trim().Replace(" ", "_")) + ".pdf"); assignment.FilePath = filePath; using (var stream = new FileStream(filePath, FileMode.Create)) { await file.File.CopyToAsync(stream); } response.Data = target; response.Message = "file succesfully saved."; assignment.CreatedAt = DateTime.Now; assignment.HasFile = true; } _context.Assignments.Update(assignment); await _context.SaveChangesAsync(); return(response); }