diff --git a/sci-log-db/src/__tests__/acceptance/paragraph.controller.acceptance.ts b/sci-log-db/src/__tests__/acceptance/paragraph.controller.acceptance.ts index c66c202a..57345f04 100644 --- a/sci-log-db/src/__tests__/acceptance/paragraph.controller.acceptance.ts +++ b/sci-log-db/src/__tests__/acceptance/paragraph.controller.acceptance.ts @@ -227,6 +227,31 @@ describe('Paragraph', function (this: Suite) { }); }); + it('posts a comment with tags and should update the parent', async () => { + await client + .post('/paragraphs') + .set('Authorization', 'Bearer ' + token) + .set('Content-Type', 'application/json') + .send({ + ...paragraphSnippet, + tags: ['another'], + linkType: 'comment', + parentId: paragraphSnippetId, + }) + .expect(200); + await client + .get(`/paragraphs/${paragraphSnippetId}`) + .set('Authorization', 'Bearer ' + token) + .set('Content-Type', 'application/json') + .expect(200) + .then(result => + expect(result.body.tags).to.eql(['aSearchExcludedTag', 'another']), + ) + .catch(err => { + throw err; + }); + }); + it('delete snippet by id without token should return 401', async () => { await client .delete(`/paragraphs/${paragraphSnippetId}`) diff --git a/sci-log-db/src/mixins/basesnippet.repository-mixin.ts b/sci-log-db/src/mixins/basesnippet.repository-mixin.ts index dac2b36d..06bbd417 100644 --- a/sci-log-db/src/mixins/basesnippet.repository-mixin.ts +++ b/sci-log-db/src/mixins/basesnippet.repository-mixin.ts @@ -27,8 +27,9 @@ import {AutoAddRepository} from '../repositories/autoadd.repository.base'; const fs = require('fs'); type ExpandedBasesnippet = Basesnippet & { - ownerGroup: string; - accessGroups: string[]; + ownerGroup?: string; + accessGroups?: string[]; + tags?: string[]; }; function UpdateAndDeleteRepositoryMixin< @@ -252,6 +253,20 @@ function UpdateAndDeleteRepositoryMixin< }); } } + + private async updateParentTagsOnComment(basesnippet: Paragraph) { + if (basesnippet.linkType !== 'comment') return; + const self = this as unknown as AutoAddRepository; + const parent = (await self.getParent(basesnippet)) as Paragraph; + const tags = arrayOfUniqueFrom(parent.tags, basesnippet.tags); + if (!_.isEqual(tags, parent.tags)) + await this.updateByIdWithHistory( + parent.id as ID, + {tags: tags} as ExpandedBasesnippet, + {currentUser: {roles: ['admin']}}, + false, + ); + } } return Mixed; } diff --git a/sci-log-db/src/repositories/autoadd.repository.base.ts b/sci-log-db/src/repositories/autoadd.repository.base.ts index 3504403b..d1365786 100644 --- a/sci-log-db/src/repositories/autoadd.repository.base.ts +++ b/sci-log-db/src/repositories/autoadd.repository.base.ts @@ -132,7 +132,7 @@ export class AutoAddRepository< ); } - private async getParent( + async getParent( data: (Basesnippet | Logbook) & { ownerGroup?: string | undefined; accessGroups?: string[]; @@ -357,6 +357,10 @@ export class AutoAddRepository< // ctx.instance.unsetAttribute('id') } } + const baseSnippetRepository = await this.baseSnippetRepository(); + await baseSnippetRepository.updateParentTagsOnComment( + ctx.data ?? ctx.instance, + ); sanitizeTextContentInPlace(ctx.data ?? ctx.instance); console.log('going to save:' + JSON.stringify(ctx, null, 3)); });