コード例 #1
0
		/// <summary>
		/// Sends feedback for a particular submission.
		/// </summary>
		private async Task<Tuple<Submission, bool>> SendSubmissionFeedbackAsync(
			Submission submission,
			string fromAddress,
			Func<Submission, string> markReadUrlBuilder)
		{
			try
			{
				await _emailProvider.SendMessageAsync
				(
					submission.Commit.User.EmailAddress,
					fromAddress,
					"CS Classroom",
					$"{submission.Checkpoint.Project.Name} {submission.Checkpoint.DisplayName} Feedback",
					$"{submission.Feedback.Replace("\n", "<br>")}<br><br><a href=\"{markReadUrlBuilder(submission)}\">Click here</a> to mark this feedback as read."
				);

				return new Tuple<Submission, bool>(submission, true);
			}
			catch (Exception ex)
			{
				_logger.LogError
				(
					0, 
					ex, 
					"Failed to send e-mail to {emailAddress}", 
					submission.Commit.User.EmailAddress
				);
				
				return new Tuple<Submission, bool>(submission, false);
			}
		}
コード例 #2
0
		/// <summary>
		/// Submits a checkpoint.
		/// </summary>
		public async Task<Submission> SubmitCheckpointAsync(
			string classroomName,
			string projectName,
			string checkpointName,
			int userId,
			int commitId)
		{
			var checkpoint = await LoadCheckpointAsync
			(
				classroomName,
				projectName,
				checkpointName
			);

			var commit = await _dbContext.Commits
				.Where(c => c.Id == commitId)
				.Where(c => c.UserId == userId)
				.Include(c => c.Project.Classroom)
				.Include(c => c.User.ClassroomMemberships)
				.Include(c => c.Build.TestResults)
				.SingleOrDefaultAsync();

			var pullRequestNumber = await _submissionCreator.CreatePullRequestAsync
			(
				commit,
				checkpoint
			);

			var submission = new Submission()
			{
				CheckpointId = checkpoint.Id,
				Checkpoint = checkpoint,
				CommitId = commit.Id,
				Commit = commit,
				DateSubmitted = _timeProvider.UtcNow,
				PullRequestNumber = pullRequestNumber
			};

			_dbContext.Submissions.Add(submission);

			await _dbContext.SaveChangesAsync();

			return submission;
		}