1
0
Fork 0
mirror of https://github.com/plankanban/planka.git synced 2025-07-18 20:59:44 +02:00

fix: Add server-side filtering, cleanup

This commit is contained in:
Maksim Eltyshev 2025-06-16 23:13:14 +02:00
parent a5b3b4ad5b
commit 98eeb80a19
5 changed files with 29 additions and 29 deletions

View file

@ -1,4 +1,4 @@
FROM node:18-alpine AS server-dependencies FROM node:22-alpine AS server-dependencies
RUN apk -U upgrade \ RUN apk -U upgrade \
&& apk add build-base python3 --no-cache && apk add build-base python3 --no-cache
@ -7,36 +7,35 @@ WORKDIR /app
COPY server/package.json server/package-lock.json server/requirements.txt ./ COPY server/package.json server/package-lock.json server/requirements.txt ./
RUN npm install -g pnpm@latest-10 \ RUN npm install npm --global \
&& pnpm install -P && npm install --omit=dev
FROM node:lts AS client FROM node:22 AS client
WORKDIR /app WORKDIR /app
COPY client . COPY client .
RUN npm install -g pnpm@latest-10 \ RUN npm install npm --global \
&& pnpm install -P && npm install --omit=dev
RUN DISABLE_ESLINT_PLUGIN=true pnpm run build RUN DISABLE_ESLINT_PLUGIN=true npm run build
FROM node:18-alpine FROM node:22-alpine
RUN apk -U upgrade \ RUN apk -U upgrade \
&& apk add bash python3 --no-cache \ && apk add bash python3 --no-cache \
&& npm install -g pnpm@latest-10 && npm install npm --global
USER node USER node
WORKDIR /app WORKDIR /app
COPY --chown=node:node server . COPY --chown=node:node server .
RUN wget -qO- https://astral.sh/uv/install.sh | sh \ RUN python3 -m venv .venv \
&& /home/node/.local/bin/uv venv \ && .venv/bin/pip3 install -r requirements.txt --no-cache-dir \
&& /home/node/.local/bin/uv pip install -r requirements.txt --no-cache-dir \
&& mv .env.sample .env \ && mv .env.sample .env \
&& pnpm config set update-notifier false && npm config set update-notifier false
COPY --from=server-dependencies --chown=node:node /app/node_modules node_modules COPY --from=server-dependencies --chown=node:node /app/node_modules node_modules

View file

@ -470,10 +470,6 @@ export default class extends BaseModel {
}); });
} }
getTaskListsModelArray() {
return this.getTaskListsQuerySet().toModelArray();
}
getShownOnFrontOfCardTaskListsModelArray() { getShownOnFrontOfCardTaskListsModelArray() {
return this.getTaskListsQuerySet() return this.getTaskListsQuerySet()
.toModelArray() .toModelArray()

View file

@ -280,14 +280,20 @@ export default class extends BaseModel {
if (filterUserIds.length > 0) { if (filterUserIds.length > 0) {
cardModels = cardModels.filter((cardModel) => { cardModels = cardModels.filter((cardModel) => {
const users = cardModel.users.toRefArray(); const users = cardModel.users.toRefArray();
cardModel.getTaskListsModelArray().forEach((taskListModel) => {
taskListModel.getTasksModelArray().forEach((taskModel) => { if (users.some((user) => filterUserIds.includes(user.id))) {
if (filterUserIds.includes(taskModel.assigneeUserId)) { return true;
users.push(taskModel.user);
} }
});
}); return cardModel
return users.some((user) => filterUserIds.includes(user.id)); .getTaskListsQuerySet()
.toModelArray()
.some((taskListModel) =>
taskListModel
.getTasksQuerySet()
.toRefArray()
.some((task) => filterUserIds.includes(task.assigneeUserId)),
);
}); });
} }

View file

@ -100,10 +100,6 @@ export default class extends BaseModel {
return this.tasks.orderBy(['position', 'id.length', 'id']); return this.tasks.orderBy(['position', 'id.length', 'id']);
} }
getTasksModelArray() {
return this.getTasksQuerySet().toModelArray();
}
duplicate(id, data, rootId) { duplicate(id, data, rootId) {
if (rootId === undefined) { if (rootId === undefined) {
rootId = id; // eslint-disable-line no-param-reassign rootId = id; // eslint-disable-line no-param-reassign

View file

@ -29,6 +29,8 @@ const getIdsByEndlessListId = async (
if (filterUserIds) { if (filterUserIds) {
query += ' JOIN card_membership ON card.id = card_membership.card_id'; query += ' JOIN card_membership ON card.id = card_membership.card_id';
query += ' JOIN task_list ON card.id = task_list.card_id';
query += ' JOIN task ON task_list.id = task.task_list_id';
} }
if (filterLabelIds) { if (filterLabelIds) {
@ -84,6 +86,7 @@ const getIdsByEndlessListId = async (
}); });
query += ` AND card_membership.user_id IN (${inValues.join(', ')})`; query += ` AND card_membership.user_id IN (${inValues.join(', ')})`;
query += ` AND task.assignee_user_id IN (${inValues.join(', ')})`;
} }
if (filterLabelIds) { if (filterLabelIds) {