コード例 #1
0
        public async Task <IActionResult> UploadCode([FromBody] CodeUploadRequest codeUpload)
        {
            var user = await GetCurrentUser();

            var upload     = new Upload();
            var uploadData = new UploadData();

            var task = await _context.Tasks
                       .Include(t => t.Languages)
                       .Include(t => t.Tests)
                       .Include(t => t.Checker)
                       .SingleOrDefaultAsync(t => t.Id == codeUpload.TaskId);

            if (task == null)
            {
                ModelState.AddModelError(nameof(codeUpload.TaskId), "Task not found");
                return(BadRequest(ModelState));
            }

            upload.Task   = task;
            upload.TaskId = codeUpload.TaskId;
            upload.UserId = user.Id;
            upload.User   = user;

            if (!await _accessService.CanAdd(upload, user))
            {
                return(Forbid());
            }

            var language = await _context.Languages.FindAsync(codeUpload.LanguageId);

            if (language == null || task.Languages.All(l => l.LanguageId != codeUpload.LanguageId))
            {
                ModelState.AddModelError(nameof(codeUpload.LanguageId), "Language not found");
                return(BadRequest(ModelState));
            }

            upload.Language        = language;
            upload.Points          = 0;
            upload.LanguageId      = codeUpload.LanguageId;
            upload.UploadDate      = DateTime.Now;
            upload.Status          = UploadStatus.New;
            upload.TestingFinished = false;

            _context.Uploads.Add(upload);
            await _context.SaveChangesAsync();

            uploadData.Id   = upload.Id;
            uploadData.Code = codeUpload.Code;

            _uploadDataRepository.Add(uploadData);

            _ = _testingService.AddToTestingQueue(upload);
            return(Ok(upload.Id));
        }
コード例 #2
0
        internal void GenerateCodeUploads()
        {
            var codeUpload = new CodeUploadRequest
            {
                Id         = Guid.NewGuid(),
                Code       = "code",
                TaskId     = _task.Id,
                LanguageId = _language.Id
            };

            _codeUpload = codeUpload;
        }