From 381e9bc173cccd190c71c453ba6ef965f9a2432b Mon Sep 17 00:00:00 2001 From: Hongbo Wu Date: Thu, 31 Aug 2023 15:26:30 +0800 Subject: [PATCH] replace database subscriber with db trigger --- .../api/src/events/highlight_subscriber.ts | 103 ------------------ .../api/src/events/library_item_subscriber.ts | 83 -------------- packages/api/src/repository/api_key.ts | 4 + packages/api/src/repository/index.ts | 17 ++- packages/api/src/repository/label.ts | 88 +++++++++++++++ packages/api/src/repository/upload_file.ts | 4 + packages/api/src/resolvers/api_key/index.ts | 15 ++- packages/api/src/resolvers/article/index.ts | 90 ++++++--------- packages/api/src/resolvers/labels/index.ts | 6 +- .../src/services/create_page_save_request.ts | 2 +- packages/api/src/services/labels.ts | 56 +++++----- packages/api/src/services/save_file.ts | 4 +- packages/api/src/services/save_page.ts | 4 +- packages/api/src/services/save_url.ts | 4 +- .../db/migrations/0118.do.library_item.sql | 10 +- .../db/migrations/0119.do.entity_labels.sql | 56 +++++++++- .../db/migrations/0119.undo.entity_labels.sql | 3 + .../migrations/0121.do.update_highlight.sql | 30 +++++ .../migrations/0121.undo.update_highlight.sql | 3 + 19 files changed, 275 insertions(+), 307 deletions(-) delete mode 100644 packages/api/src/events/highlight_subscriber.ts delete mode 100644 packages/api/src/events/library_item_subscriber.ts create mode 100644 packages/api/src/repository/api_key.ts create mode 100644 packages/api/src/repository/label.ts create mode 100644 packages/api/src/repository/upload_file.ts diff --git a/packages/api/src/events/highlight_subscriber.ts b/packages/api/src/events/highlight_subscriber.ts deleted file mode 100644 index f5725bd3b..000000000 --- a/packages/api/src/events/highlight_subscriber.ts +++ /dev/null @@ -1,103 +0,0 @@ -import { - EntityManager, - EntitySubscriberInterface, - EventSubscriber, - InsertEvent, - ObjectLiteral, - RemoveEvent, - UpdateEvent, -} from 'typeorm' -import { Highlight } from '../entity/highlight' -import { Label } from '../entity/label' -import { LibraryItem } from '../entity/library_item' -import { createPubSubClient, EntityType } from '../pubsub' - -@EventSubscriber() -export class HighlightSubscriber - implements EntitySubscriberInterface -{ - private readonly pubsubClient = createPubSubClient() - - async updateLibraryItem(manager: EntityManager, libraryItemId: string) { - // get all the highlights belonging to the library_item - const highlights = await manager.getRepository(Highlight).find({ - where: { libraryItem: { id: libraryItemId } }, - relations: { - labels: true, - }, - }) - - const highlightLabels: string[] = [] - const highlightAnnotations: string[] = [] - - // for each highlight, add the lowercased label names to highlight_labels - // and the annotation to highlight_annotations - highlights.forEach((highlight) => { - highlight.labels && - highlightLabels.push( - ...highlight.labels.map((label) => label.name.toLowerCase()) - ) - highlightAnnotations.push(highlight.annotation || '') - }) - - // update highlight_labels and highlight_annotations on library_item - await manager.update(LibraryItem, libraryItemId, { - highlightAnnotations, - highlightLabels, - }) - } - - listenTo() { - return Highlight - } - - async afterInsert(event: InsertEvent): Promise { - await this.updateLibraryItem(event.manager, event.entity.libraryItem.id) - - await this.pubsubClient.entityCreated( - EntityType.HIGHLIGHT, - event.entity, - event.entity.libraryItem.user.id - ) - } - - async afterUpdate(event: UpdateEvent): Promise { - if (event.entity) { - await this.updateLibraryItem( - event.manager, - event.databaseEntity.libraryItem.id - ) - - // publish update event - await this.pubsubClient.entityUpdated( - EntityType.HIGHLIGHT, - { ...event.entity, libraryItem: event.databaseEntity.libraryItem }, - event.databaseEntity.libraryItem.user.id - ) - - // publish label added event if a label was added - if (event.entity.labels) { - await this.pubsubClient.entityCreated