From 3bb262fd660fe95cf09c101c702d1623552e14d8 Mon Sep 17 00:00:00 2001 From: James Date: Tue, 17 Jan 2023 15:01:15 -0500 Subject: [PATCH] chore: passing tests --- src/collections/init.ts | 2 +- src/collections/operations/create.ts | 1 + src/collections/operations/update.ts | 2 +- src/globals/init.ts | 2 +- src/versions/buildCollectionFields.ts | 14 ++++++++++++ src/versions/buildGlobalFields.ts | 14 ++++++++++++ src/versions/drafts/queryDrafts.ts | 31 +++++++++++++-------------- src/versions/saveVersion.ts | 10 +++++++-- test/versions/int.spec.ts | 5 +++++ 9 files changed, 60 insertions(+), 21 deletions(-) diff --git a/src/collections/init.ts b/src/collections/init.ts index fdd83d5ef3..e60b95eb9b 100644 --- a/src/collections/init.ts +++ b/src/collections/init.ts @@ -75,7 +75,7 @@ export default function registerCollections(ctx: Payload): void { disableUnique: true, draftsEnabled: true, options: { - timestamps: true, + timestamps: false, }, }, ); diff --git a/src/collections/operations/create.ts b/src/collections/operations/create.ts index 5818f6a95a..532029cd37 100644 --- a/src/collections/operations/create.ts +++ b/src/collections/operations/create.ts @@ -229,6 +229,7 @@ async function create(incomingArgs: Arguments): Promise { docWithLocales: result, autosave, createdAt: result.createdAt, + onCreate: true, }); } diff --git a/src/collections/operations/update.ts b/src/collections/operations/update.ts index 7f95a8b6db..5b520bf076 100644 --- a/src/collections/operations/update.ts +++ b/src/collections/operations/update.ts @@ -254,7 +254,7 @@ async function update(incomingArgs: Arguments): Promise { id, autosave, draft: shouldSaveDraft, - createdAt: result.createdAt as string, + createdAt: originalDoc.createdAt, }); } diff --git a/src/globals/init.ts b/src/globals/init.ts index 8558aa2cbf..13d58c16a2 100644 --- a/src/globals/init.ts +++ b/src/globals/init.ts @@ -30,7 +30,7 @@ export default function initGlobals(ctx: Payload): void { disableUnique: true, draftsEnabled: true, options: { - timestamps: true, + timestamps: false, }, }, ); diff --git a/src/versions/buildCollectionFields.ts b/src/versions/buildCollectionFields.ts index ff6b552758..69395e23e1 100644 --- a/src/versions/buildCollectionFields.ts +++ b/src/versions/buildCollectionFields.ts @@ -14,6 +14,20 @@ export const buildVersionCollectionFields = (collection: SanitizedCollectionConf type: 'group', fields: collection.fields, }, + { + name: 'createdAt', + type: 'date', + admin: { + disabled: true, + }, + }, + { + name: 'updatedAt', + type: 'date', + admin: { + disabled: true, + }, + }, ]; if (collection?.versions?.drafts && collection?.versions?.drafts?.autosave) { diff --git a/src/versions/buildGlobalFields.ts b/src/versions/buildGlobalFields.ts index 23102fec93..8afb8723c4 100644 --- a/src/versions/buildGlobalFields.ts +++ b/src/versions/buildGlobalFields.ts @@ -8,6 +8,20 @@ export const buildVersionGlobalFields = (global: SanitizedGlobalConfig): Field[] type: 'group', fields: global.fields, }, + { + name: 'createdAt', + type: 'date', + admin: { + disabled: true, + }, + }, + { + name: 'updatedAt', + type: 'date', + admin: { + disabled: true, + }, + }, ]; if (global?.versions?.drafts && global?.versions?.drafts?.autosave) { diff --git a/src/versions/drafts/queryDrafts.ts b/src/versions/drafts/queryDrafts.ts index 98ad57f083..437d698ff7 100644 --- a/src/versions/drafts/queryDrafts.ts +++ b/src/versions/drafts/queryDrafts.ts @@ -50,13 +50,21 @@ export const queryDrafts = async ({ const versionQuery = await VersionModel.buildQuery(versionQueryToBuild, locale); - // TODO - // 1. Before group, we could potentially run $match to reduce matches - // 2. Then before group, need to sort by updatedAt so first versions are newest versions - // 3. Finally can group - // 4. Then need to sort on user-defined sort again, if it differs from default - const aggregate = VersionModel.aggregate>([ + // Sort so that newest are first + { $sort: { updatedAt: -1 } }, + // Group by parent ID, and take the first of each + { + $group: { + _id: '$parent', + version: { $first: '$version' }, + updatedAt: { $first: '$updatedAt' }, + createdAt: { $first: '$createdAt' }, + }, + }, + // Filter based on incoming query + { $match: versionQuery }, + // Re-sort based on incoming sort { $sort: Object.entries(paginationOptions.sort).reduce((sort, [key, order]) => { return { @@ -65,16 +73,7 @@ export const queryDrafts = async ({ }; }, {}), }, - { - $group: { - _id: '$parent', - versionID: { $first: '$_id' }, - version: { $first: '$version' }, - updatedAt: { $first: '$updatedAt' }, - createdAt: { $first: '$createdAt' }, - }, - }, - { $match: versionQuery }, + // Add pagination limit { $limit: paginationOptions.limit }, ]); diff --git a/src/versions/saveVersion.ts b/src/versions/saveVersion.ts index 42098bc5fe..9599e3c5cf 100644 --- a/src/versions/saveVersion.ts +++ b/src/versions/saveVersion.ts @@ -15,7 +15,8 @@ type Args = { id?: string | number autosave?: boolean draft?: boolean - createdAt?: string + createdAt: string + onCreate?: boolean } export const saveVersion = async ({ @@ -27,6 +28,7 @@ export const saveVersion = async ({ autosave, draft, createdAt, + onCreate = false, }: Args): Promise> => { let entityConfig; let entityType: 'global' | 'collection'; @@ -56,11 +58,14 @@ export const saveVersion = async ({ } let result; + const now = new Date().toISOString(); try { if (autosave && existingAutosaveVersion?.autosave === true) { const data: Record = { version: versionData, + createdAt, + updatedAt: now, }; if (createdAt) data.updatedAt = createdAt; @@ -77,9 +82,10 @@ export const saveVersion = async ({ const data: Record = { version: versionData, autosave: Boolean(autosave), + updatedAt: onCreate ? createdAt : now, + createdAt: createdAt || now, }; - if (createdAt) data.createdAt = createdAt; if (collection) data.parent = id; result = await VersionModel.create(data); diff --git a/test/versions/int.spec.ts b/test/versions/int.spec.ts index e45107d448..d7689797e1 100644 --- a/test/versions/int.spec.ts +++ b/test/versions/int.spec.ts @@ -157,6 +157,11 @@ describe('Versions', () => { const versions = await payload.findVersions({ collection, locale: 'all', + where: { + parent: { + equals: collectionLocalPostID, + }, + }, }); expect(versions.docs[0].version.title.en).toStrictEqual(newEnglishTitle);