remove unnecessary fields from item events

This commit is contained in:
Hongbo Wu 2024-03-18 11:24:16 +08:00
parent 208a5895ef
commit a49366b4cc
5 changed files with 41 additions and 55 deletions

View file

@ -16,6 +16,7 @@ export interface TriggerRuleJobData {
libraryItemId: string libraryItemId: string
userId: string userId: string
ruleEventType: RuleEventType ruleEventType: RuleEventType
data: unknown
} }
interface RuleActionObj { interface RuleActionObj {

View file

@ -4,7 +4,6 @@ import { RuleEventType } from './entity/rule'
import { env } from './env' import { env } from './env'
import { ReportType } from './generated/graphql' import { ReportType } from './generated/graphql'
import { FeatureName, findFeatureByName } from './services/features' import { FeatureName, findFeatureByName } from './services/features'
import { Merge } from './util'
import { import {
enqueueAISummarizeJob, enqueueAISummarizeJob,
enqueueExportItem, enqueueExportItem,
@ -19,11 +18,6 @@ const logger = buildLogger('pubsub')
const client = new PubSub() const client = new PubSub()
type EntityData<T extends Record<string, any>> = Merge<
T,
{ libraryItemId: string }
>
const isYouTubeVideoURL = (url: string | undefined): boolean => { const isYouTubeVideoURL = (url: string | undefined): boolean => {
if (!url) { if (!url) {
return false return false
@ -68,16 +62,17 @@ export const createPubSubClient = (): PubsubClient => {
}, },
entityCreated: async <T extends Record<string, any>>( entityCreated: async <T extends Record<string, any>>(
type: EntityType, type: EntityType,
data: EntityData<T>, data: T,
userId: string userId: string,
libraryItemId: string
): Promise<void> => { ): Promise<void> => {
const libraryItemId = data.libraryItemId
// queue trigger rule job // queue trigger rule job
if (type === EntityType.PAGE) { if (type === EntityType.PAGE) {
await enqueueTriggerRuleJob({ await enqueueTriggerRuleJob({
userId, userId,
ruleEventType: RuleEventType.PageCreated, ruleEventType: RuleEventType.PageCreated,
libraryItemId, libraryItemId,
data,
}) })
} }
// queue export item job // queue export item job
@ -112,17 +107,17 @@ export const createPubSubClient = (): PubsubClient => {
}, },
entityUpdated: async <T extends Record<string, any>>( entityUpdated: async <T extends Record<string, any>>(
type: EntityType, type: EntityType,
data: EntityData<T>, data: T,
userId: string userId: string,
libraryItemId: string
): Promise<void> => { ): Promise<void> => {
const libraryItemId = data.libraryItemId
// queue trigger rule job // queue trigger rule job
if (type === EntityType.PAGE) { if (type === EntityType.PAGE) {
await enqueueTriggerRuleJob({ await enqueueTriggerRuleJob({
userId, userId,
ruleEventType: RuleEventType.PageUpdated, ruleEventType: RuleEventType.PageUpdated,
libraryItemId, libraryItemId,
data,
}) })
} }
// queue export item job // queue export item job
@ -178,13 +173,15 @@ export interface PubsubClient {
) => Promise<void> ) => Promise<void>
entityCreated: <T extends Record<string, any>>( entityCreated: <T extends Record<string, any>>(
type: EntityType, type: EntityType,
data: EntityData<T>, data: T,
userId: string userId: string,
libraryItemId: string
) => Promise<void> ) => Promise<void>
entityUpdated: <T extends Record<string, any>>( entityUpdated: <T extends Record<string, any>>(
type: EntityType, type: EntityType,
data: EntityData<T>, data: T,
userId: string userId: string,
libraryItemId: string
) => Promise<void> ) => Promise<void>
entityDeleted: (type: EntityType, id: string, userId: string) => Promise<void> entityDeleted: (type: EntityType, id: string, userId: string) => Promise<void>
reportSubmitted( reportSubmitted(

View file

@ -59,7 +59,8 @@ export const createHighlight = async (
await pubsub.entityCreated<CreateHighlightEvent>( await pubsub.entityCreated<CreateHighlightEvent>(
EntityType.HIGHLIGHT, EntityType.HIGHLIGHT,
{ ...newHighlight, pageId: libraryItemId }, { ...newHighlight, pageId: libraryItemId },
userId userId,
libraryItemId
) )
await enqueueUpdateHighlight({ await enqueueUpdateHighlight({
@ -106,7 +107,8 @@ export const mergeHighlights = async (
await pubsub.entityCreated<CreateHighlightEvent>( await pubsub.entityCreated<CreateHighlightEvent>(
EntityType.HIGHLIGHT, EntityType.HIGHLIGHT,
{ ...newHighlight, pageId: libraryItemId }, { ...newHighlight, pageId: libraryItemId },
userId userId,
libraryItemId
) )
await enqueueUpdateHighlight({ await enqueueUpdateHighlight({
@ -139,8 +141,9 @@ export const updateHighlight = async (
const libraryItemId = updatedHighlight.libraryItem.id const libraryItemId = updatedHighlight.libraryItem.id
await pubsub.entityUpdated<UpdateHighlightEvent>( await pubsub.entityUpdated<UpdateHighlightEvent>(
EntityType.HIGHLIGHT, EntityType.HIGHLIGHT,
{ ...highlight, id: highlightId, pageId: libraryItemId, libraryItemId }, { ...highlight, id: highlightId, pageId: libraryItemId },
userId userId,
libraryItemId
) )
await enqueueUpdateHighlight({ await enqueueUpdateHighlight({

View file

@ -11,13 +11,11 @@ import { findHighlightById } from './highlights'
import { findLibraryItemIdsByLabelId } from './library_item' import { findLibraryItemIdsByLabelId } from './library_item'
type AddLabelsToLibraryItemEvent = { type AddLabelsToLibraryItemEvent = {
libraryItemId: string
pageId: string pageId: string
labels: DeepPartial<Label>[] labels: DeepPartial<Label>[]
source?: LabelSource source?: LabelSource
} }
type AddLabelsToHighlightEvent = { type AddLabelsToHighlightEvent = {
libraryItemId: string
highlightId: string highlightId: string
labels: DeepPartial<Label>[] labels: DeepPartial<Label>[]
} }
@ -148,8 +146,9 @@ export const saveLabelsInLibraryItem = async (
// create pubsub event // create pubsub event
await pubsub.entityCreated<AddLabelsToLibraryItemEvent>( await pubsub.entityCreated<AddLabelsToLibraryItemEvent>(
EntityType.LABEL, EntityType.LABEL,
{ pageId: libraryItemId, labels, source, libraryItemId }, { pageId: libraryItemId, labels, source },
userId userId,
libraryItemId
) )
} }
@ -218,8 +217,9 @@ export const saveLabelsInHighlight = async (
// create pubsub event // create pubsub event
await pubsub.entityCreated<AddLabelsToHighlightEvent>( await pubsub.entityCreated<AddLabelsToHighlightEvent>(
EntityType.LABEL, EntityType.LABEL,
{ highlightId, labels, libraryItemId }, { highlightId, labels },
userId userId,
libraryItemId
) )
// update labels in library item // update labels in library item

View file

@ -29,7 +29,6 @@ import { logger } from '../utils/logger'
import { parseSearchQuery } from '../utils/search' import { parseSearchQuery } from '../utils/search'
import { addLabelsToLibraryItem } from './labels' import { addLabelsToLibraryItem } from './labels'
type ItemEvent = { libraryItemId: string; userId: string }
type IgnoredFields = type IgnoredFields =
| 'user' | 'user'
| 'uploadFile' | 'uploadFile'
@ -39,14 +38,10 @@ type IgnoredFields =
| 'links' | 'links'
| 'recommenderNames' | 'recommenderNames'
| 'textContentHash' | 'textContentHash'
export type CreateItemEvent = Omit<DeepPartial<LibraryItem>, IgnoredFields>
type CreateItemEvent = Merge< export type UpdateItemEvent = Omit<
Omit<DeepPartial<LibraryItem>, IgnoredFields>, QueryDeepPartialEntity<LibraryItem>,
ItemEvent IgnoredFields
>
type UpdateItemEvent = Merge<
Omit<QueryDeepPartialEntity<LibraryItem>, IgnoredFields>,
ItemEvent
> >
enum ReadFilter { enum ReadFilter {
@ -861,12 +856,9 @@ export const updateLibraryItem = async (
// send create event if the item was created // send create event if the item was created
await pubsub.entityCreated<CreateItemEvent>( await pubsub.entityCreated<CreateItemEvent>(
EntityType.PAGE, EntityType.PAGE,
{ updatedLibraryItem,
...updatedLibraryItem, userId,
libraryItemId: id, id
userId,
},
userId
) )
return updatedLibraryItem return updatedLibraryItem
@ -874,13 +866,9 @@ export const updateLibraryItem = async (
await pubsub.entityUpdated<UpdateItemEvent>( await pubsub.entityUpdated<UpdateItemEvent>(
EntityType.PAGE, EntityType.PAGE,
{ libraryItem,
...libraryItem, userId,
id, id
libraryItemId: id,
userId,
},
userId
) )
return updatedLibraryItem return updatedLibraryItem
@ -1034,12 +1022,9 @@ export const createOrUpdateLibraryItem = async (
await pubsub.entityCreated<CreateItemEvent>( await pubsub.entityCreated<CreateItemEvent>(
EntityType.PAGE, EntityType.PAGE,
{ newLibraryItem,
...newLibraryItem, userId,
libraryItemId: newLibraryItem.id, newLibraryItem.id
userId,
},
userId
) )
return newLibraryItem return newLibraryItem