Files
speckle-server/packages/server/modules/activitystream/services/summary.ts
T
Daniel Gak Anagrov ba3d9ade22 feat(activity): moved project roles to activity (#5019)
* feat: moved project roles to activity
* fix: added previous project role filed on activity
* fix: remvoke does not get logged as an actvity for every project in a workspace when removed from workspace
* fix: on delete user account, emit also seat and project event

Co-authored-by: Charles Driesler <chuck@speckle.systems>
2025-07-10 11:44:54 +02:00

75 lines
1.8 KiB
TypeScript

import {
NotificationPublisher,
NotificationType
} from '@/modules/notifications/helpers/types'
import {
CreateActivitySummary,
GetActiveUserStreams,
GetUserStreamActivity
} from '@/modules/activitystream/domain/operations'
import { GetStream } from '@/modules/core/domain/streams/operations'
import { GetUser } from '@/modules/core/domain/users/operations'
export const createActivitySummaryFactory =
({
getStream,
getActivity,
getUser
}: {
getStream: GetStream
getActivity: GetUserStreamActivity
getUser: GetUser
}): CreateActivitySummary =>
async ({
userId,
streamIds,
start,
end
}: {
userId: string
streamIds: string[]
start: Date
end: Date
}) => {
const streamActivities = (
await Promise.all(
streamIds.map(async (streamId) => {
return {
stream: (await getStream({ streamId, userId })) ?? null,
activity: await getActivity(streamId, start, end, null) //userId is null for now, to not filter out any activity
}
})
)
).filter((sa) => sa.activity.length)
const user = await getUser(userId)
if (!user) return null
return {
user,
streamActivities
}
}
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
}
})
)
)
}