public async Task <IActionResult> Edit(int pid, int tid, TestcaseUploadModel model) { try { var last = await Store.FindAsync(pid, tid); if (last == null) { return(NotFound()); } (byte[], string)? input = null, output = null; if (model.InputContent != null) { input = await model.InputContent.ReadAsync(); } if (model.OutputContent != null) { output = await model.OutputContent.ReadAsync(); } if (input.HasValue) { last.Md5sumInput = input.Value.Item2; last.InputLength = input.Value.Item1.Length; await Problems.WriteFileAsync(Problem, $"t{tid}.in", input.Value.Item1); } if (output.HasValue) { last.Md5sumOutput = output.Value.Item2; last.OutputLength = output.Value.Item1.Length; await Problems.WriteFileAsync(Problem, $"t{tid}.out", output.Value.Item1); } last.Description = model.Description ?? last.Description; last.IsSecret = model.IsSecret; last.Point = model.Point; await Store.UpdateAsync(last); await HttpContext.AuditAsync("modified", $"{last.TestcaseId}"); StatusMessage = $"Testcase t{tid} updated successfully."; return(RedirectToAction(nameof(Testcases))); } catch (Exception ex) { return(Message( "Testcase Upload", "Upload failed. Please contact XiaoYang. " + ex, MessageType.Danger)); } }
public async Task <IActionResult> Create(int pid, TestcaseUploadModel model) { if (model.InputContent == null) { return(Message("Create testcase", "No input file specified.", MessageType.Danger)); } if (model.OutputContent == null) { return(Message("Create testcase", "No output file specified.", MessageType.Danger)); } try { var input = await model.InputContent.ReadAsync(); var output = await model.OutputContent.ReadAsync(); int rk = await Store.CountAsync(Problem); var e = await Store.CreateAsync(new Testcase { Description = model.Description ?? "1", IsSecret = model.IsSecret, Point = model.Point, Md5sumInput = input.Item2, Md5sumOutput = output.Item2, InputLength = input.Item1.Length, OutputLength = output.Item1.Length, ProblemId = pid, Rank = rk + 1 }); int tid = e.TestcaseId; await Problems.WriteFileAsync(Problem, $"t{tid}.in", input.Item1); await Problems.WriteFileAsync(Problem, $"t{tid}.out", output.Item1); await HttpContext.AuditAsync("modified", $"{tid}"); StatusMessage = $"Testcase t{tid} created successfully."; return(RedirectToAction(nameof(Testcases))); } catch (Exception ex) { return(Message( "Testcase Upload", "Upload failed. Please contact XiaoYang. " + ex, MessageType.Danger)); } }
public async Task <IActionResult> Edit( int pid, int tid, TestcaseUploadModel model, [FromServices] UserManager userManager) { try { var last = await DbContext.Testcases .Where(t => t.TestcaseId == tid && t.ProblemId == pid) .FirstOrDefaultAsync(); if (last == null) { return(NotFound()); } (byte[], string)? input = null, output = null; if (model.InputContent != null) { input = await model.InputContent.ReadAsync(); } if (model.OutputContent != null) { output = await model.OutputContent.ReadAsync(); } if (input.HasValue) { last.Md5sumInput = input.Value.Item2; last.InputLength = input.Value.Item1.Length; await IoContext.WriteBinaryAsync($"p{pid}", $"t{tid}.in", input.Value.Item1); } if (output.HasValue) { last.Md5sumOutput = output.Value.Item2; last.OutputLength = output.Value.Item1.Length; await IoContext.WriteBinaryAsync($"p{pid}", $"t{tid}.out", output.Value.Item1); } last.Description = model.Description ?? last.Description; last.IsSecret = model.IsSecret; last.Point = model.Point; DbContext.Testcases.Update(last); DbContext.AuditLogs.Add(new AuditLog { UserName = userManager.GetUserName(User), ContestId = 0, Resolved = true, Time = DateTimeOffset.Now, Type = AuditLog.TargetType.Testcase, Comment = "modified", EntityId = last.TestcaseId, }); await DbContext.SaveChangesAsync(); StatusMessage = $"Testcase t{tid} updated successfully."; return(RedirectToAction(nameof(Testcases))); } catch (Exception ex) { return(Message( "Testcase Upload", "Upload failed. Please contact XiaoYang. " + ex, MessageType.Danger)); } }
public async Task <IActionResult> Create( int pid, TestcaseUploadModel model, [FromServices] UserManager userManager) { if (model.InputContent == null) { return(Message("Create testcase", "No input file specified.", MessageType.Danger)); } if (model.OutputContent == null) { return(Message("Create testcase", "No output file specified.", MessageType.Danger)); } try { var input = await model.InputContent.ReadAsync(); var output = await model.OutputContent.ReadAsync(); int rk = await DbContext.Testcases .Where(p => p.ProblemId == pid) .CountAsync(); var e = DbContext.Testcases.Add(new Testcase { Description = model.Description ?? "1", IsSecret = model.IsSecret, Point = model.Point, Md5sumInput = input.Item2, Md5sumOutput = output.Item2, InputLength = input.Item1.Length, OutputLength = output.Item1.Length, ProblemId = pid, Rank = rk + 1 }); await DbContext.SaveChangesAsync(); int tid = e.Entity.TestcaseId; DbContext.AuditLogs.Add(new AuditLog { UserName = userManager.GetUserName(User), ContestId = 0, Resolved = true, Time = DateTimeOffset.Now, Type = AuditLog.TargetType.Testcase, Comment = "modified", EntityId = tid, }); await IoContext.WriteBinaryAsync($"p{pid}", $"t{tid}.in", input.Item1); await IoContext.WriteBinaryAsync($"p{pid}", $"t{tid}.out", output.Item1); await DbContext.SaveChangesAsync(); StatusMessage = $"Testcase t{tid} created successfully."; return(RedirectToAction(nameof(Testcases))); } catch (Exception ex) { return(Message( "Testcase Upload", "Upload failed. Please contact XiaoYang. " + ex, MessageType.Danger)); } }