From 8cd4b52738ae041d8adae43adc4d3a604cfbb45f Mon Sep 17 00:00:00 2001 From: kim Date: Fri, 5 Apr 2024 16:40:00 +0200 Subject: [PATCH 01/11] feat: add bookmark, like, recycled, published packed item --- src/itemBookmark/itemBookmark.ts | 7 +++++++ src/itemLike/itemLike.ts | 7 +++++++ src/itemPublished/itemPublished.ts | 10 +++++++++- src/itemRecycled/itemRecycled.ts | 8 ++++++++ 4 files changed, 31 insertions(+), 1 deletion(-) diff --git a/src/itemBookmark/itemBookmark.ts b/src/itemBookmark/itemBookmark.ts index d9028e8e..a606cdf7 100644 --- a/src/itemBookmark/itemBookmark.ts +++ b/src/itemBookmark/itemBookmark.ts @@ -1,4 +1,5 @@ import { DiscriminatedItem } from '@/item/item.js'; +import { PackedItem } from '@/item/packedItem.js'; import { UUID } from '@/types.js'; export type ItemBookmark = { @@ -7,6 +8,12 @@ export type ItemBookmark = { createdAt: string; }; +export type PackedItemBookmark = { + id: UUID; + item: PackedItem; + createdAt: string; +}; + /** * @deprecated use ItemBookmark */ diff --git a/src/itemLike/itemLike.ts b/src/itemLike/itemLike.ts index 732aab9c..a5839b63 100644 --- a/src/itemLike/itemLike.ts +++ b/src/itemLike/itemLike.ts @@ -1,4 +1,5 @@ import { DiscriminatedItem } from '@/item/item.js'; +import { PackedItem } from '@/item/packedItem.js'; import { UUID } from '@/types.js'; export type ItemLike = { @@ -6,3 +7,9 @@ export type ItemLike = { item: DiscriminatedItem; createdAt: string; }; + +export type PackedItemLike = { + id: UUID; + item: PackedItem; + createdAt: string; +}; diff --git a/src/itemPublished/itemPublished.ts b/src/itemPublished/itemPublished.ts index fe7c92ce..02472ae2 100644 --- a/src/itemPublished/itemPublished.ts +++ b/src/itemPublished/itemPublished.ts @@ -1,4 +1,4 @@ -import { DiscriminatedItem, Member } from '../index.js'; +import { DiscriminatedItem, Member, PackedItem } from '../index.js'; import { UUID } from '@/types.js'; export interface ItemPublished { @@ -8,3 +8,11 @@ export interface ItemPublished { item: DiscriminatedItem; totalViews: number; } + +export interface PackedItemPublished { + id: UUID; + creator?: Member; + createdAt: string; + item: PackedItem; + totalViews: number; +} diff --git a/src/itemRecycled/itemRecycled.ts b/src/itemRecycled/itemRecycled.ts index 89faeaf0..7cc191b9 100644 --- a/src/itemRecycled/itemRecycled.ts +++ b/src/itemRecycled/itemRecycled.ts @@ -1,4 +1,5 @@ import { DiscriminatedItem } from '@/item/item.js'; +import { PackedItem } from '@/item/packedItem.js'; import { Member } from '@/member/member.js'; export type RecycledItemData = { @@ -7,3 +8,10 @@ export type RecycledItemData = { createdAt: string; item: DiscriminatedItem; }; + +export type PackedRecycledItemData = { + id: string; + creator: Member; + createdAt: string; + item: PackedItem; +}; From 0027b04789ec2c32fcdf96ddf9c5b22bb468063f Mon Sep 17 00:00:00 2001 From: kim Date: Tue, 9 Apr 2024 11:54:55 +0200 Subject: [PATCH 02/11] refactor: add hidden and public in packed --- src/item/packedItem.ts | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/item/packedItem.ts b/src/item/packedItem.ts index 4e152910..3df9361a 100644 --- a/src/item/packedItem.ts +++ b/src/item/packedItem.ts @@ -1,9 +1,12 @@ import { ItemMembership } from '../itemMembership/itemMembership.js'; import { DiscriminatedItem } from './item.js'; import { ItemSettings } from './itemSettings.js'; +import { ItemTag } from '@/itemTag/itemTag.js'; export type PackedInformation = { permission: ItemMembership['permission'] | null; + hidden: ItemTag; + public: ItemTag; }; /** From 095bc786169268dd6a42382687271acd9061ba42 Mon Sep 17 00:00:00 2001 From: kim Date: Tue, 9 Apr 2024 11:59:12 +0200 Subject: [PATCH 03/11] refactor: update packed --- src/item/packedItem.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/item/packedItem.ts b/src/item/packedItem.ts index 3df9361a..a9009d45 100644 --- a/src/item/packedItem.ts +++ b/src/item/packedItem.ts @@ -5,8 +5,8 @@ import { ItemTag } from '@/itemTag/itemTag.js'; export type PackedInformation = { permission: ItemMembership['permission'] | null; - hidden: ItemTag; - public: ItemTag; + hidden?: ItemTag; + public?: ItemTag; }; /** From 9ab2c15d15c90b21d7a527e601ff5628c9d47358 Mon Sep 17 00:00:00 2001 From: kim Date: Wed, 10 Apr 2024 09:25:49 +0200 Subject: [PATCH 04/11] refactor: fix factories --- src/item/appItem/appItem.factory.ts | 2 +- src/item/documentItem/documentItem.factory.ts | 2 +- src/item/etherpadItem/etherpadItem.factory.ts | 2 +- src/item/fileItem/fileItem.factory.ts | 4 ++-- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/item/appItem/appItem.factory.ts b/src/item/appItem/appItem.factory.ts index 293cd68c..224f90fc 100644 --- a/src/item/appItem/appItem.factory.ts +++ b/src/item/appItem/appItem.factory.ts @@ -27,7 +27,7 @@ export const AppItemFactory = ( export const PackedAppItemFactory = ( item: ItemFactoryInputType = {}, - packedInfo: Partial, + packedInfo: Partial = {}, ): ItemFactoryOutputType => { const newItem = AppItemFactory(item); return { diff --git a/src/item/documentItem/documentItem.factory.ts b/src/item/documentItem/documentItem.factory.ts index e3a2bf26..2485f5f8 100644 --- a/src/item/documentItem/documentItem.factory.ts +++ b/src/item/documentItem/documentItem.factory.ts @@ -28,7 +28,7 @@ export const DocumentItemFactory = ( export const PackedDocumentItemFactory = ( item: ItemFactoryInputType = {}, - packedInfo: Partial, + packedInfo: Partial = {}, ): ItemFactoryOutputType => { const newItem = DocumentItemFactory(item); return { diff --git a/src/item/etherpadItem/etherpadItem.factory.ts b/src/item/etherpadItem/etherpadItem.factory.ts index 2f6c169c..beb1340a 100644 --- a/src/item/etherpadItem/etherpadItem.factory.ts +++ b/src/item/etherpadItem/etherpadItem.factory.ts @@ -29,7 +29,7 @@ export const EtherpadItemFactory = ( export const PackedEtherpadItemFactory = ( item: ItemFactoryInputType = {}, - packedInfo: Partial, + packedInfo: Partial = {}, ): ItemFactoryOutputType => { const newItem = EtherpadItemFactory(item); return { diff --git a/src/item/fileItem/fileItem.factory.ts b/src/item/fileItem/fileItem.factory.ts index fbb7ad95..15823d3e 100644 --- a/src/item/fileItem/fileItem.factory.ts +++ b/src/item/fileItem/fileItem.factory.ts @@ -33,7 +33,7 @@ export const LocalFileItemFactory = ( export const PackedLocalFileItemFactory = ( item: ItemFactoryInputType = {}, - packedInfo: Partial, + packedInfo: Partial = {}, ): ItemFactoryOutputType => { const newItem = LocalFileItemFactory(item); return { @@ -69,7 +69,7 @@ export const S3FileItemFactory = ( export const PackedS3FileItemFactory = ( item: ItemFactoryInputType = {}, - packedInfo: Partial, + packedInfo: Partial = {}, ): ItemFactoryOutputType => { const newItem = S3FileItemFactory(item); return { From bd8514a49d11564d02cbabb82de3d96f9ef33838 Mon Sep 17 00:00:00 2001 From: kim Date: Thu, 11 Apr 2024 16:47:06 +0200 Subject: [PATCH 05/11] refactor: add recycled item factory --- src/index.ts | 1 + src/itemRecycled/itemRecycled.factory.ts | 38 ++++++++++++++++++++++++ 2 files changed, 39 insertions(+) create mode 100644 src/itemRecycled/itemRecycled.factory.ts diff --git a/src/index.ts b/src/index.ts index 58133315..63fa8d4c 100644 --- a/src/index.ts +++ b/src/index.ts @@ -193,6 +193,7 @@ export * from './itemPublished/itemPublished.js'; * Item Recycled */ export * from './itemRecycled/itemRecycled.js'; +export * from './itemRecycled/itemRecycled.factory.js'; /** * Item Tag diff --git a/src/itemRecycled/itemRecycled.factory.ts b/src/itemRecycled/itemRecycled.factory.ts new file mode 100644 index 00000000..c0bf2839 --- /dev/null +++ b/src/itemRecycled/itemRecycled.factory.ts @@ -0,0 +1,38 @@ +import { + FolderItemFactory, + PackedFolderItemFactory, +} from '@/item/folderItem/folderItem.factory.js'; +import { FolderItemType } from '@/item/folderItem/folderItem.js'; +import { MemberFactory } from '@/member/factory.js'; +import { Member } from '@/member/member.js'; +import { faker } from '@faker-js/faker'; + +export const RecycledItemDataFactory = (args: { + creator?: Member; + createdAt?: string; + item?: FolderItemType; +}) => { + const createdAt: string = + args.createdAt ?? faker.date.anytime().toISOString(); + return { + id: faker.string.uuid(), + creator: MemberFactory(args.creator), + createdAt, + item: FolderItemFactory(args.item), + }; +}; + +export const PackedRecycledItemDataFactory = (args: { + creator?: Member; + createdAt?: string; + item?: FolderItemType; +}) => { + const createdAt: string = + args.createdAt ?? faker.date.anytime().toISOString(); + return { + id: faker.string.uuid(), + creator: MemberFactory(args.creator), + createdAt, + item: PackedFolderItemFactory(args.item), + }; +}; From 4a440d8d72a389f896b93873a43f67396e85a1d1 Mon Sep 17 00:00:00 2001 From: kim Date: Thu, 11 Apr 2024 16:49:04 +0200 Subject: [PATCH 06/11] refactor: set default value --- src/itemRecycled/itemRecycled.factory.ts | 24 ++++++++++++++---------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/src/itemRecycled/itemRecycled.factory.ts b/src/itemRecycled/itemRecycled.factory.ts index c0bf2839..bfad6d79 100644 --- a/src/itemRecycled/itemRecycled.factory.ts +++ b/src/itemRecycled/itemRecycled.factory.ts @@ -7,11 +7,13 @@ import { MemberFactory } from '@/member/factory.js'; import { Member } from '@/member/member.js'; import { faker } from '@faker-js/faker'; -export const RecycledItemDataFactory = (args: { - creator?: Member; - createdAt?: string; - item?: FolderItemType; -}) => { +export const RecycledItemDataFactory = ( + args: { + creator?: Member; + createdAt?: string; + item?: FolderItemType; + } = {}, +) => { const createdAt: string = args.createdAt ?? faker.date.anytime().toISOString(); return { @@ -22,11 +24,13 @@ export const RecycledItemDataFactory = (args: { }; }; -export const PackedRecycledItemDataFactory = (args: { - creator?: Member; - createdAt?: string; - item?: FolderItemType; -}) => { +export const PackedRecycledItemDataFactory = ( + args: { + creator?: Member; + createdAt?: string; + item?: FolderItemType; + } = {}, +) => { const createdAt: string = args.createdAt ?? faker.date.anytime().toISOString(); return { From 28163622361ef582b5a501fa4b2a9647f36dc937 Mon Sep 17 00:00:00 2001 From: kim Date: Thu, 11 Apr 2024 16:54:39 +0200 Subject: [PATCH 07/11] refactor: add bookmark factory --- src/index.ts | 1 + src/itemBookmark/itemBookmark.factory.ts | 37 ++++++++++++++++++++++++ src/itemRecycled/itemRecycled.factory.ts | 5 ++-- 3 files changed, 41 insertions(+), 2 deletions(-) create mode 100644 src/itemBookmark/itemBookmark.factory.ts diff --git a/src/index.ts b/src/index.ts index 63fa8d4c..b9081b74 100644 --- a/src/index.ts +++ b/src/index.ts @@ -158,6 +158,7 @@ export * from './item/shortcutItem/shortcutItem.factory.js'; * Item Bookmark */ export * from './itemBookmark/itemBookmark.js'; +export * from './itemBookmark/itemBookmark.factory.js'; /** * Item Flag diff --git a/src/itemBookmark/itemBookmark.factory.ts b/src/itemBookmark/itemBookmark.factory.ts new file mode 100644 index 00000000..e4204226 --- /dev/null +++ b/src/itemBookmark/itemBookmark.factory.ts @@ -0,0 +1,37 @@ +import { ItemFactoryInputType } from '@/item/factory.js'; +import { + FolderItemFactory, + PackedFolderItemFactory, +} from '@/item/folderItem/folderItem.factory.js'; +import { FolderItemType } from '@/item/folderItem/folderItem.js'; +import { faker } from '@faker-js/faker'; + +export const ItemBookmarkFactory = ( + args: { + createdAt?: string; + item?: ItemFactoryInputType; + } = {}, +) => { + const createdAt: string = + args.createdAt ?? faker.date.anytime().toISOString(); + return { + id: faker.string.uuid(), + createdAt, + item: FolderItemFactory(args.item), + }; +}; + +export const PackedItemBookmarkFactory = ( + args: { + createdAt?: string; + item?: ItemFactoryInputType; + } = {}, +) => { + const createdAt: string = + args.createdAt ?? faker.date.anytime().toISOString(); + return { + id: faker.string.uuid(), + createdAt, + item: PackedFolderItemFactory(args.item), + }; +}; diff --git a/src/itemRecycled/itemRecycled.factory.ts b/src/itemRecycled/itemRecycled.factory.ts index bfad6d79..37087bac 100644 --- a/src/itemRecycled/itemRecycled.factory.ts +++ b/src/itemRecycled/itemRecycled.factory.ts @@ -1,3 +1,4 @@ +import { ItemFactoryInputType } from '@/item/factory.js'; import { FolderItemFactory, PackedFolderItemFactory, @@ -11,7 +12,7 @@ export const RecycledItemDataFactory = ( args: { creator?: Member; createdAt?: string; - item?: FolderItemType; + item?: ItemFactoryInputType; } = {}, ) => { const createdAt: string = @@ -28,7 +29,7 @@ export const PackedRecycledItemDataFactory = ( args: { creator?: Member; createdAt?: string; - item?: FolderItemType; + item?: ItemFactoryInputType; } = {}, ) => { const createdAt: string = From e3ef31187f48dfd56409f342fe3366428394df20 Mon Sep 17 00:00:00 2001 From: kim Date: Fri, 12 Apr 2024 14:41:02 +0200 Subject: [PATCH 08/11] refactor: update hidden in packed item factories --- src/item/appItem/appItem.factory.ts | 12 ++++------ src/item/documentItem/documentItem.factory.ts | 12 ++++------ src/item/etherpadItem/etherpadItem.factory.ts | 12 ++++------ src/item/factory.ts | 23 +++++++++++++++++++ src/item/fileItem/fileItem.factory.ts | 20 +++++++--------- src/item/folderItem/folderItem.factory.ts | 12 ++++------ src/item/h5pItem/h5pItem.factory.ts | 12 ++++------ src/item/linkItem/linkItem.factory.ts | 12 ++++------ src/item/shortcutItem/shortcutItem.factory.ts | 12 ++++------ src/itemTag/itemTag.factory.ts | 14 +++++++++++ 10 files changed, 80 insertions(+), 61 deletions(-) create mode 100644 src/itemTag/itemTag.factory.ts diff --git a/src/item/appItem/appItem.factory.ts b/src/item/appItem/appItem.factory.ts index 224f90fc..a6642cc2 100644 --- a/src/item/appItem/appItem.factory.ts +++ b/src/item/appItem/appItem.factory.ts @@ -1,12 +1,12 @@ import { ItemFactoryInputType, ItemFactoryOutputType, + PackedInformationFactory, + PackedInformationFactoryInput, PartialItemFactory, } from '../factory.js'; import { ItemType } from '../itemType.js'; -import { PackedInformation } from '../packedItem.js'; import { AppItemType } from './appItem.js'; -import { PermissionLevel } from '@/enums/permissionLevel/permissionLevel.js'; import { faker } from '@faker-js/faker'; export const AppItemFactory = ( @@ -27,14 +27,12 @@ export const AppItemFactory = ( export const PackedAppItemFactory = ( item: ItemFactoryInputType = {}, - packedInfo: Partial = {}, + packedInfo: PackedInformationFactoryInput = {}, ): ItemFactoryOutputType => { const newItem = AppItemFactory(item); + const packed = PackedInformationFactory(packedInfo); return { ...newItem, - - // default packed info - permission: PermissionLevel.Admin, - ...packedInfo, + ...packed, }; }; diff --git a/src/item/documentItem/documentItem.factory.ts b/src/item/documentItem/documentItem.factory.ts index 2485f5f8..2d6b4577 100644 --- a/src/item/documentItem/documentItem.factory.ts +++ b/src/item/documentItem/documentItem.factory.ts @@ -1,12 +1,12 @@ import { ItemFactoryInputType, ItemFactoryOutputType, + PackedInformationFactory, + PackedInformationFactoryInput, PartialItemFactory, } from '../factory.js'; import { ItemType } from '../itemType.js'; -import { PackedInformation } from '../packedItem.js'; import { DocumentItemType } from './documentItem.js'; -import { PermissionLevel } from '@/enums/permissionLevel/permissionLevel.js'; import { faker } from '@faker-js/faker'; export const DocumentItemFactory = ( @@ -28,14 +28,12 @@ export const DocumentItemFactory = ( export const PackedDocumentItemFactory = ( item: ItemFactoryInputType = {}, - packedInfo: Partial = {}, + packedInfo: PackedInformationFactoryInput = {}, ): ItemFactoryOutputType => { const newItem = DocumentItemFactory(item); + const packed = PackedInformationFactory(packedInfo); return { ...newItem, - - // default packed info - permission: PermissionLevel.Admin, - ...packedInfo, + ...packed, }; }; diff --git a/src/item/etherpadItem/etherpadItem.factory.ts b/src/item/etherpadItem/etherpadItem.factory.ts index beb1340a..25458c15 100644 --- a/src/item/etherpadItem/etherpadItem.factory.ts +++ b/src/item/etherpadItem/etherpadItem.factory.ts @@ -1,12 +1,12 @@ import { ItemFactoryInputType, ItemFactoryOutputType, + PackedInformationFactory, + PackedInformationFactoryInput, PartialItemFactory, } from '../factory.js'; import { ItemType } from '../itemType.js'; -import { PackedInformation } from '../packedItem.js'; import { EtherpadItemType } from './etherpadItem.js'; -import { PermissionLevel } from '@/enums/permissionLevel/permissionLevel.js'; import { faker } from '@faker-js/faker'; export const EtherpadItemFactory = ( @@ -29,14 +29,12 @@ export const EtherpadItemFactory = ( export const PackedEtherpadItemFactory = ( item: ItemFactoryInputType = {}, - packedInfo: Partial = {}, + packedInfo: PackedInformationFactoryInput = {}, ): ItemFactoryOutputType => { const newItem = EtherpadItemFactory(item); + const packed = PackedInformationFactory(packedInfo); return { ...newItem, - - // default packed info - permission: PermissionLevel.Admin, - ...packedInfo, + ...packed, }; }; diff --git a/src/item/factory.ts b/src/item/factory.ts index 3551dfb4..61c7fcbe 100644 --- a/src/item/factory.ts +++ b/src/item/factory.ts @@ -3,6 +3,9 @@ import { DiscriminatedItem } from './item.js'; import { buildPathFromIds } from './itemUtils.js'; import { PackedInformation } from './packedItem.js'; import { CCLicenseAdaptions } from '@/enums/ccLicenses.js'; +import { PermissionLevel } from '@/enums/permissionLevel/permissionLevel.js'; +import { ItemTagFactory } from '@/itemTag/itemTag.factory.js'; +import { ItemTag, ItemTagType } from '@/itemTag/itemTag.js'; import { faker } from '@faker-js/faker'; export type ItemFactoryOutputType = Pick< @@ -70,3 +73,23 @@ export const PartialItemFactory = ( lang: item.lang ?? faker.helpers.arrayElement(['fr', 'en']), }; }; + +export type PackedInformationFactoryInput = { + permission?: PermissionLevel; + hidden?: Partial; +}; + +export const PackedInformationFactory = ({ + permission = PermissionLevel.Admin, + hidden, +}: PackedInformationFactoryInput) => { + let hiddenItemTag; + if (hidden) { + hiddenItemTag = ItemTagFactory({ type: ItemTagType.Hidden, ...hidden }); + } + + return { + permission, + ...(hiddenItemTag ? { hidden: hiddenItemTag } : {}), + }; +}; diff --git a/src/item/fileItem/fileItem.factory.ts b/src/item/fileItem/fileItem.factory.ts index 15823d3e..2c34ba2e 100644 --- a/src/item/fileItem/fileItem.factory.ts +++ b/src/item/fileItem/fileItem.factory.ts @@ -1,12 +1,12 @@ import { ItemFactoryInputType, ItemFactoryOutputType, + PackedInformationFactory, + PackedInformationFactoryInput, PartialItemFactory, } from '../factory.js'; import { ItemType } from '../itemType.js'; -import { PackedInformation } from '../packedItem.js'; import { LocalFileItemType, S3FileItemType } from './fileItem.js'; -import { PermissionLevel } from '@/enums/permissionLevel/permissionLevel.js'; import { faker } from '@faker-js/faker'; export const LocalFileItemFactory = ( @@ -33,15 +33,13 @@ export const LocalFileItemFactory = ( export const PackedLocalFileItemFactory = ( item: ItemFactoryInputType = {}, - packedInfo: Partial = {}, + packedInfo: PackedInformationFactoryInput = {}, ): ItemFactoryOutputType => { const newItem = LocalFileItemFactory(item); + const packed = PackedInformationFactory(packedInfo); return { ...newItem, - - // default packed info - permission: PermissionLevel.Admin, - ...packedInfo, + ...packed, }; }; @@ -69,14 +67,12 @@ export const S3FileItemFactory = ( export const PackedS3FileItemFactory = ( item: ItemFactoryInputType = {}, - packedInfo: Partial = {}, + packedInfo: PackedInformationFactoryInput = {}, ): ItemFactoryOutputType => { const newItem = S3FileItemFactory(item); + const packed = PackedInformationFactory(packedInfo); return { ...newItem, - - // default packed info - permission: PermissionLevel.Admin, - ...packedInfo, + ...packed, }; }; diff --git a/src/item/folderItem/folderItem.factory.ts b/src/item/folderItem/folderItem.factory.ts index 4b26f924..c0046bd6 100644 --- a/src/item/folderItem/folderItem.factory.ts +++ b/src/item/folderItem/folderItem.factory.ts @@ -1,13 +1,13 @@ import { ItemFactoryInputType, ItemFactoryOutputType, + PackedInformationFactory, + PackedInformationFactoryInput, PackedItemFactoryOutputType, PartialItemFactory, } from '../factory.js'; import { ItemType } from '../itemType.js'; -import { PackedInformation } from '../packedItem.js'; import { FolderItemType } from './folderItem.js'; -import { PermissionLevel } from '@/enums/permissionLevel/permissionLevel.js'; export const FolderItemFactory = ( item: ItemFactoryInputType = {}, @@ -26,14 +26,12 @@ export const FolderItemFactory = ( export const PackedFolderItemFactory = ( item: ItemFactoryInputType = {}, - packedInfo: Partial = {}, + packedInfo: PackedInformationFactoryInput = {}, ): PackedItemFactoryOutputType => { const newItem = FolderItemFactory(item); + const packed = PackedInformationFactory(packedInfo); return { ...newItem, - - // default packed info - permission: PermissionLevel.Admin, - ...packedInfo, + ...packed, }; }; diff --git a/src/item/h5pItem/h5pItem.factory.ts b/src/item/h5pItem/h5pItem.factory.ts index ebb2398e..dc64c60b 100644 --- a/src/item/h5pItem/h5pItem.factory.ts +++ b/src/item/h5pItem/h5pItem.factory.ts @@ -1,13 +1,13 @@ import { ItemFactoryInputType, ItemFactoryOutputType, + PackedInformationFactory, + PackedInformationFactoryInput, PackedItemFactoryOutputType, PartialItemFactory, } from '../factory.js'; import { ItemType } from '../itemType.js'; -import { PackedInformation } from '../packedItem.js'; import { H5PItemType } from './h5pItem.js'; -import { PermissionLevel } from '@/enums/permissionLevel/permissionLevel.js'; import { faker } from '@faker-js/faker'; export const H5PItemFactory = ( @@ -31,14 +31,12 @@ export const H5PItemFactory = ( export const PackedH5PItemFactory = ( item: ItemFactoryInputType = {}, - packedInfo: Partial = {}, + packedInfo: PackedInformationFactoryInput = {}, ): PackedItemFactoryOutputType => { const newItem = H5PItemFactory(item); + const packed = PackedInformationFactory(packedInfo); return { ...newItem, - - // default packed info - permission: PermissionLevel.Admin, - ...packedInfo, + ...packed, }; }; diff --git a/src/item/linkItem/linkItem.factory.ts b/src/item/linkItem/linkItem.factory.ts index 4d4a8e04..e10091d6 100644 --- a/src/item/linkItem/linkItem.factory.ts +++ b/src/item/linkItem/linkItem.factory.ts @@ -1,13 +1,13 @@ import { ItemFactoryInputType, ItemFactoryOutputType, + PackedInformationFactory, + PackedInformationFactoryInput, PackedItemFactoryOutputType, PartialItemFactory, } from '../factory.js'; import { ItemType } from '../itemType.js'; -import { PackedInformation } from '../packedItem.js'; import { LinkItemType } from './linkItem.js'; -import { PermissionLevel } from '@/enums/permissionLevel/permissionLevel.js'; import { faker } from '@faker-js/faker'; export const LinkItemFactory = ( @@ -38,14 +38,12 @@ export const LinkItemFactory = ( export const PackedLinkItemFactory = ( item: ItemFactoryInputType = {}, - packedInfo: Partial = {}, + packedInfo: PackedInformationFactoryInput = {}, ): PackedItemFactoryOutputType => { const newItem = LinkItemFactory(item); + const packed = PackedInformationFactory(packedInfo); return { ...newItem, - - // default packed info - permission: PermissionLevel.Admin, - ...packedInfo, + ...packed, }; }; diff --git a/src/item/shortcutItem/shortcutItem.factory.ts b/src/item/shortcutItem/shortcutItem.factory.ts index 3bf107c7..0c9ca8fa 100644 --- a/src/item/shortcutItem/shortcutItem.factory.ts +++ b/src/item/shortcutItem/shortcutItem.factory.ts @@ -1,13 +1,13 @@ import { ItemFactoryInputType, ItemFactoryOutputType, + PackedInformationFactory, + PackedInformationFactoryInput, PackedItemFactoryOutputType, PartialItemFactory, } from '../factory.js'; import { ItemType } from '../itemType.js'; -import { PackedInformation } from '../packedItem.js'; import { ShortcutItemType } from './shortcutItem.js'; -import { PermissionLevel } from '@/enums/permissionLevel/permissionLevel.js'; import { faker } from '@faker-js/faker'; export const ShortcutItemFactory = ( @@ -29,14 +29,12 @@ export const ShortcutItemFactory = ( export const PackedShortcutItemFactory = ( item: ItemFactoryInputType = {}, - packedInfo: Partial = {}, + packedInfo: PackedInformationFactoryInput = {}, ): PackedItemFactoryOutputType => { const newItem = ShortcutItemFactory(item); + const packed = PackedInformationFactory(packedInfo); return { ...newItem, - - // default packed info - permission: PermissionLevel.Admin, - ...packedInfo, + ...packed, }; }; diff --git a/src/itemTag/itemTag.factory.ts b/src/itemTag/itemTag.factory.ts new file mode 100644 index 00000000..0231d7b1 --- /dev/null +++ b/src/itemTag/itemTag.factory.ts @@ -0,0 +1,14 @@ +import { ItemTag } from './itemTag.js'; +import { FolderItemFactory } from '@/item/folderItem/folderItem.factory.js'; +import { MemberFactory } from '@/member/factory.js'; +import { faker } from '@faker-js/faker'; + +export const ItemTagFactory = ( + it: Partial & Pick, +): ItemTag => ({ + id: it.id ?? faker.string.uuid(), + createdAt: faker.date.anytime().toISOString(), + item: it.item ?? FolderItemFactory(), + type: it.type, + creator: it.creator ?? MemberFactory(), +}); From 790d330bc930a44ace5054440d65d26bfee78a1a Mon Sep 17 00:00:00 2001 From: kim Date: Fri, 12 Apr 2024 14:44:55 +0200 Subject: [PATCH 09/11] refactor: use current item in factory --- src/item/appItem/appItem.factory.ts | 2 +- src/item/documentItem/documentItem.factory.ts | 2 +- src/item/etherpadItem/etherpadItem.factory.ts | 2 +- src/item/factory.ts | 14 +++++++++----- src/item/fileItem/fileItem.factory.ts | 4 ++-- src/item/folderItem/folderItem.factory.ts | 2 +- src/item/h5pItem/h5pItem.factory.ts | 2 +- src/item/linkItem/linkItem.factory.ts | 2 +- src/item/shortcutItem/shortcutItem.factory.ts | 2 +- 9 files changed, 18 insertions(+), 14 deletions(-) diff --git a/src/item/appItem/appItem.factory.ts b/src/item/appItem/appItem.factory.ts index a6642cc2..71b84ff3 100644 --- a/src/item/appItem/appItem.factory.ts +++ b/src/item/appItem/appItem.factory.ts @@ -30,7 +30,7 @@ export const PackedAppItemFactory = ( packedInfo: PackedInformationFactoryInput = {}, ): ItemFactoryOutputType => { const newItem = AppItemFactory(item); - const packed = PackedInformationFactory(packedInfo); + const packed = PackedInformationFactory(packedInfo, newItem); return { ...newItem, ...packed, diff --git a/src/item/documentItem/documentItem.factory.ts b/src/item/documentItem/documentItem.factory.ts index 2d6b4577..511cb42d 100644 --- a/src/item/documentItem/documentItem.factory.ts +++ b/src/item/documentItem/documentItem.factory.ts @@ -31,7 +31,7 @@ export const PackedDocumentItemFactory = ( packedInfo: PackedInformationFactoryInput = {}, ): ItemFactoryOutputType => { const newItem = DocumentItemFactory(item); - const packed = PackedInformationFactory(packedInfo); + const packed = PackedInformationFactory(packedInfo, newItem); return { ...newItem, ...packed, diff --git a/src/item/etherpadItem/etherpadItem.factory.ts b/src/item/etherpadItem/etherpadItem.factory.ts index 25458c15..c268f6bd 100644 --- a/src/item/etherpadItem/etherpadItem.factory.ts +++ b/src/item/etherpadItem/etherpadItem.factory.ts @@ -32,7 +32,7 @@ export const PackedEtherpadItemFactory = ( packedInfo: PackedInformationFactoryInput = {}, ): ItemFactoryOutputType => { const newItem = EtherpadItemFactory(item); - const packed = PackedInformationFactory(packedInfo); + const packed = PackedInformationFactory(packedInfo, newItem); return { ...newItem, ...packed, diff --git a/src/item/factory.ts b/src/item/factory.ts index 61c7fcbe..ffdd88e0 100644 --- a/src/item/factory.ts +++ b/src/item/factory.ts @@ -79,13 +79,17 @@ export type PackedInformationFactoryInput = { hidden?: Partial; }; -export const PackedInformationFactory = ({ - permission = PermissionLevel.Admin, - hidden, -}: PackedInformationFactoryInput) => { +export const PackedInformationFactory = ( + { permission = PermissionLevel.Admin, hidden }: PackedInformationFactoryInput, + item: DiscriminatedItem, +) => { let hiddenItemTag; if (hidden) { - hiddenItemTag = ItemTagFactory({ type: ItemTagType.Hidden, ...hidden }); + hiddenItemTag = ItemTagFactory({ + type: ItemTagType.Hidden, + item, + ...hidden, + }); } return { diff --git a/src/item/fileItem/fileItem.factory.ts b/src/item/fileItem/fileItem.factory.ts index 2c34ba2e..c5c799e1 100644 --- a/src/item/fileItem/fileItem.factory.ts +++ b/src/item/fileItem/fileItem.factory.ts @@ -36,7 +36,7 @@ export const PackedLocalFileItemFactory = ( packedInfo: PackedInformationFactoryInput = {}, ): ItemFactoryOutputType => { const newItem = LocalFileItemFactory(item); - const packed = PackedInformationFactory(packedInfo); + const packed = PackedInformationFactory(packedInfo, newItem); return { ...newItem, ...packed, @@ -70,7 +70,7 @@ export const PackedS3FileItemFactory = ( packedInfo: PackedInformationFactoryInput = {}, ): ItemFactoryOutputType => { const newItem = S3FileItemFactory(item); - const packed = PackedInformationFactory(packedInfo); + const packed = PackedInformationFactory(packedInfo, newItem); return { ...newItem, ...packed, diff --git a/src/item/folderItem/folderItem.factory.ts b/src/item/folderItem/folderItem.factory.ts index c0046bd6..11ba7af1 100644 --- a/src/item/folderItem/folderItem.factory.ts +++ b/src/item/folderItem/folderItem.factory.ts @@ -29,7 +29,7 @@ export const PackedFolderItemFactory = ( packedInfo: PackedInformationFactoryInput = {}, ): PackedItemFactoryOutputType => { const newItem = FolderItemFactory(item); - const packed = PackedInformationFactory(packedInfo); + const packed = PackedInformationFactory(packedInfo, newItem); return { ...newItem, ...packed, diff --git a/src/item/h5pItem/h5pItem.factory.ts b/src/item/h5pItem/h5pItem.factory.ts index dc64c60b..7286c36c 100644 --- a/src/item/h5pItem/h5pItem.factory.ts +++ b/src/item/h5pItem/h5pItem.factory.ts @@ -34,7 +34,7 @@ export const PackedH5PItemFactory = ( packedInfo: PackedInformationFactoryInput = {}, ): PackedItemFactoryOutputType => { const newItem = H5PItemFactory(item); - const packed = PackedInformationFactory(packedInfo); + const packed = PackedInformationFactory(packedInfo, newItem); return { ...newItem, ...packed, diff --git a/src/item/linkItem/linkItem.factory.ts b/src/item/linkItem/linkItem.factory.ts index e10091d6..1f689d47 100644 --- a/src/item/linkItem/linkItem.factory.ts +++ b/src/item/linkItem/linkItem.factory.ts @@ -41,7 +41,7 @@ export const PackedLinkItemFactory = ( packedInfo: PackedInformationFactoryInput = {}, ): PackedItemFactoryOutputType => { const newItem = LinkItemFactory(item); - const packed = PackedInformationFactory(packedInfo); + const packed = PackedInformationFactory(packedInfo, newItem); return { ...newItem, ...packed, diff --git a/src/item/shortcutItem/shortcutItem.factory.ts b/src/item/shortcutItem/shortcutItem.factory.ts index 0c9ca8fa..ae4affa9 100644 --- a/src/item/shortcutItem/shortcutItem.factory.ts +++ b/src/item/shortcutItem/shortcutItem.factory.ts @@ -32,7 +32,7 @@ export const PackedShortcutItemFactory = ( packedInfo: PackedInformationFactoryInput = {}, ): PackedItemFactoryOutputType => { const newItem = ShortcutItemFactory(item); - const packed = PackedInformationFactory(packedInfo); + const packed = PackedInformationFactory(packedInfo, newItem); return { ...newItem, ...packed, From c7f5f713bb026042cef6a7944f228b4db7d44d5b Mon Sep 17 00:00:00 2001 From: kim Date: Fri, 12 Apr 2024 15:08:15 +0200 Subject: [PATCH 10/11] refactor: inherit hidden and public tag --- src/item/appItem/appItem.factory.ts | 2 +- src/item/documentItem/documentItem.factory.ts | 2 +- src/item/etherpadItem/etherpadItem.factory.ts | 2 +- src/item/factory.test.ts | 61 ++++++++++++++++++- src/item/factory.ts | 37 ++++++++--- src/item/fileItem/fileItem.factory.ts | 4 +- src/item/folderItem/folderItem.factory.ts | 2 +- src/item/h5pItem/h5pItem.factory.ts | 2 +- src/item/linkItem/linkItem.factory.ts | 2 +- src/item/shortcutItem/shortcutItem.factory.ts | 2 +- 10 files changed, 98 insertions(+), 18 deletions(-) diff --git a/src/item/appItem/appItem.factory.ts b/src/item/appItem/appItem.factory.ts index 71b84ff3..c26f1b18 100644 --- a/src/item/appItem/appItem.factory.ts +++ b/src/item/appItem/appItem.factory.ts @@ -30,7 +30,7 @@ export const PackedAppItemFactory = ( packedInfo: PackedInformationFactoryInput = {}, ): ItemFactoryOutputType => { const newItem = AppItemFactory(item); - const packed = PackedInformationFactory(packedInfo, newItem); + const packed = PackedInformationFactory(packedInfo, newItem, item.parentItem); return { ...newItem, ...packed, diff --git a/src/item/documentItem/documentItem.factory.ts b/src/item/documentItem/documentItem.factory.ts index 511cb42d..8bd494b7 100644 --- a/src/item/documentItem/documentItem.factory.ts +++ b/src/item/documentItem/documentItem.factory.ts @@ -31,7 +31,7 @@ export const PackedDocumentItemFactory = ( packedInfo: PackedInformationFactoryInput = {}, ): ItemFactoryOutputType => { const newItem = DocumentItemFactory(item); - const packed = PackedInformationFactory(packedInfo, newItem); + const packed = PackedInformationFactory(packedInfo, newItem, item.parentItem); return { ...newItem, ...packed, diff --git a/src/item/etherpadItem/etherpadItem.factory.ts b/src/item/etherpadItem/etherpadItem.factory.ts index c268f6bd..6bb5c395 100644 --- a/src/item/etherpadItem/etherpadItem.factory.ts +++ b/src/item/etherpadItem/etherpadItem.factory.ts @@ -32,7 +32,7 @@ export const PackedEtherpadItemFactory = ( packedInfo: PackedInformationFactoryInput = {}, ): ItemFactoryOutputType => { const newItem = EtherpadItemFactory(item); - const packed = PackedInformationFactory(packedInfo, newItem); + const packed = PackedInformationFactory(packedInfo, newItem, item.parentItem); return { ...newItem, ...packed, diff --git a/src/item/factory.test.ts b/src/item/factory.test.ts index 1a7cc2d3..9603977c 100644 --- a/src/item/factory.test.ts +++ b/src/item/factory.test.ts @@ -1,6 +1,13 @@ import { describe, expect, it } from 'vitest'; -import { PartialItemFactory } from './factory.js'; +import { PackedInformationFactory, PartialItemFactory } from './factory.js'; +import { + FolderItemFactory, + PackedFolderItemFactory, +} from './folderItem/folderItem.factory.js'; +import { PermissionLevel } from '@/enums/permissionLevel/permissionLevel.js'; +import { ItemTagFactory } from '@/itemTag/itemTag.factory.js'; +import { ItemTagType } from '@/itemTag/itemTag.js'; describe('Base Item Factory', () => { it('Returns correct path for id', () => { @@ -46,3 +53,55 @@ describe('Base Item Factory', () => { expect(typeof item.displayName).toBe('string'); }); }); + +describe('Packed Item Factory', () => { + it('Returns correct default packed info', () => { + const item = FolderItemFactory(); + const info = PackedInformationFactory({}, item); + expect(info.permission).toEqual(PermissionLevel.Admin); + expect(info.hidden).toBeUndefined(); + expect(info.public).toBeUndefined(); + }); + it('Returns correct packed info with given hidden tag', () => { + const item = FolderItemFactory(); + const hiddenTag = { type: ItemTagType.Hidden, item }; + + const info = PackedInformationFactory({ hiddenTag: hiddenTag }, item); + expect(info.permission).toEqual(PermissionLevel.Admin); + expect(info.hidden).toEqual(expect.objectContaining(hiddenTag)); + expect(info.public).toBeUndefined(); + }); + it('Returns correct packed info inheriting parent hidden tag', () => { + const parent = FolderItemFactory(); + const hiddenTag = { type: ItemTagType.Hidden, item: parent }; + const parentItem = PackedFolderItemFactory(parent, { + hiddenTag: hiddenTag, + }); + const item = FolderItemFactory({ parentItem }); + const info = PackedInformationFactory({}, item, parentItem); + expect(info.permission).toEqual(PermissionLevel.Admin); + expect(info.hidden).toEqual(expect.objectContaining(hiddenTag)); + expect(info.public).toBeUndefined(); + }); + it('Returns correct packed info with given public tag', () => { + const item = FolderItemFactory(); + const publicTag = { type: ItemTagType.Public, item }; + + const info = PackedInformationFactory({ publicTag: publicTag }, item); + expect(info.permission).toEqual(PermissionLevel.Admin); + expect(info.public).toEqual(expect.objectContaining(publicTag)); + expect(info.hidden).toBeUndefined(); + }); + it('Returns correct packed info inheriting parent public tag', () => { + const parent = FolderItemFactory(); + const publicTag = { type: ItemTagType.Public, item: parent }; + const parentItem = PackedFolderItemFactory(parent, { + publicTag: publicTag, + }); + const item = FolderItemFactory({ parentItem }); + const info = PackedInformationFactory({}, item, parentItem); + expect(info.permission).toEqual(PermissionLevel.Admin); + expect(info.public).toEqual(expect.objectContaining(publicTag)); + expect(info.hidden).toBeUndefined(); + }); +}); diff --git a/src/item/factory.ts b/src/item/factory.ts index ffdd88e0..a4c382d6 100644 --- a/src/item/factory.ts +++ b/src/item/factory.ts @@ -1,7 +1,7 @@ import { MemberFactory } from '../member/factory.js'; import { DiscriminatedItem } from './item.js'; import { buildPathFromIds } from './itemUtils.js'; -import { PackedInformation } from './packedItem.js'; +import { PackedInformation, PackedItem } from './packedItem.js'; import { CCLicenseAdaptions } from '@/enums/ccLicenses.js'; import { PermissionLevel } from '@/enums/permissionLevel/permissionLevel.js'; import { ItemTagFactory } from '@/itemTag/itemTag.factory.js'; @@ -28,7 +28,8 @@ export type PackedItemFactoryOutputType = ItemFactoryOutputType & PackedInformation; export type ItemFactoryInputType = Partial & { - parentItem?: Pick; + parentItem?: Pick & + Partial>; }; export const PartialItemFactory = ( @@ -76,24 +77,44 @@ export const PartialItemFactory = ( export type PackedInformationFactoryInput = { permission?: PermissionLevel; - hidden?: Partial; + hiddenTag?: Partial; + publicTag?: Partial; }; export const PackedInformationFactory = ( - { permission = PermissionLevel.Admin, hidden }: PackedInformationFactoryInput, + { + permission = PermissionLevel.Admin, + hiddenTag, + publicTag, + }: PackedInformationFactoryInput, item: DiscriminatedItem, -) => { - let hiddenItemTag; - if (hidden) { + parentItem: Partial> = {}, +): PackedInformation => { + // use parent tag if exists + let hiddenItemTag = parentItem.hidden; + // use given hidden tag + if (hiddenTag) { hiddenItemTag = ItemTagFactory({ type: ItemTagType.Hidden, item, - ...hidden, + ...hiddenTag, + }); + } + + // use parent tag if exists + let publicItemTag = parentItem.public; + // use given hidden tag + if (publicTag) { + publicItemTag = ItemTagFactory({ + type: ItemTagType.Hidden, + item, + ...publicTag, }); } return { permission, ...(hiddenItemTag ? { hidden: hiddenItemTag } : {}), + ...(publicItemTag ? { public: publicItemTag } : {}), }; }; diff --git a/src/item/fileItem/fileItem.factory.ts b/src/item/fileItem/fileItem.factory.ts index c5c799e1..a0607262 100644 --- a/src/item/fileItem/fileItem.factory.ts +++ b/src/item/fileItem/fileItem.factory.ts @@ -36,7 +36,7 @@ export const PackedLocalFileItemFactory = ( packedInfo: PackedInformationFactoryInput = {}, ): ItemFactoryOutputType => { const newItem = LocalFileItemFactory(item); - const packed = PackedInformationFactory(packedInfo, newItem); + const packed = PackedInformationFactory(packedInfo, newItem, item.parentItem); return { ...newItem, ...packed, @@ -70,7 +70,7 @@ export const PackedS3FileItemFactory = ( packedInfo: PackedInformationFactoryInput = {}, ): ItemFactoryOutputType => { const newItem = S3FileItemFactory(item); - const packed = PackedInformationFactory(packedInfo, newItem); + const packed = PackedInformationFactory(packedInfo, newItem, item.parentItem); return { ...newItem, ...packed, diff --git a/src/item/folderItem/folderItem.factory.ts b/src/item/folderItem/folderItem.factory.ts index 11ba7af1..bad2b4fe 100644 --- a/src/item/folderItem/folderItem.factory.ts +++ b/src/item/folderItem/folderItem.factory.ts @@ -29,7 +29,7 @@ export const PackedFolderItemFactory = ( packedInfo: PackedInformationFactoryInput = {}, ): PackedItemFactoryOutputType => { const newItem = FolderItemFactory(item); - const packed = PackedInformationFactory(packedInfo, newItem); + const packed = PackedInformationFactory(packedInfo, newItem, item.parentItem); return { ...newItem, ...packed, diff --git a/src/item/h5pItem/h5pItem.factory.ts b/src/item/h5pItem/h5pItem.factory.ts index 7286c36c..6d9e7a9c 100644 --- a/src/item/h5pItem/h5pItem.factory.ts +++ b/src/item/h5pItem/h5pItem.factory.ts @@ -34,7 +34,7 @@ export const PackedH5PItemFactory = ( packedInfo: PackedInformationFactoryInput = {}, ): PackedItemFactoryOutputType => { const newItem = H5PItemFactory(item); - const packed = PackedInformationFactory(packedInfo, newItem); + const packed = PackedInformationFactory(packedInfo, newItem, item.parentItem); return { ...newItem, ...packed, diff --git a/src/item/linkItem/linkItem.factory.ts b/src/item/linkItem/linkItem.factory.ts index 1f689d47..c0426327 100644 --- a/src/item/linkItem/linkItem.factory.ts +++ b/src/item/linkItem/linkItem.factory.ts @@ -41,7 +41,7 @@ export const PackedLinkItemFactory = ( packedInfo: PackedInformationFactoryInput = {}, ): PackedItemFactoryOutputType => { const newItem = LinkItemFactory(item); - const packed = PackedInformationFactory(packedInfo, newItem); + const packed = PackedInformationFactory(packedInfo, newItem, item.parentItem); return { ...newItem, ...packed, diff --git a/src/item/shortcutItem/shortcutItem.factory.ts b/src/item/shortcutItem/shortcutItem.factory.ts index ae4affa9..abe54fe1 100644 --- a/src/item/shortcutItem/shortcutItem.factory.ts +++ b/src/item/shortcutItem/shortcutItem.factory.ts @@ -32,7 +32,7 @@ export const PackedShortcutItemFactory = ( packedInfo: PackedInformationFactoryInput = {}, ): PackedItemFactoryOutputType => { const newItem = ShortcutItemFactory(item); - const packed = PackedInformationFactory(packedInfo, newItem); + const packed = PackedInformationFactory(packedInfo, newItem, item.parentItem); return { ...newItem, ...packed, From 6cdb036e691966eb702c65f1b37050d6fbda928b Mon Sep 17 00:00:00 2001 From: kim Date: Mon, 22 Apr 2024 16:58:28 +0200 Subject: [PATCH 11/11] refactor: fix commitlint --- src/item/factory.test.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/src/item/factory.test.ts b/src/item/factory.test.ts index 9603977c..c88d739b 100644 --- a/src/item/factory.test.ts +++ b/src/item/factory.test.ts @@ -6,7 +6,6 @@ import { PackedFolderItemFactory, } from './folderItem/folderItem.factory.js'; import { PermissionLevel } from '@/enums/permissionLevel/permissionLevel.js'; -import { ItemTagFactory } from '@/itemTag/itemTag.factory.js'; import { ItemTagType } from '@/itemTag/itemTag.js'; describe('Base Item Factory', () => {