From 25bc4477d602cba3ae98e212c1c5630c635fb2f3 Mon Sep 17 00:00:00 2001 From: Alessandro Magionami Date: Thu, 26 Sep 2024 15:38:22 +0200 Subject: [PATCH] chore(activitystream): refactor sendActivityNotification --- .../server/modules/activitystream/index.ts | 9 +++- .../activitystream/services/summary.ts | 46 +++++++++---------- .../tests/activitySummary.spec.ts | 22 ++++----- .../modules/cli/commands/activities/send.ts | 9 +++- 4 files changed, 46 insertions(+), 40 deletions(-) diff --git a/packages/server/modules/activitystream/index.ts b/packages/server/modules/activitystream/index.ts index cc9e992ec..cc7618798 100644 --- a/packages/server/modules/activitystream/index.ts +++ b/packages/server/modules/activitystream/index.ts @@ -1,5 +1,4 @@ import { Optional, SpeckleModule } from '@/modules/shared/helpers/typeHelper' -import { sendActivityNotifications } from '@/modules/activitystream/services/summary' import { initializeEventListener } from '@/modules/activitystream/services/eventListener' import { publishNotification } from '@/modules/notifications/services/publication' import { scheduleExecution } from '@/modules/core/services/taskScheduler' @@ -8,6 +7,9 @@ import { weeklyEmailDigestEnabled } from '@/modules/shared/helpers/envHelper' import { getEventBus } from '@/modules/shared/services/eventBus' import { handleServerInvitesActivitiesFactory } from '@/modules/activitystream/services/serverInvitesActivity' import { getStream } from '@/modules/core/repositories/streams' +import { sendActivityNotificationsFactory } from '@/modules/activitystream/services/summary' +import { getActiveUserStreamsFactory } from '@/modules/activitystream/repositories' +import { db } from '@/db/knex' let scheduledTask: ReturnType | null = null let quitEventListeners: Optional> = @@ -44,7 +46,10 @@ const scheduleWeeklyActivityNotifications = () => { const end = now const start = new Date(end.getTime()) start.setDate(start.getDate() - numberOfDays) - await sendActivityNotifications(start, end, publishNotification) + await sendActivityNotificationsFactory({ + publishNotification, + getActiveUserStreams: getActiveUserStreamsFactory({ db }) + })(start, end) }, 10 * 60 * 1000 ) diff --git a/packages/server/modules/activitystream/services/summary.ts b/packages/server/modules/activitystream/services/summary.ts index 5b887e1e9..f3b29081c 100644 --- a/packages/server/modules/activitystream/services/summary.ts +++ b/packages/server/modules/activitystream/services/summary.ts @@ -1,7 +1,4 @@ -import { - getActivityFactory, - getActiveUserStreamsFactory -} from '@/modules/activitystream/repositories' +import { getActivityFactory } from '@/modules/activitystream/repositories' import { StreamScopeActivity } from '@/modules/activitystream/helpers/types' import { NotificationPublisher, @@ -47,23 +44,26 @@ export const createActivitySummary = async ( } } -export const sendActivityNotifications = async ( - start: Date, - end: Date, - notificationPublisher: NotificationPublisher, - userActiveStreamsLookup: GetActiveUserStreams = getActiveUserStreamsFactory({ db }) -): Promise => { - const activeUserStreams = await userActiveStreamsLookup(start, end) - await Promise.all( - activeUserStreams.map((userStreams) => - notificationPublisher(NotificationType.ActivityDigest, { - targetUserId: userStreams.userId, - data: { - streamIds: userStreams.streamIds, - start, - end - } - }) +export const sendActivityNotificationsFactory = + ({ + publishNotification, + getActiveUserStreams + }: { + publishNotification: NotificationPublisher + getActiveUserStreams: GetActiveUserStreams + }) => + async (start: Date, end: Date): Promise => { + const activeUserStreams = await getActiveUserStreams(start, end) + await Promise.all( + activeUserStreams.map((userStreams) => + publishNotification(NotificationType.ActivityDigest, { + targetUserId: userStreams.userId, + data: { + streamIds: userStreams.streamIds, + start, + end + } + }) + ) ) - ) -} + } diff --git a/packages/server/modules/activitystream/tests/activitySummary.spec.ts b/packages/server/modules/activitystream/tests/activitySummary.spec.ts index a128b654c..269f3bb1e 100644 --- a/packages/server/modules/activitystream/tests/activitySummary.spec.ts +++ b/packages/server/modules/activitystream/tests/activitySummary.spec.ts @@ -3,7 +3,7 @@ import { BasicTestUser, createTestUsers } from '@/test/authHelper' import { StreamActivity, Users } from '@/modules/core/dbSchema' import { createActivitySummary, - sendActivityNotifications + sendActivityNotificationsFactory } from '@/modules/activitystream/services/summary' import { expect } from 'chai' import { createStream, deleteStream } from '@/modules/core/services/streams' @@ -140,12 +140,10 @@ describe('Activity summary @activity', () => { describe('send activity notifications', () => { it('sends no notifications if there are no active streams', async () => { const notificationPublisher = new FakeNotificationPublisher() - await sendActivityNotifications( - new Date(), - new Date(), - notificationPublisher.publish.bind(notificationPublisher), - async () => [] - ) + await sendActivityNotificationsFactory({ + publishNotification: notificationPublisher.publish.bind(notificationPublisher), + getActiveUserStreams: async () => [] + })(new Date(), new Date()) expect(notificationPublisher.notifications.length).to.equal(0) }) @@ -156,12 +154,10 @@ describe('Activity summary @activity', () => { { userId: 'boo', streamIds: ['tic', 'tac', 'toe'] } ] const notificationPublisher = new FakeNotificationPublisher() - await sendActivityNotifications( - new Date(), - new Date(), - notificationPublisher.publish.bind(notificationPublisher), - async () => userStreams - ) + await sendActivityNotificationsFactory({ + publishNotification: notificationPublisher.publish.bind(notificationPublisher), + getActiveUserStreams: async () => userStreams + })(new Date(), new Date()) expect( notificationPublisher.notifications diff --git a/packages/server/modules/cli/commands/activities/send.ts b/packages/server/modules/cli/commands/activities/send.ts index b662a469c..887b1be5e 100644 --- a/packages/server/modules/cli/commands/activities/send.ts +++ b/packages/server/modules/cli/commands/activities/send.ts @@ -1,8 +1,10 @@ import { CommandModule } from 'yargs' import { initializeQueue } from '@/modules/notifications/services/queue' -import { sendActivityNotifications } from '@/modules/activitystream/services/summary' import { publishNotification } from '@/modules/notifications/services/publication' import { cliLogger } from '@/logging/logging' +import { sendActivityNotificationsFactory } from '@/modules/activitystream/services/summary' +import { getActiveUserStreamsFactory } from '@/modules/activitystream/repositories' +import { db } from '@/db/knex' const command: CommandModule = { command: 'send [days]', @@ -21,7 +23,10 @@ const command: CommandModule = { const end = new Date() const start = new Date(end.getTime()) start.setDate(start.getDate() - numberOfDays) - await sendActivityNotifications(start, end, publishNotification) + await sendActivityNotificationsFactory({ + publishNotification, + getActiveUserStreams: getActiveUserStreamsFactory({ db }) + })(start, end) cliLogger.info('Sent activity notifications') } }