diff --git a/packages/db-postgres/src/index.ts b/packages/db-postgres/src/index.ts index 2d37a8aa19..79c22f9e21 100644 --- a/packages/db-postgres/src/index.ts +++ b/packages/db-postgres/src/index.ts @@ -9,7 +9,6 @@ import { create } from './create' import { createGlobal } from './createGlobal' import { createMigration } from './createMigration' import { createVersion } from './createVersion' -// import { updateVersion } from './updateVersion'; import { deleteMany } from './deleteMany' import { deleteOne } from './deleteOne' import { deleteVersions } from './deleteVersions' @@ -25,6 +24,7 @@ import { commitTransaction } from './transactions/commitTransaction' import { rollbackTransaction } from './transactions/rollbackTransaction' import { updateOne } from './update' import { updateGlobal } from './updateGlobal' +import { updateVersion } from './updateVersion' import { webpack } from './webpack' // import { destroy } from './destroy'; @@ -50,6 +50,7 @@ export function postgresAdapter(args: Args): PostgresAdapterResult { name: 'postgres', deleteMany, deleteOne, + deleteVersions, enums: {}, find, findGlobal, @@ -64,9 +65,8 @@ export function postgresAdapter(args: Args): PostgresAdapterResult { tables: {}, updateGlobal, updateOne, + updateVersion, webpack, - // updateVersion, - deleteVersions, }) } diff --git a/packages/db-postgres/src/schema/build.ts b/packages/db-postgres/src/schema/build.ts index 88a52e9615..a9712b158e 100644 --- a/packages/db-postgres/src/schema/build.ts +++ b/packages/db-postgres/src/schema/build.ts @@ -4,16 +4,7 @@ import type { IndexBuilder, PgColumnBuilder, UniqueConstraintBuilder } from 'dri import type { Field } from 'payload/types' import { relations } from 'drizzle-orm' -import { - index, - integer, - numeric, - pgTable, - serial, - timestamp, - unique, - varchar, -} from 'drizzle-orm/pg-core' +import { index, integer, numeric, pgTable, serial, timestamp, unique, varchar, } from 'drizzle-orm/pg-core' import { fieldAffectsData } from 'payload/types' import toSnakeCase from 'to-snake-case' diff --git a/packages/db-postgres/src/transform/write/traverseFields.ts b/packages/db-postgres/src/transform/write/traverseFields.ts index 3f88b8634c..1d826599f5 100644 --- a/packages/db-postgres/src/transform/write/traverseFields.ts +++ b/packages/db-postgres/src/transform/write/traverseFields.ts @@ -380,27 +380,10 @@ export const traverseFields = ({ valuesToTransform.forEach(({ localeKey, ref, value }) => { if (typeof value !== 'undefined') { - const formattedValue = value - - // switch (field.type) { - // // case 'date': { - // // if (typeof fieldData === 'string') { - // // const parsedDate = new Date(fieldData) - // // formattedValue = parsedDate - // // } - - // // break - // // } - - // default: { - // break - // } - // } - if (localeKey) { - ref[localeKey][columnName] = formattedValue + ref[localeKey][columnName] = value } else { - ref[columnName] = formattedValue + ref[columnName] = value } } }) diff --git a/packages/db-postgres/src/updateVersion.ts b/packages/db-postgres/src/updateVersion.ts new file mode 100644 index 0000000000..ffdc12055c --- /dev/null +++ b/packages/db-postgres/src/updateVersion.ts @@ -0,0 +1,42 @@ +import type { UpdateVersion } from 'payload/database' +import type { PayloadRequest, SanitizedCollectionConfig } from 'payload/types' + +import { buildVersionCollectionFields } from 'payload/versions' +import toSnakeCase from 'to-snake-case' + +import type { PostgresAdapter } from './types' + +import buildQuery from './queries/buildQuery' +import { upsertRow } from './upsertRow' + +export const updateVersion: UpdateVersion = async function updateVersion( + this: PostgresAdapter, + { id, collectionSlug, locale, req = {} as PayloadRequest, versionData, where: whereArg }, +) { + const db = this.sessions?.[req.transactionID] || this.db + const collectionConfig: SanitizedCollectionConfig = this.payload.collections[collectionSlug].config + const whereToUse = whereArg || { id: { equals: id } } + const tableName = `_${toSnakeCase(collectionSlug)}_versions` + const fields = buildVersionCollectionFields(collectionConfig) + + const { where } = await buildQuery({ + adapter: this, + fields, + locale, + tableName, + where: whereToUse, + }) + + const result = await upsertRow({ + id, + adapter: this, + data: versionData, + db, + fields, + operation: 'update', + tableName, + where, + }) + + return result +} diff --git a/packages/db-postgres/src/upsertRow/index.ts b/packages/db-postgres/src/upsertRow/index.ts index c6f1891848..2324a99769 100644 --- a/packages/db-postgres/src/upsertRow/index.ts +++ b/packages/db-postgres/src/upsertRow/index.ts @@ -138,6 +138,7 @@ export const upsertRow = async ({ if (operation === 'update') { await deleteExistingRowsByPath({ adapter, + db, localeColumnName: 'locale', newRows: relationsToInsert, parentColumnName: 'parent', diff --git a/packages/db-postgres/src/upsertRow/types.ts b/packages/db-postgres/src/upsertRow/types.ts index 0fd582e16c..2d42574ec0 100644 --- a/packages/db-postgres/src/upsertRow/types.ts +++ b/packages/db-postgres/src/upsertRow/types.ts @@ -1,8 +1,7 @@ import type { SQL } from 'drizzle-orm' import type { Field } from 'payload/types' -import type { GenericColumn, PostgresAdapter } from '../types' -import type { DrizzleDB } from '../types' +import type { DrizzleDB, GenericColumn, PostgresAdapter } from '../types' type BaseArgs = { adapter: PostgresAdapter diff --git a/packages/payload/src/versions/saveVersion.ts b/packages/payload/src/versions/saveVersion.ts index e9c1bab77f..551df4336f 100644 --- a/packages/payload/src/versions/saveVersion.ts +++ b/packages/payload/src/versions/saveVersion.ts @@ -105,7 +105,7 @@ export const saveVersion = async ({ max = collection.versions.maxPerDoc if (global && typeof global.versions.max === 'number') max = global.versions.max - if (createNewVersion && result.version.createdAt !== result.version.updatedAt && max > 0) { + if (createNewVersion && max > 0) { await enforceMaxVersions({ id, collection,