From 70a5c95232d1edee7296a400a4ab82418121d1e8 Mon Sep 17 00:00:00 2001 From: Sinclair Chen Date: Tue, 12 Mar 2024 15:29:51 -0700 Subject: [PATCH] Revert "don't notify or update group embeddings during The Merge" This reverts commit 1e00129aac27b7cbb60bdb8eb54dcb6bf417c955. --- .../src/triggers/on-update-contract.ts | 47 +++++++++++++++++-- 1 file changed, 44 insertions(+), 3 deletions(-) diff --git a/backend/functions/src/triggers/on-update-contract.ts b/backend/functions/src/triggers/on-update-contract.ts index a93b8eeeb9..db7c4686d0 100644 --- a/backend/functions/src/triggers/on-update-contract.ts +++ b/backend/functions/src/triggers/on-update-contract.ts @@ -1,5 +1,6 @@ import * as functions from 'firebase-functions' import { + getContractSupabase, getUser, log, processPaginated, @@ -8,9 +9,15 @@ import { import { createCommentOrUpdatedContractNotification } from 'shared/create-notification' import { Contract, CPMMMultiContract, MultiContract } from 'common/contract' import * as admin from 'firebase-admin' -import { isEqual, pick } from 'lodash' +import { difference, isEqual, pick } from 'lodash' import { secrets } from 'common/secrets' -import { createSupabaseClient } from 'shared/supabase/init' +import { + createSupabaseClient, + createSupabaseDirectClient, +} from 'shared/supabase/init' +import { upsertGroupEmbedding } from 'shared/helpers/embeddings' +import { addContractToFeed } from 'shared/create-feed' +import { DAY_MS } from 'common/util/time' type AnyContract = Contract & CPMMMultiContract & MultiContract const propsThatTriggerRevalidation: (keyof AnyContract)[] = [ @@ -45,9 +52,43 @@ export const onUpdateContract = functions const contract = change.after.data() as Contract const previousContract = change.before.data() as Contract const { eventId } = context - const { closeTime, question } = contract + const { closeTime, question, groupLinks } = contract const db = createSupabaseClient() + const pg = createSupabaseDirectClient() + + // Update group embeddings if group links changed + const previousGroupIds = (previousContract.groupLinks ?? []).map( + (gl) => gl.groupId + ) + const currentGroupIds = (groupLinks ?? []).map((gl) => gl.groupId) + const onlyNewGroupIds = difference(currentGroupIds, previousGroupIds) + const differentGroupIds = onlyNewGroupIds.concat( + difference(previousGroupIds, currentGroupIds) + ) + await Promise.all( + differentGroupIds.map(async (groupId) => + upsertGroupEmbedding(pg, groupId) + ) + ) + // Adding a contract to a group is ~similar~ to creating a new contract in that group + if ( + onlyNewGroupIds.length > 0 && + contract.createdTime > Date.now() - 2 * DAY_MS && + contract.visibility === 'public' + ) { + const contractWithScore = await getContractSupabase(contract.id) + if (!contractWithScore) return + await addContractToFeed( + contractWithScore, + ['contract_in_group_you_are_in'], + 'new_contract', + [contractWithScore.creatorId], + { + idempotencyKey: contractWithScore.id + '_new_contract', + } + ) + } if ( (previousContract.closeTime !== closeTime ||