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 \
&& apk add build-base python3 --no-cache
@ -7,36 +7,35 @@ WORKDIR /app
COPY server/package.json server/package-lock.json server/requirements.txt ./
RUN npm install -g pnpm@latest-10 \
&& pnpm install -P
RUN npm install npm --global \
&& npm install --omit=dev
FROM node:lts AS client
FROM node:22 AS client
WORKDIR /app
COPY client .
RUN npm install -g pnpm@latest-10 \
&& pnpm install -P
RUN npm install npm --global \
&& 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 \
&& apk add bash python3 --no-cache \
&& npm install -g pnpm@latest-10
&& npm install npm --global
USER node
WORKDIR /app
COPY --chown=node:node server .
RUN wget -qO- https://astral.sh/uv/install.sh | sh \
&& /home/node/.local/bin/uv venv \
&& /home/node/.local/bin/uv pip install -r requirements.txt --no-cache-dir \
RUN python3 -m venv .venv \
&& .venv/bin/pip3 install -r requirements.txt --no-cache-dir \
&& 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

View file

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

View file

@ -280,14 +280,20 @@ export default class extends BaseModel {
if (filterUserIds.length > 0) {
cardModels = cardModels.filter((cardModel) => {
const users = cardModel.users.toRefArray();
cardModel.getTaskListsModelArray().forEach((taskListModel) => {
taskListModel.getTasksModelArray().forEach((taskModel) => {
if (filterUserIds.includes(taskModel.assigneeUserId)) {
users.push(taskModel.user);
}
});
});
return users.some((user) => filterUserIds.includes(user.id));
if (users.some((user) => filterUserIds.includes(user.id))) {
return true;
}
return cardModel
.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']);
}
getTasksModelArray() {
return this.getTasksQuerySet().toModelArray();
}
duplicate(id, data, rootId) {
if (rootId === undefined) {
rootId = id; // eslint-disable-line no-param-reassign

View file

@ -29,6 +29,8 @@ const getIdsByEndlessListId = async (
if (filterUserIds) {
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) {
@ -84,6 +86,7 @@ const getIdsByEndlessListId = async (
});
query += ` AND card_membership.user_id IN (${inValues.join(', ')})`;
query += ` AND task.assignee_user_id IN (${inValues.join(', ')})`;
}
if (filterLabelIds) {