public static async Task <SubmissionModel> GetAsync(SubmissionMetadata metadata, HttpClient client) { SubmissionModel res = new SubmissionModel { Metadata = metadata }; try { SubmissionsClient scli = new SubmissionsClient(client); res.Result = await scli.GetResultAsync(metadata.Id); } catch { res.Result = new SubmissionResult { State = JudgeState.Pending }; } try { SubmissionsClient scli = new SubmissionsClient(client); using (FileResponse file = await scli.GetCodeAsync(metadata.Id)) using (StreamReader sr = new StreamReader(file.Stream)) res.Code = await sr.ReadToEndAsync(); } catch { res.Code = "<Loading error>."; } try { ProblemsClient pcli = new ProblemsClient(client); res.Problem = await pcli.GetAsync(metadata.ProblemId); } catch { res.Problem = new ProblemMetadata { Id = res.Metadata.ProblemId, Name = $"Not found: {res.Metadata.ProblemId}" }; } try { UsersClient ucli = new UsersClient(client); res.User = await ucli.GetAsync(metadata.UserId); } catch { res.User = new UserMetadata { Id = res.Metadata.UserId, Name = $"Not found: {res.Metadata.UserId}" }; } return(res); }
public async Task SetMetadata(SubmissionMetadata value) { _submission.Language = value.Language; _submission.ProblemId = int.Parse(value.ProblemId); _submission.Time = value.Time; _submission.UserId = int.Parse(value.UserId); _submission.CodeLength = value.CodeLength; await _context.SaveChangesAsync(); }
public async Task <ActionResult <SubmissionMetadata> > Submit([FromBody] SubmitData data) { if (await _workspace.Problems.Has(data.ProblemId) == false) { return(NotFound()); } if (await _workspace.Users.Has(data.UserId) == false) { return(NotFound()); } SubmissionMetadata meta = new SubmissionMetadata { Id = Guid.NewGuid().ToString(), ProblemId = data.ProblemId, UserId = data.UserId, Language = data.Language, Time = DateTimeOffset.Now, }; ISubmissionProvider sub = await _workspace.Submissions.Create(meta); if (sub == null) { return(Forbid()); } try { if (data.CodeFile != null) { using (System.IO.Stream s = data.CodeFile.OpenReadStream()) { meta.CodeLength = (uint)s.Length; await sub.SetCode(s); } } else { meta.CodeLength = (uint)Encoding.UTF8.GetByteCount(data.Code); using (System.IO.Stream ms = TextIO.ToStream(data.Code ?? "")) await sub.SetCode(ms); } await sub.SetMetadata(meta); SendJudgeRequest(sub.Id); return(Created($"submissions/{meta.Id}", await sub.GetMetadata())); } catch { await _workspace.Submissions.Delete(sub.Id); return(Forbid()); } }
public async Task <ActionResult <SubmissionMetadata> > Get(string id) { SubmissionMetadata res = await(await _workspace.Submissions.Get(id))?.GetMetadata(); if (res != null) { return(Ok(res)); } else { return(NotFound()); } }
public async Task <ISubmissionProvider> Create(SubmissionMetadata metadata) { Submission empty = new Submission(); _context.Submissions.Add(empty); await _context.SaveChangesAsync(); SubmissionProvider res = new SubmissionProvider(_workspace, _context, empty); Directory.CreateDirectory(res.GetRoot()); await res.SetMetadata(metadata); return(res); }