From c59cf9cf659f61d5bffcf47db735110b74f091e4 Mon Sep 17 00:00:00 2001 From: Hongbo Wu Date: Wed, 1 Jun 2022 19:01:14 +0800 Subject: [PATCH 01/15] Add labels in highlight properties --- .../db/elastic_migrations/index_settings.json | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/packages/db/elastic_migrations/index_settings.json b/packages/db/elastic_migrations/index_settings.json index d5dca4841..fabe31d49 100644 --- a/packages/db/elastic_migrations/index_settings.json +++ b/packages/db/elastic_migrations/index_settings.json @@ -90,6 +90,27 @@ }, "updatedAt": { "type": "date" + }, + "labels": { + "type": "nested", + "properties": { + "id": { + "type": "keyword" + }, + "name": { + "type": "keyword", + "normalizer": "lowercase_normalizer" + }, + "color": { + "type": "keyword" + }, + "description": { + "type": "text" + }, + "createdAt": { + "type": "date" + } + } } } }, From 04f7fdc31f162ce84cebb4ac57b798fd4eab54ef Mon Sep 17 00:00:00 2001 From: Hongbo Wu Date: Wed, 1 Jun 2022 19:01:26 +0800 Subject: [PATCH 02/15] Add labels in highlight type --- packages/api/src/elastic/types.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/api/src/elastic/types.ts b/packages/api/src/elastic/types.ts index 030c2a98e..78c298678 100644 --- a/packages/api/src/elastic/types.ts +++ b/packages/api/src/elastic/types.ts @@ -163,6 +163,7 @@ export interface Highlight { annotation?: string | null sharedAt?: Date | null updatedAt?: Date | null + labels?: Label[] } export interface Page { From bdda54d54aee3ce4b9f2ca49a7e52d9ca295da33 Mon Sep 17 00:00:00 2001 From: Hongbo Wu Date: Mon, 6 Jun 2022 19:15:03 +0800 Subject: [PATCH 03/15] Add set Labels For Highlight data access method --- packages/api/src/elastic/labels.ts | 57 ++++++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) diff --git a/packages/api/src/elastic/labels.ts b/packages/api/src/elastic/labels.ts index 4741fd9b0..e69f8312e 100644 --- a/packages/api/src/elastic/labels.ts +++ b/packages/api/src/elastic/labels.ts @@ -198,3 +198,60 @@ export const updateLabelInPage = async ( return false } } + +export const setLabelsForHighlight = async ( + highlightId: string, + labels: Label[], + ctx: PageContext +): Promise => { + try { + const { body } = await client.updateByQuery({ + index: INDEX_ALIAS, + body: { + script: { + source: `ctx._source.highlights[0].labels = params.labels`, + lang: 'painless', + params: { + labels: labels, + }, + }, + query: { + nested: { + path: 'highlights', + query: { + term: { + 'highlights.id': highlightId, + }, + }, + }, + }, + }, + refresh: ctx.refresh, + conflicts: 'proceed', // ignore conflicts + }) + + if (!body.updated) { + return false + } + + for (const label of labels) { + await ctx.pubsub.entityCreated