Skip to content

Commit

Permalink
[lib] Introduce updateRelationshipSpec
Browse files Browse the repository at this point in the history
Summary:
This addresses [ENG-9329](https://linear.app/comm/issue/ENG-9329/introduce-dmoperationspecs-for-friendship-actions).

Depends on D13391

Test Plan: For now, just Flow. I'll test this at a later point in the stack; for now, putting up diffs following the team's recent pattern to get feedback

Reviewers: tomek, kamil, will

Reviewed By: kamil

Differential Revision: https://phab.comm.dev/D13392
  • Loading branch information
Ashoat committed Sep 20, 2024
1 parent 14c96b9 commit b9bdf51
Show file tree
Hide file tree
Showing 2 changed files with 112 additions and 0 deletions.
2 changes: 2 additions & 0 deletions lib/shared/dm-ops/dm-op-specs.js
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ import { sendEditMessageSpec } from './send-edit-message-spec.js';
import { sendMultimediaMessageSpec } from './send-multimedia-message-spec.js';
import { sendReactionMessageSpec } from './send-reaction-message-spec.js';
import { sendTextMessageSpec } from './send-text-message-spec.js';
import { updateRelationshipSpec } from './update-relationship-spec.js';
import { type DMOperationType, dmOperationTypes } from '../../types/dm-ops.js';

export const dmOpSpecs: {
Expand All @@ -40,4 +41,5 @@ export const dmOpSpecs: {
[dmOperationTypes.CREATE_ENTRY]: createEntrySpec,
[dmOperationTypes.DELETE_ENTRY]: deleteEntrySpec,
[dmOperationTypes.EDIT_ENTRY]: editEntrySpec,
[dmOperationTypes.UPDATE_RELATIONSHIP]: updateRelationshipSpec,
});
110 changes: 110 additions & 0 deletions lib/shared/dm-ops/update-relationship-spec.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,110 @@
// @flow

import type {
DMOperationSpec,
ProcessDMOperationUtilities,
} from './dm-op-spec.js';
import type { DMUpdateRelationshipOperation } from '../../types/dm-ops.js';
import { messageTypes } from '../../types/message-types-enum.js';
import { rawMessageInfoFromMessageData } from '../message-utils.js';

async function createMessageDataFromDMOperation(
dmOperation: DMUpdateRelationshipOperation,
viewerID: string,
utilities: ProcessDMOperationUtilities,
) {
const { threadID, creatorID, time, operation } = dmOperation;
if (operation !== 'farcaster_mutual') {
return {
type: messageTypes.UPDATE_RELATIONSHIP,
threadID,
creatorID,
targetID: viewerID,
time,
operation,
};
}
const { findUserIdentities } = utilities;
const { identities: userIdentities } = await findUserIdentities([
creatorID,
viewerID,
]);
const creatorFID = userIdentities[creatorID]?.farcasterID;
const targetFID = userIdentities[viewerID]?.farcasterID;
if (!creatorFID || !targetFID) {
const errorMap = { creatorID: creatorFID, viewerID: targetFID };
throw new Error(
'could not fetch FID for either creator or target: ' +
JSON.stringify(errorMap),
);
}
return {
type: messageTypes.UPDATE_RELATIONSHIP,
threadID,
creatorID,
creatorFID,
targetID: viewerID,
targetFID,
time,
operation,
};
}

const updateRelationshipSpec: DMOperationSpec<DMUpdateRelationshipOperation> =
Object.freeze({
notificationsCreationData: async (
dmOperation: DMUpdateRelationshipOperation,
viewerID: string,
utilities: ProcessDMOperationUtilities,
) => {
const messageData = await createMessageDataFromDMOperation(
dmOperation,
viewerID,
utilities,
);
return { messageDatas: [messageData] };
},
processDMOperation: async (
dmOperation: DMUpdateRelationshipOperation,
viewerID: string,
utilities: ProcessDMOperationUtilities,
) => {
const { messageID } = dmOperation;
const messageData = await createMessageDataFromDMOperation(
dmOperation,
viewerID,
utilities,
);
const rawMessageInfos = [
rawMessageInfoFromMessageData(messageData, messageID),
];
return {
rawMessageInfos,
updateInfos: [],
};
},
canBeProcessed: async (
dmOperation: DMUpdateRelationshipOperation,
viewerID: string,
utilities: ProcessDMOperationUtilities,
) => {
try {
await createMessageDataFromDMOperation(
dmOperation,
viewerID,
utilities,
);
return {
isProcessingPossible: true,
};
} catch (e) {
return {
isProcessingPossible: false,
reason: { type: 'invalid' },
};
}
},
supportsAutoRetry: true,
});

export { updateRelationshipSpec };

0 comments on commit b9bdf51

Please sign in to comment.