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:
parent
a5b3b4ad5b
commit
98eeb80a19
5 changed files with 29 additions and 29 deletions
25
Dockerfile
25
Dockerfile
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -470,10 +470,6 @@ export default class extends BaseModel {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
getTaskListsModelArray() {
|
|
||||||
return this.getTaskListsQuerySet().toModelArray();
|
|
||||||
}
|
|
||||||
|
|
||||||
getShownOnFrontOfCardTaskListsModelArray() {
|
getShownOnFrontOfCardTaskListsModelArray() {
|
||||||
return this.getTaskListsQuerySet()
|
return this.getTaskListsQuerySet()
|
||||||
.toModelArray()
|
.toModelArray()
|
||||||
|
|
|
@ -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
|
||||||
});
|
.getTaskListsQuerySet()
|
||||||
return users.some((user) => filterUserIds.includes(user.id));
|
.toModelArray()
|
||||||
|
.some((taskListModel) =>
|
||||||
|
taskListModel
|
||||||
|
.getTasksQuerySet()
|
||||||
|
.toRefArray()
|
||||||
|
.some((task) => filterUserIds.includes(task.assigneeUserId)),
|
||||||
|
);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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) {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue