From c2c95d20c21c71dfd6922c0484b05a660531db17 Mon Sep 17 00:00:00 2001 From: Alessandro Magionami Date: Wed, 9 Oct 2024 09:28:17 +0200 Subject: [PATCH] Activitystream IoC 1 addStreamCreatedActivity (#3206) * chore(activitystream): addStreamPermissionsAddedActivity refactor multi region * chore(activitystream): addStreamCreatedActivity refactor multi region --- .../activitystream/services/streamActivity.ts | 70 +++++++++++-------- .../core/services/streams/management.ts | 9 ++- 2 files changed, 46 insertions(+), 33 deletions(-) diff --git a/packages/server/modules/activitystream/services/streamActivity.ts b/packages/server/modules/activitystream/services/streamActivity.ts index f31223eb9..4d240c2dc 100644 --- a/packages/server/modules/activitystream/services/streamActivity.ts +++ b/packages/server/modules/activitystream/services/streamActivity.ts @@ -175,38 +175,46 @@ export async function addStreamClonedActivity( /** * Save "user created stream" activity item */ -export async function addStreamCreatedActivity(params: { - streamId: string - creatorId: string - input: StreamCreateInput | ProjectCreateInput - stream: StreamRecord -}) { - const { streamId, creatorId, input, stream } = params +export const addStreamCreatedActivityFactory = + ({ + saveActivity, + publish + }: { + saveActivity: SaveActivity + publish: PublishSubscription + }) => + async (params: { + streamId: string + creatorId: string + input: StreamCreateInput | ProjectCreateInput + stream: StreamRecord + }) => { + const { streamId, creatorId, input, stream } = params - await Promise.all([ - saveActivityFactory({ db })({ - streamId, - resourceType: ResourceTypes.Stream, - resourceId: streamId, - actionType: ActionTypes.Stream.Create, - userId: creatorId, - info: { input }, - message: `Stream ${input.name} created` - }), - pubsub.publish(StreamPubsubEvents.UserStreamAdded, { - userStreamAdded: { id: streamId, ...input }, - ownerId: creatorId - }), - publish(UserSubscriptions.UserProjectsUpdated, { - userProjectsUpdated: { - id: streamId, - type: UserProjectsUpdatedMessageType.Added, - project: stream - }, - ownerId: creatorId - }) - ]) -} + await Promise.all([ + saveActivity({ + streamId, + resourceType: ResourceTypes.Stream, + resourceId: streamId, + actionType: ActionTypes.Stream.Create, + userId: creatorId, + info: { input }, + message: `Stream ${input.name} created` + }), + publish(StreamPubsubEvents.UserStreamAdded, { + userStreamAdded: { id: streamId, ...input }, + ownerId: creatorId + }), + publish(UserSubscriptions.UserProjectsUpdated, { + userProjectsUpdated: { + id: streamId, + type: UserProjectsUpdatedMessageType.Added, + project: stream + }, + ownerId: creatorId + }) + ]) + } /** * Save "stream permissions granted to user" activity item diff --git a/packages/server/modules/core/services/streams/management.ts b/packages/server/modules/core/services/streams/management.ts index 117ed123b..bef1de143 100644 --- a/packages/server/modules/core/services/streams/management.ts +++ b/packages/server/modules/core/services/streams/management.ts @@ -1,6 +1,6 @@ import { MaybeNullOrUndefined, Roles, wait } from '@speckle/shared' import { - addStreamCreatedActivity, + addStreamCreatedActivityFactory, addStreamDeletedActivity, addStreamUpdatedActivity } from '@/modules/activitystream/services/streamActivity' @@ -55,6 +55,8 @@ import { buildCoreInviteEmailContentsFactory } from '@/modules/serverinvites/ser import { getEventBus } from '@/modules/shared/services/eventBus' import { ProjectInviteResourceType } from '@/modules/serverinvites/domain/constants' import { createBranchFactory } from '@/modules/core/repositories/branches' +import { saveActivityFactory } from '@/modules/activitystream/repositories' +import { publish } from '@/modules/shared/utils/subscriptions' export async function createStreamReturnRecord( params: (StreamCreateInput | ProjectCreateInput) & { @@ -112,7 +114,10 @@ export async function createStreamReturnRecord( // Save activity if (createActivity) { - await addStreamCreatedActivity({ + await addStreamCreatedActivityFactory({ + saveActivity: saveActivityFactory({ db }), + publish + })({ streamId, input: params, stream,