-
Notifications
You must be signed in to change notification settings - Fork 22
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Just ensuring uniqueness in the prefs #4072
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change | ||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
@@ -54,35 +54,66 @@ const validateUserAndGroup = async (tenant, userId, groupId, next) => { | |||||||||||||||||||||||
const prepareUpdate = (body, fieldsToUpdate, fieldsToAddToSet) => { | ||||||||||||||||||||||||
const update = { ...body }; | ||||||||||||||||||||||||
|
||||||||||||||||||||||||
// Utility function to remove duplicates based on _id | ||||||||||||||||||||||||
const removeDuplicates = (arr, idField = "_id") => { | ||||||||||||||||||||||||
return arr.filter( | ||||||||||||||||||||||||
(item, index, self) => | ||||||||||||||||||||||||
index === | ||||||||||||||||||||||||
self.findIndex( | ||||||||||||||||||||||||
(t) => | ||||||||||||||||||||||||
t[idField] && | ||||||||||||||||||||||||
item[idField] && | ||||||||||||||||||||||||
t[idField].toString() === item[idField].toString() | ||||||||||||||||||||||||
) | ||||||||||||||||||||||||
); | ||||||||||||||||||||||||
}; | ||||||||||||||||||||||||
|
||||||||||||||||||||||||
// Handle fields that should be added to set (array fields) | ||||||||||||||||||||||||
fieldsToAddToSet.forEach((field) => { | ||||||||||||||||||||||||
if (update[field]) { | ||||||||||||||||||||||||
update["$addToSet"] = update["$addToSet"] || {}; | ||||||||||||||||||||||||
update["$addToSet"][field] = { | ||||||||||||||||||||||||
$each: Array.isArray(update[field]) ? update[field] : [update[field]], | ||||||||||||||||||||||||
}; | ||||||||||||||||||||||||
const processedArray = Array.isArray(update[field]) | ||||||||||||||||||||||||
? update[field] | ||||||||||||||||||||||||
: [update[field]]; | ||||||||||||||||||||||||
|
||||||||||||||||||||||||
// Remove duplicates for specific fields | ||||||||||||||||||||||||
const uniqueArray = | ||||||||||||||||||||||||
field === "selected_sites" | ||||||||||||||||||||||||
? removeDuplicates(processedArray) | ||||||||||||||||||||||||
: processedArray; | ||||||||||||||||||||||||
|
||||||||||||||||||||||||
update["$set"] = update["$set"] || {}; | ||||||||||||||||||||||||
update["$set"][field] = uniqueArray; | ||||||||||||||||||||||||
delete update[field]; | ||||||||||||||||||||||||
} | ||||||||||||||||||||||||
}); | ||||||||||||||||||||||||
|
||||||||||||||||||||||||
// Handle fields that need special processing (with createdAt) | ||||||||||||||||||||||||
fieldsToUpdate.forEach((field) => { | ||||||||||||||||||||||||
if (update[field]) { | ||||||||||||||||||||||||
update[field] = update[field].map((item) => ({ | ||||||||||||||||||||||||
// Process each item | ||||||||||||||||||||||||
const processedArray = update[field].map((item) => ({ | ||||||||||||||||||||||||
...item, | ||||||||||||||||||||||||
createdAt: item.createdAt || new Date(), | ||||||||||||||||||||||||
})); | ||||||||||||||||||||||||
|
||||||||||||||||||||||||
update["$addToSet"] = update["$addToSet"] || {}; | ||||||||||||||||||||||||
update["$addToSet"][field] = { $each: update[field] }; | ||||||||||||||||||||||||
// Remove duplicates for specific fields | ||||||||||||||||||||||||
const uniqueArray = | ||||||||||||||||||||||||
field === "selected_sites" | ||||||||||||||||||||||||
? removeDuplicates(processedArray) | ||||||||||||||||||||||||
: processedArray; | ||||||||||||||||||||||||
|
||||||||||||||||||||||||
update["$set"] = update["$set"] || {}; | ||||||||||||||||||||||||
update["$set"][field] = uniqueArray; | ||||||||||||||||||||||||
Comment on lines
+100
to
+106
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🛠️ Refactor suggestion Ensure Consistent Duplicate Removal Across Fields Similarly, in the processing of Modify the code as follows: - const uniqueArray =
- field === "selected_sites"
- ? removeDuplicates(processedArray)
- : processedArray;
+ const uniqueArray = removeDuplicates(processedArray); 📝 Committable suggestion
Suggested change
|
||||||||||||||||||||||||
delete update[field]; | ||||||||||||||||||||||||
} | ||||||||||||||||||||||||
}); | ||||||||||||||||||||||||
|
||||||||||||||||||||||||
// Remove simple ObjectId fields from being processed by $addToSet | ||||||||||||||||||||||||
// Process single ObjectId fields | ||||||||||||||||||||||||
const singleObjectIdFields = ["user_id", "group_id"]; | ||||||||||||||||||||||||
singleObjectIdFields.forEach((field) => { | ||||||||||||||||||||||||
if (update[field]) { | ||||||||||||||||||||||||
// Ensure single ObjectId fields are processed as-is | ||||||||||||||||||||||||
update[field] = update[field]; | ||||||||||||||||||||||||
Comment on lines
+115
to
+116
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Remove Redundant Self-Assignment At line 116, Apply this diff to remove the redundant code: - const singleObjectIdFields = ["user_id", "group_id"];
- singleObjectIdFields.forEach((field) => {
- if (update[field]) {
- // Ensure single ObjectId fields are processed as-is
- update[field] = update[field];
- }
- }); If specific processing is intended for
🧰 Tools🪛 Biome (1.9.4)[error] 116-116: field is assigned to itself. This is where is assigned. (lint/correctness/noSelfAssign) |
||||||||||||||||||||||||
} | ||||||||||||||||||||||||
}); | ||||||||||||||||||||||||
|
||||||||||||||||||||||||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🛠️ Refactor suggestion
Inconsistent Use of Duplicate Removal
In the
prepareUpdate
function, theremoveDuplicates
function is applied only to"selected_sites"
infieldsToAddToSet
. If other fields may contain duplicates, consider applying the duplicate removal to all relevant fields for consistency.Update the code as follows:
📝 Committable suggestion