From 9e22638fc282d254a00fb882d259c09a3773db53 Mon Sep 17 00:00:00 2001 From: Lauren Liberda Date: Tue, 20 Jul 2021 23:32:48 +0200 Subject: [PATCH] item ancestors --- src/items/items.model.ts | 3 +++ src/items/items.resolver.ts | 5 +++++ src/items/items.service.ts | 8 ++++++++ 3 files changed, 16 insertions(+) diff --git a/src/items/items.model.ts b/src/items/items.model.ts index b583259..0e1f742 100644 --- a/src/items/items.model.ts +++ b/src/items/items.model.ts @@ -16,6 +16,9 @@ export class ItemModel { @Field({ nullable: true }) parent?: ItemModel; + @Field((type) => [ItemModel]) + ancestors: ItemModel[]; + @Field((type) => [ItemModel]) children: ItemModel[]; diff --git a/src/items/items.resolver.ts b/src/items/items.resolver.ts index 78bac4d..81d6c95 100644 --- a/src/items/items.resolver.ts +++ b/src/items/items.resolver.ts @@ -25,6 +25,11 @@ export class ItemsResolver { return this.itemsService.getItemParent(item); } + @ResolveField() + async ancestors(@Parent() item: ItemModel) { + return this.itemsService.getItemAncestors(item); + } + @ResolveField() async children(@Parent() item: ItemModel) { return this.itemsService.getItemChildren(item); diff --git a/src/items/items.service.ts b/src/items/items.service.ts index 5d1de00..0e577e5 100644 --- a/src/items/items.service.ts +++ b/src/items/items.service.ts @@ -28,6 +28,14 @@ export class ItemsService { return childItem.parent; } + async getItemAncestors(item: ItemModel): Promise { + const childItem = await this.itemRepository.findOneOrFail(item.id, { + relations: ['parent'], + }); + // TreeRepository.findAncestors()[0] is always the child item + return (await this.treeRepository.findAncestors(childItem)).slice(1); + } + async getItemChildren(item: ItemModel): Promise { return this.itemRepository.find({ where: {