Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
19 changes: 17 additions & 2 deletions src/controllers/prAnalytics/weeklyGradingController.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
// Helper function to normalize prNumbers for comparison
const normalizePrNumbers = (prNumbers) => prNumbers.replace(/\s+/g, ' ').trim();
// Helper function to normalize prNumbers for comparison (removes all whitespace)
const normalizePrNumbers = (prNumbers) => prNumbers.replace(/\s+/g, '');

// Helper function to validate prNumbers regex
const validatePrNumbers = (prNumbers) => {
Expand Down Expand Up @@ -27,6 +27,19 @@ const validateGradedPr = (gradedPr) => {
}
};

const checkForDuplicatePRsInSubmission = (gradedPrs, reviewer) => {
const seenPRs = new Set();
for (const pr of gradedPrs) {
const normalized = normalizePrNumbers(pr.prNumbers);
if (seenPRs.has(normalized)) {
throw new Error(
`Duplicate PR number "${pr.prNumbers}" found in submission for reviewer: ${reviewer}`,
);
}
seenPRs.add(normalized);
}
};

// Validate a single grading entry
const validateGradingEntry = (grading) => {
const { reviewer, prsReviewed, prsNeeded, gradedPrs } = grading;
Expand All @@ -41,6 +54,8 @@ const validateGradingEntry = (grading) => {
}

gradedPrs.forEach(validateGradedPr);

checkForDuplicatePRsInSubmission(gradedPrs, reviewer);
};

// Merge gradedPrs from request with existing gradedPrs
Expand Down
Loading