From b4bf1b917b1c72b033646b95ce05bf97d9df3f1a Mon Sep 17 00:00:00 2001 From: Alessandro Magionami Date: Wed, 16 Oct 2024 10:04:20 +0200 Subject: [PATCH] chore(activitystream): addCommitDeletedActivity refactor multiregion (#3284) --- .../activitystream/domain/operations.ts | 8 ++ .../activitystream/services/commitActivity.ts | 80 ++++++++++--------- .../modules/core/graph/resolvers/commits.js | 9 ++- .../services/commit/batchCommitActions.ts | 9 ++- .../core/services/commit/management.ts | 8 +- .../server/modules/core/tests/commits.spec.js | 9 ++- 6 files changed, 74 insertions(+), 49 deletions(-) diff --git a/packages/server/modules/activitystream/domain/operations.ts b/packages/server/modules/activitystream/domain/operations.ts index a3dbacb2a..04cb55c68 100644 --- a/packages/server/modules/activitystream/domain/operations.ts +++ b/packages/server/modules/activitystream/domain/operations.ts @@ -232,3 +232,11 @@ export type AddCommitMovedActivity = (params: { newBranchId: string commit: CommitRecord }) => Promise + +export type AddCommitDeletedActivity = (params: { + commitId: string + streamId: string + userId: string + commit: CommitRecord + branchId: string +}) => Promise diff --git a/packages/server/modules/activitystream/services/commitActivity.ts b/packages/server/modules/activitystream/services/commitActivity.ts index 5c44b3e97..2ee9a43f9 100644 --- a/packages/server/modules/activitystream/services/commitActivity.ts +++ b/packages/server/modules/activitystream/services/commitActivity.ts @@ -1,8 +1,7 @@ import { ActionTypes, ResourceTypes } from '@/modules/activitystream/helpers/types' import { CommitSubscriptions as CommitPubsubEvents, - PublishSubscription, - pubsub + PublishSubscription } from '@/modules/shared/utils/subscriptions' import { CommitCreateInput, @@ -12,12 +11,13 @@ import { UpdateVersionInput } from '@/modules/core/graph/generated/graphql' import { CommitRecord } from '@/modules/core/helpers/types' -import { ProjectSubscriptions, publish } from '@/modules/shared/utils/subscriptions' +import { ProjectSubscriptions } from '@/modules/shared/utils/subscriptions' import { has } from 'lodash' import { saveActivityFactory } from '@/modules/activitystream/repositories' import { db } from '@/db/knex' import { AddCommitCreatedActivity, + AddCommitDeletedActivity, AddCommitUpdatedActivity, SaveActivity } from '@/modules/activitystream/domain/operations' @@ -172,39 +172,47 @@ export const addCommitMovedActivityFactory = ]) } -export async function addCommitDeletedActivity(params: { - commitId: string - streamId: string - userId: string - commit: CommitRecord - branchId: string -}) { - const { commitId, streamId, userId, commit, branchId } = params - await Promise.all([ - saveActivityFactory({ db })({ - streamId, - resourceType: ResourceTypes.Commit, - resourceId: commitId, - actionType: ActionTypes.Commit.Delete, - userId, - info: { commit }, - message: `Commit deleted: ${commitId}` - }), - pubsub.publish(CommitPubsubEvents.CommitDeleted, { - commitDeleted: { ...commit, streamId, branchId }, - streamId - }), - publish(ProjectSubscriptions.ProjectVersionsUpdated, { - projectId: streamId, - projectVersionsUpdated: { - id: commitId, - type: ProjectVersionsUpdatedMessageType.Deleted, - version: null, - modelId: branchId - } - }) - ]) -} +export const addCommitDeletedActivityFactory = + ({ + saveActivity, + publish + }: { + saveActivity: SaveActivity + publish: PublishSubscription + }): AddCommitDeletedActivity => + async (params: { + commitId: string + streamId: string + userId: string + commit: CommitRecord + branchId: string + }) => { + const { commitId, streamId, userId, commit, branchId } = params + await Promise.all([ + saveActivity({ + streamId, + resourceType: ResourceTypes.Commit, + resourceId: commitId, + actionType: ActionTypes.Commit.Delete, + userId, + info: { commit }, + message: `Commit deleted: ${commitId}` + }), + publish(CommitPubsubEvents.CommitDeleted, { + commitDeleted: { ...commit, streamId, branchId }, + streamId + }), + publish(ProjectSubscriptions.ProjectVersionsUpdated, { + projectId: streamId, + projectVersionsUpdated: { + id: commitId, + type: ProjectVersionsUpdatedMessageType.Deleted, + version: null, + modelId: branchId + } + }) + ]) + } export async function addCommitReceivedActivity(params: { input: CommitReceivedInput diff --git a/packages/server/modules/core/graph/resolvers/commits.js b/packages/server/modules/core/graph/resolvers/commits.js index 41789c718..93b4a195b 100644 --- a/packages/server/modules/core/graph/resolvers/commits.js +++ b/packages/server/modules/core/graph/resolvers/commits.js @@ -66,10 +66,10 @@ const { createBranchFactory } = require('@/modules/core/repositories/branches') const { - addCommitDeletedActivity, addCommitCreatedActivityFactory, addCommitUpdatedActivityFactory, - addCommitMovedActivityFactory + addCommitMovedActivityFactory, + addCommitDeletedActivityFactory } = require('@/modules/activitystream/services/commitActivity') const { VersionsEmitter } = require('@/modules/core/events/versionsEmitter') const { getObjectFactory } = require('@/modules/core/repositories/objects') @@ -92,7 +92,10 @@ const deleteCommitAndNotify = deleteCommitAndNotifyFactory({ markCommitStreamUpdated, markCommitBranchUpdated: markCommitBranchUpdatedFactory({ db }), deleteCommit: deleteCommitFactory({ db }), - addCommitDeletedActivity + addCommitDeletedActivity: addCommitDeletedActivityFactory({ + saveActivity: saveActivityFactory({ db }), + publish + }) }) const getObject = getObjectFactory({ db }) diff --git a/packages/server/modules/core/services/commit/batchCommitActions.ts b/packages/server/modules/core/services/commit/batchCommitActions.ts index 378420e2d..985654ce8 100644 --- a/packages/server/modules/core/services/commit/batchCommitActions.ts +++ b/packages/server/modules/core/services/commit/batchCommitActions.ts @@ -1,6 +1,7 @@ import { db } from '@/db/knex' import { AddCommitMovedActivity } from '@/modules/activitystream/domain/operations' -import { addCommitDeletedActivity } from '@/modules/activitystream/services/commitActivity' +import { saveActivityFactory } from '@/modules/activitystream/repositories' +import { addCommitDeletedActivityFactory } from '@/modules/activitystream/services/commitActivity' import { GetStreamBranchByName, StoreBranch @@ -28,6 +29,7 @@ import { } from '@/modules/core/repositories/commits' import { getStreamsFactory } from '@/modules/core/repositories/streams' import { ensureError } from '@/modules/shared/helpers/errorHelper' +import { publish } from '@/modules/shared/utils/subscriptions' import { difference, groupBy, has, keyBy } from 'lodash' type OldBatchInput = CommitsMoveInput | CommitsDeleteInput @@ -216,7 +218,10 @@ export async function batchDeleteCommits( await deleteCommitsFactory({ db })(commitIds) await Promise.all( commitsWithStreams.map(({ commit, stream }) => - addCommitDeletedActivity({ + addCommitDeletedActivityFactory({ + saveActivity: saveActivityFactory({ db }), + publish + })({ commitId: commit.id, streamId: stream.id, userId, diff --git a/packages/server/modules/core/services/commit/management.ts b/packages/server/modules/core/services/commit/management.ts index 2de25d30d..a5d9cc19a 100644 --- a/packages/server/modules/core/services/commit/management.ts +++ b/packages/server/modules/core/services/commit/management.ts @@ -1,12 +1,10 @@ import { db } from '@/db/knex' import { AddCommitCreatedActivity, + AddCommitDeletedActivity, AddCommitUpdatedActivity } from '@/modules/activitystream/domain/operations' -import { - addCommitDeletedActivity, - addCommitReceivedActivity -} from '@/modules/activitystream/services/commitActivity' +import { addCommitReceivedActivity } from '@/modules/activitystream/services/commitActivity' import { GetBranchById, GetStreamBranchByName, @@ -364,7 +362,7 @@ export const deleteCommitAndNotifyFactory = markCommitStreamUpdated: MarkCommitStreamUpdated markCommitBranchUpdated: MarkCommitBranchUpdated deleteCommit: DeleteCommit - addCommitDeletedActivity: typeof addCommitDeletedActivity + addCommitDeletedActivity: AddCommitDeletedActivity }): DeleteCommitAndNotify => async (commitId: string, streamId: string, userId: string) => { const commit = await deps.getCommit(commitId) diff --git a/packages/server/modules/core/tests/commits.spec.js b/packages/server/modules/core/tests/commits.spec.js index 598ab12c9..1d500a16d 100644 --- a/packages/server/modules/core/tests/commits.spec.js +++ b/packages/server/modules/core/tests/commits.spec.js @@ -49,8 +49,8 @@ const { markCommitStreamUpdatedFactory } = require('@/modules/core/repositories/streams') const { - addCommitDeletedActivity, - addCommitUpdatedActivityFactory + addCommitUpdatedActivityFactory, + addCommitDeletedActivityFactory } = require('@/modules/activitystream/services/commitActivity') const { VersionsEmitter } = require('@/modules/core/events/versionsEmitter') const { getObjectFactory } = require('@/modules/core/repositories/objects') @@ -130,7 +130,10 @@ const deleteCommitAndNotify = deleteCommitAndNotifyFactory({ markCommitStreamUpdated, markCommitBranchUpdated: markCommitBranchUpdatedFactory({ db }), deleteCommit: deleteCommitFactory({ db }), - addCommitDeletedActivity + addCommitDeletedActivity: addCommitDeletedActivityFactory({ + saveActivity: saveActivityFactory({ db }), + publish + }) }) const getObject = getObjectFactory({ db })