From 0747c4603cb4f94b20ec16c822051bb6dee730b3 Mon Sep 17 00:00:00 2001 From: Hongbo Wu Date: Tue, 5 Sep 2023 23:03:30 +0800 Subject: [PATCH] fix bulk action --- packages/api/src/services/library_item.ts | 30 ++++++++++++++++++++--- 1 file changed, 27 insertions(+), 3 deletions(-) diff --git a/packages/api/src/services/library_item.ts b/packages/api/src/services/library_item.ts index 84afb7e0a..21b921056 100644 --- a/packages/api/src/services/library_item.ts +++ b/packages/api/src/services/library_item.ts @@ -1,5 +1,6 @@ import { DeepPartial, SelectQueryBuilder } from 'typeorm' import { QueryDeepPartialEntity } from 'typeorm/query-builder/QueryPartialEntity' +import { EntityLabel } from '../entity/entity_label' import { Highlight } from '../entity/highlight' import { Label } from '../entity/label' import { @@ -389,10 +390,12 @@ export const updateLibraryItems = async ( ) => { // build the script let values: QueryDeepPartialEntity = {} + let addLabels = false switch (action) { case BulkActionType.Archive: values = { archivedAt: new Date(), + state: LibraryItemState.Archived, } break case BulkActionType.Delete: @@ -401,9 +404,7 @@ export const updateLibraryItems = async ( } break case BulkActionType.AddLabels: - values = { - labels, - } + addLabels = true break case BulkActionType.MarkAsRead: values = { @@ -422,6 +423,29 @@ export const updateLibraryItems = async ( // build the where clause buildWhereClause(queryBuilder, args) + if (addLabels) { + if (!labels) { + throw new Error('Labels are required for this action') + } + + const libraryItems = await queryBuilder.getMany() + // add labels in library items + const labelsToAdd = libraryItems.flatMap((libraryItem) => + labels + .map((label) => ({ + labelId: label.id, + libraryItemId: libraryItem.id, + })) + .filter((entityLabel) => { + const existingLabel = libraryItem.labels?.find( + (l) => l.id === entityLabel.labelId + ) + return !existingLabel + }) + ) + return tx.getRepository(EntityLabel).save(labelsToAdd) + } + return queryBuilder.update(LibraryItem).set(values).execute() }) }