From af8d6b475c0040f7b96f04e3783ac8b4c702b3db Mon Sep 17 00:00:00 2001 From: RankWeis Date: Sun, 9 Mar 2025 07:37:47 -0700 Subject: [PATCH] fix(overriderules): allows every user to be added to the override rules (#1333) * fix: allows every user to be added to the override rules * chore: code cleanup * fix(overriderules): displaying more than ten users at a time * fix(overriderules): pageSize unaffected by duplicate includeIds Co-authored-by: Gauthier * fix: allows every user to be added to the override rules * chore(overriderules): readding override rules after rebase * chore(overriderules): removing empty file * chore(overriderules): fixing bad merge --------- Co-authored-by: Gauthier --- jellyseerr-api.yml | 5 ++++ server/routes/user/index.ts | 14 ++++++++++- src/components/Selector/index.tsx | 5 +++- .../OverrideRule/OverrideRuleTiles.tsx | 24 +++++++++---------- 4 files changed, 34 insertions(+), 14 deletions(-) diff --git a/jellyseerr-api.yml b/jellyseerr-api.yml index 0bbe7ffb7..00b095968 100644 --- a/jellyseerr-api.yml +++ b/jellyseerr-api.yml @@ -3812,6 +3812,11 @@ paths: required: false schema: type: string + - in: query + name: includeIds + required: false + schema: + type: string responses: '200': description: A JSON array of all users diff --git a/server/routes/user/index.ts b/server/routes/user/index.ts index c9bc98341..568124f7f 100644 --- a/server/routes/user/index.ts +++ b/server/routes/user/index.ts @@ -32,7 +32,14 @@ const router = Router(); router.get('/', async (req, res, next) => { try { - const pageSize = req.query.take ? Number(req.query.take) : 10; + const includeIds = [ + ...new Set( + req.query.includeIds ? req.query.includeIds.toString().split(',') : [] + ), + ]; + const pageSize = req.query.take + ? Number(req.query.take) + : Math.max(10, includeIds.length); const skip = req.query.skip ? Number(req.query.skip) : 0; const q = req.query.q ? req.query.q.toString().toLowerCase() : ''; let query = getRepository(User).createQueryBuilder('user'); @@ -44,6 +51,10 @@ router.get('/', async (req, res, next) => { ); } + if (includeIds.length > 0) { + query.andWhereInIds(includeIds); + } + switch (req.query.sort) { case 'updated': query = query.orderBy('user.updatedAt', 'DESC'); @@ -84,6 +95,7 @@ router.get('/', async (req, res, next) => { const [users, userCount] = await query .take(pageSize) .skip(skip) + .distinct(true) .getManyAndCount(); return res.status(200).json({ diff --git a/src/components/Selector/index.tsx b/src/components/Selector/index.tsx index 2098c935a..5676c7946 100644 --- a/src/components/Selector/index.tsx +++ b/src/components/Selector/index.tsx @@ -578,7 +578,10 @@ export const UserSelector = ({ const users = defaultValue.split(','); - const res = await fetch(`/api/v1/user`); + const res = await fetch( + `/api/v1/user?includeIds=${encodeURIComponent(defaultValue)}` + ); + if (!res.ok) { throw new Error('Network response was not ok'); } diff --git a/src/components/Settings/OverrideRule/OverrideRuleTiles.tsx b/src/components/Settings/OverrideRule/OverrideRuleTiles.tsx index a3b9aa377..8b2acaf67 100644 --- a/src/components/Settings/OverrideRule/OverrideRuleTiles.tsx +++ b/src/components/Settings/OverrideRule/OverrideRuleTiles.tsx @@ -127,18 +127,18 @@ const OverrideRuleTiles = ({ }) ); setKeywords(keywords); - const users = await Promise.all( - rules - .map((rule) => rule.users?.split(',')) - .flat() - .filter((userId) => userId) - .map(async (userId) => { - const res = await fetch(`/api/v1/user/${userId}`); - if (!res.ok) throw new Error(); - const user: User = await res.json(); - return user; - }) - ); + const allUsersFromRules = rules + .map((rule) => rule.users) + .filter((users) => users) + .join(','); + if (allUsersFromRules) { + const res = await fetch( + `/api/v1/user?includeIds=${encodeURIComponent(allUsersFromRules)}` + ); + if (!res.ok) throw new Error(); + const users: User[] = (await res.json()).results; + setUsers(users); + } setUsers(users); })(); }, [rules]);