Merge pull request #3143 from specklesystems/alessandro/web-943-send-activity-notification
Activitystream IoC 2 sendActivityNotification
This commit is contained in:
@@ -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<typeof scheduleExecution> | null = null
|
||||
let quitEventListeners: Optional<ReturnType<typeof initializeEventListeners>> =
|
||||
@@ -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
|
||||
)
|
||||
|
||||
@@ -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<void> => {
|
||||
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<void> => {
|
||||
const activeUserStreams = await getActiveUserStreams(start, end)
|
||||
await Promise.all(
|
||||
activeUserStreams.map((userStreams) =>
|
||||
publishNotification(NotificationType.ActivityDigest, {
|
||||
targetUserId: userStreams.userId,
|
||||
data: {
|
||||
streamIds: userStreams.streamIds,
|
||||
start,
|
||||
end
|
||||
}
|
||||
})
|
||||
)
|
||||
)
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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')
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user