fix: Rename getCards inputs for consistency

This commit is contained in:
Maksim Eltyshev
2025-11-27 18:41:50 +01:00
parent bf2ab4649e
commit 26b3cffdab
3 changed files with 28 additions and 31 deletions
+2 -2
View File
@@ -40,8 +40,8 @@ export function* fetchCards(listId) {
try { try {
response.body = yield call(request, api.getCards, listId, { response.body = yield call(request, api.getCards, listId, {
search: (search && search.trim()) || undefined, search: (search && search.trim()) || undefined,
filterUserIds: filterUserIds.length > 0 ? filterUserIds.join(',') : undefined, userIds: filterUserIds.length > 0 ? filterUserIds.join(',') : undefined,
filterLabelIds: filterLabelIds.length > 0 ? filterLabelIds.join(',') : undefined, labelIds: filterLabelIds.length > 0 ? filterLabelIds.join(',') : undefined,
before: lastCard || undefined, before: lastCard || undefined,
}); });
} catch (error) { } catch (error) {
+11 -11
View File
@@ -35,14 +35,14 @@
* type: string * type: string
* maxLength: 128 * maxLength: 128
* example: bug fix * example: bug fix
* - name: filterUserIds * - name: userIds
* in: query * in: query
* required: false * required: false
* description: Comma-separated user IDs to filter by members * description: Comma-separated user IDs to filter by members or task assignees
* schema: * schema:
* type: string * type: string
* example: 1357158568008091265,1357158568008091266 * example: 1357158568008091265,1357158568008091266
* - name: filterLabelIds * - name: labelIds
* in: query * in: query
* required: false * required: false
* description: Comma-separated label IDs to filter by labels * description: Comma-separated label IDs to filter by labels
@@ -179,8 +179,8 @@ module.exports = {
isNotEmptyString: true, isNotEmptyString: true,
maxLength: 128, maxLength: 128,
}, },
filterUserIds: idsInput, userIds: idsInput,
filterLabelIds: idsInput, labelIds: idsInput,
}, },
exits: { exits: {
@@ -215,31 +215,31 @@ module.exports = {
} }
let filterUserIds; let filterUserIds;
if (inputs.filterUserIds) { if (inputs.userIds) {
const boardMemberships = await BoardMembership.qm.getByBoardId(list.boardId); const boardMemberships = await BoardMembership.qm.getByBoardId(list.boardId);
const availableUserIdsSet = new Set( const availableUserIdsSet = new Set(
sails.helpers.utils.mapRecords(boardMemberships, 'userId'), sails.helpers.utils.mapRecords(boardMemberships, 'userId'),
); );
filterUserIds = _.uniq(inputs.filterUserIds.split(',')); filterUserIds = _.uniq(inputs.userIds.split(','));
filterUserIds = filterUserIds.filter((userId) => availableUserIdsSet.has(userId)); filterUserIds = filterUserIds.filter((userId) => availableUserIdsSet.has(userId));
} }
let filterLabelIds; let filterLabelIds;
if (inputs.filterLabelIds) { if (inputs.labelIds) {
const labels = await Label.qm.getByBoardId(list.boardId); const labels = await Label.qm.getByBoardId(list.boardId);
const availableLabelIdsSet = new Set(sails.helpers.utils.mapRecords(labels)); const availableLabelIdsSet = new Set(sails.helpers.utils.mapRecords(labels));
filterLabelIds = _.uniq(inputs.filterLabelIds.split(',')); filterLabelIds = _.uniq(inputs.labelIds.split(','));
filterLabelIds = filterLabelIds.filter((labelId) => availableLabelIdsSet.has(labelId)); filterLabelIds = filterLabelIds.filter((labelId) => availableLabelIdsSet.has(labelId));
} }
const cards = await Card.qm.getByEndlessListId(list.id, { const cards = await Card.qm.getByEndlessListId(list.id, {
filterUserIds,
filterLabelIds,
before: inputs.before, before: inputs.before,
search: inputs.search, search: inputs.search,
userIds: filterUserIds,
labelIds: filterLabelIds,
}); });
const cardIds = sails.helpers.utils.mapRecords(cards); const cardIds = sails.helpers.utils.mapRecords(cards);
+15 -18
View File
@@ -12,28 +12,25 @@ const defaultFind = (criteria, { sort = 'id', limit } = {}) =>
/* Query methods */ /* Query methods */
const getIdsByEndlessListId = async ( const getIdsByEndlessListId = async (listId, { before, search, userIds, labelIds } = {}) => {
listId, if (userIds && userIds.length === 0) {
{ before, search, filterUserIds, filterLabelIds } = {},
) => {
if (filterUserIds && filterUserIds.length === 0) {
return []; return [];
} }
if (filterLabelIds && filterLabelIds.length === 0) { if (labelIds && labelIds.length === 0) {
return []; return [];
} }
const queryValues = []; const queryValues = [];
let query = 'SELECT DISTINCT card.id FROM card'; let query = 'SELECT DISTINCT card.id FROM card';
if (filterUserIds) { if (userIds) {
query += ' LEFT JOIN card_membership ON card.id = card_membership.card_id'; query += ' LEFT JOIN card_membership ON card.id = card_membership.card_id';
query += ' LEFT JOIN task_list ON card.id = task_list.card_id'; query += ' LEFT JOIN task_list ON card.id = task_list.card_id';
query += ' LEFT JOIN task ON task_list.id = task.task_list_id'; query += ' LEFT JOIN task ON task_list.id = task.task_list_id';
} }
if (filterLabelIds) { if (labelIds) {
query += ' LEFT JOIN card_label ON card.id = card_label.card_id'; query += ' LEFT JOIN card_label ON card.id = card_label.card_id';
} }
@@ -66,18 +63,18 @@ const getIdsByEndlessListId = async (
} }
} }
if (filterUserIds) { if (userIds) {
const inValues = filterUserIds.map((filterUserId) => { const inValues = userIds.map((userId) => {
queryValues.push(filterUserId); queryValues.push(userId);
return `$${queryValues.length}`; return `$${queryValues.length}`;
}); });
query += ` AND (card_membership.user_id IN (${inValues.join(', ')}) OR task.assignee_user_id IN (${inValues.join(', ')}))`; query += ` AND (card_membership.user_id IN (${inValues.join(', ')}) OR task.assignee_user_id IN (${inValues.join(', ')}))`;
} }
if (filterLabelIds) { if (labelIds) {
const inValues = filterLabelIds.map((filterLabelId) => { const inValues = labelIds.map((labelId) => {
queryValues.push(filterLabelId); queryValues.push(labelId);
return `$${queryValues.length}`; return `$${queryValues.length}`;
}); });
@@ -126,19 +123,19 @@ const getByListId = async (listId, { exceptIdOrIds, sort = ['position', 'id'] }
return defaultFind(criteria, { sort }); return defaultFind(criteria, { sort });
}; };
const getByEndlessListId = async (listId, { before, search, filterUserIds, filterLabelIds }) => { const getByEndlessListId = async (listId, { before, search, userIds, labelIds }) => {
const criteria = {}; const criteria = {};
const options = { const options = {
sort: ['listChangedAt DESC', 'id DESC'], sort: ['listChangedAt DESC', 'id DESC'],
}; };
if (search || filterUserIds || filterLabelIds) { if (search || userIds || labelIds) {
criteria.id = await getIdsByEndlessListId(listId, { criteria.id = await getIdsByEndlessListId(listId, {
before, before,
search, search,
filterUserIds, userIds,
filterLabelIds, labelIds,
}); });
} else { } else {
criteria.and = [{ listId }]; criteria.and = [{ listId }];