diff --git a/packages/api/src/services/save_email.ts b/packages/api/src/services/save_email.ts index a2b87ac37..4a89c44d8 100644 --- a/packages/api/src/services/save_email.ts +++ b/packages/api/src/services/save_email.ts @@ -34,6 +34,7 @@ export type SaveEmailInput = { unsubHttpUrl?: string newsletterEmailId?: string receivedEmailId: string + folder: string } const isStubUrl = (url: string): boolean => { @@ -105,6 +106,7 @@ export const saveEmail = async ( siteName: parseResult.parsedContent?.siteName ?? undefined, wordCount: wordsCount(content), subscription: input.author, + folder: input.folder, }, input.userId ) diff --git a/packages/api/src/services/save_newsletter_email.ts b/packages/api/src/services/save_newsletter_email.ts index 9f45c5897..4b6ca70b0 100644 --- a/packages/api/src/services/save_newsletter_email.ts +++ b/packages/api/src/services/save_newsletter_email.ts @@ -1,8 +1,10 @@ import { NewsletterEmail } from '../entity/newsletter_email' +import { Subscription } from '../entity/subscription' import { env } from '../env' import { analytics } from '../utils/analytics' import { logger } from '../utils/logger' import { saveEmail, SaveEmailInput } from './save_email' +import { getSubscriptionByName } from './subscriptions' export interface NewsletterMessage { email: string @@ -20,7 +22,8 @@ export interface NewsletterMessage { // send the push but that is ok and we wont retry in that case. export const saveNewsletter = async ( data: NewsletterMessage, - newsletterEmail: NewsletterEmail + newsletterEmail: NewsletterEmail, + existingSubscription?: Subscription ): Promise => { analytics.track({ userId: newsletterEmail.user.id, @@ -38,6 +41,16 @@ export const saveNewsletter = async ( return false } + // find existing subscription if not provided + if (!existingSubscription) { + existingSubscription = + (await getSubscriptionByName(data.author, newsletterEmail.user.id)) || + undefined + } + + // subscription's folder takes precedence over newsletter email's folder + const folder = existingSubscription?.folder || newsletterEmail.folder + const input: SaveEmailInput = { userId: newsletterEmail.user.id, url: data.url, @@ -48,6 +61,7 @@ export const saveNewsletter = async ( unsubHttpUrl: data.unsubHttpUrl, newsletterEmailId: newsletterEmail.id, receivedEmailId: data.receivedEmailId, + folder, } const savedLibraryItem = await saveEmail(input) if (!savedLibraryItem) {