From af78b6f4f04222c96be5befa3422055db379ea6e Mon Sep 17 00:00:00 2001 From: Hongbo Wu Date: Wed, 27 Mar 2024 10:37:04 +0800 Subject: [PATCH 1/4] append newsletter labels to avoid labels attached by rules being replaced --- packages/api/src/services/save_email.ts | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/packages/api/src/services/save_email.ts b/packages/api/src/services/save_email.ts index ef8add223..67792eb33 100644 --- a/packages/api/src/services/save_email.ts +++ b/packages/api/src/services/save_email.ts @@ -15,7 +15,7 @@ import { parsePreparedContent, parseUrlMetadata, } from '../utils/parser' -import { createAndSaveLabelsInLibraryItem } from './labels' +import { createAndAddLabelsToLibraryItem } from './labels' import { createOrUpdateLibraryItem, findLibraryItemByUrl, @@ -79,6 +79,8 @@ export const saveEmail = async ( return updatedLibraryItem } + const labels = [{ name: 'Newsletter' }] + // start a transaction to create the library item and update the received email const newLibraryItem = await createOrUpdateLibraryItem( { @@ -105,6 +107,7 @@ export const saveEmail = async ( wordCount: wordsCount(content), subscription: input.author, folder: input.folder, + labelNames: labels.map((label) => label.name), }, input.userId ) @@ -120,11 +123,11 @@ export const saveEmail = async ( }) } - // save newsletter label in the item - await createAndSaveLabelsInLibraryItem( + // add newsletter label to the item + await createAndAddLabelsToLibraryItem( newLibraryItem.id, input.userId, - [{ name: 'Newsletter' }], + labels, undefined, 'system' ) From 3544dd1709e246d9300ff243e097b33381fef504 Mon Sep 17 00:00:00 2001 From: Hongbo Wu Date: Wed, 27 Mar 2024 10:38:51 +0800 Subject: [PATCH 2/4] remove feed content from job data --- packages/api/src/services/library_item.ts | 3 +++ 1 file changed, 3 insertions(+) diff --git a/packages/api/src/services/library_item.ts b/packages/api/src/services/library_item.ts index 3aa4c2da2..438eb6190 100644 --- a/packages/api/src/services/library_item.ts +++ b/packages/api/src/services/library_item.ts @@ -879,6 +879,7 @@ export const updateLibraryItem = async ( ...updatedLibraryItem, originalContent: undefined, readableContent: undefined, + feedContent: undefined, }, userId, id @@ -893,6 +894,7 @@ export const updateLibraryItem = async ( ...libraryItem, originalContent: undefined, readableContent: undefined, + feedContent: undefined, }, userId, id @@ -1061,6 +1063,7 @@ export const createOrUpdateLibraryItem = async ( ...newLibraryItem, originalContent: undefined, readableContent: undefined, + feedContent: undefined, }, userId, newLibraryItem.id From c022cf0a22121a0e35b7fff68f68ef98392203e9 Mon Sep 17 00:00:00 2001 From: Hongbo Wu Date: Wed, 27 Mar 2024 10:54:24 +0800 Subject: [PATCH 3/4] label match wildcard --- packages/api/src/services/library_item.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/api/src/services/library_item.ts b/packages/api/src/services/library_item.ts index 438eb6190..f239cea81 100644 --- a/packages/api/src/services/library_item.ts +++ b/packages/api/src/services/library_item.ts @@ -1433,7 +1433,9 @@ export const filterItemEvents = ( return labelsToTest.some((label) => { const hasWildcard = label.includes('*') if (hasWildcard) { - return labels?.some((l) => l.match(new RegExp(label, 'i'))) + return labels?.some( + (l) => l.match(new RegExp(label.replace('*', '.*'), 'i')) // match wildcard + ) } return labels?.some((l) => l.toLowerCase() === label) From 7c281359e84d5a08f6171d41eb90bc76b0e54652 Mon Sep 17 00:00:00 2001 From: Hongbo Wu Date: Wed, 27 Mar 2024 11:29:47 +0800 Subject: [PATCH 4/4] fix recommendations not filtered correctly by rules --- .../api/src/resolvers/recommendations/index.ts | 4 ++-- packages/api/src/services/groups.ts | 2 +- packages/api/src/services/library_item.ts | 17 +++++++++-------- packages/api/src/services/recommendation.ts | 12 +++++++++++- 4 files changed, 23 insertions(+), 12 deletions(-) diff --git a/packages/api/src/resolvers/recommendations/index.ts b/packages/api/src/resolvers/recommendations/index.ts index 061db3728..e22401542 100644 --- a/packages/api/src/resolvers/recommendations/index.ts +++ b/packages/api/src/resolvers/recommendations/index.ts @@ -171,7 +171,7 @@ export const recommendResolver = authorized< member.user.id, item.id, { - group: { id: group.id }, + group: { id: group.id, name: group.name }, note: input.note, recommender: { id: uid }, createdAt: new Date(), @@ -278,11 +278,11 @@ export const recommendHighlightsResolver = authorized< member.user.id, item.id, { - id: group.id, note: input.note, recommender: { id: uid }, createdAt: new Date(), libraryItem: { id: item.id }, + group: { id: group.id, name: group.name }, }, auth, input.highlightIds diff --git a/packages/api/src/services/groups.ts b/packages/api/src/services/groups.ts index e3ec84ebe..cedfecd5a 100644 --- a/packages/api/src/services/groups.ts +++ b/packages/api/src/services/groups.ts @@ -259,7 +259,7 @@ export const createLabelAndRuleForGroup = async ( }, ], // add a condition to check if the page is created - filter: `event:created recommendedBy:"${groupName}"`, + filter: `recommendedBy:"${groupName}"`, }) await Promise.all([addLabelPromise, sendNotificationPromise]) diff --git a/packages/api/src/services/library_item.ts b/packages/api/src/services/library_item.ts index f239cea81..9290b8ece 100644 --- a/packages/api/src/services/library_item.ts +++ b/packages/api/src/services/library_item.ts @@ -1528,16 +1528,17 @@ export const filterItemEvents = ( return event.id && ids.includes(event.id.toString()) } case 'recommendedby': { - if (lowercasedValue === '*') { - // select all if * is provided - return event.recommenderNames && event.recommenderNames.length > 0 + if (!event.recommenderNames) { + return false } - return ( - event.recommenderNames && - (event.recommenderNames as string[]).some( - (name) => name.toLowerCase() === lowercasedValue - ) + if (lowercasedValue === '*') { + // select all if * is provided + return event.recommenderNames.length > 0 + } + + return (event.recommenderNames as string[]).some( + (name) => name.toLowerCase() === lowercasedValue ) } case 'no': diff --git a/packages/api/src/services/recommendation.ts b/packages/api/src/services/recommendation.ts index af73e5b4c..72b6ff0bd 100644 --- a/packages/api/src/services/recommendation.ts +++ b/packages/api/src/services/recommendation.ts @@ -9,6 +9,7 @@ import { createOrUpdateLibraryItem, CreateOrUpdateLibraryItemArgs, findLibraryItemByUrl, + updateLibraryItem, } from './library_item' export const addRecommendation = async ( @@ -41,7 +42,7 @@ export const addRecommendation = async ( uploadFile: item.uploadFile, wordCount: item.wordCount, publishedAt: item.publishedAt, - recommenderNames: item.recommenderNames, + recommenderNames: [recommendation.group?.name], } recommendedItem = await createOrUpdateLibraryItem(newItem, userId) @@ -66,6 +67,15 @@ export const addRecommendation = async ( if (highlights) { await createHighlights(highlights, userId) } + } else { + // update the item + await updateLibraryItem( + recommendedItem.id, + { + recommenderNames: [recommendation.group?.name], + }, + userId + ) } await createRecommendation(