chore: improves semantics of transform write
This commit is contained in:
@@ -16,7 +16,7 @@ export const createGlobalVersion: CreateGlobalVersion = async function createGlo
|
||||
const db = this.sessions?.[req.transactionID] || this.db
|
||||
const global = this.payload.globals.config.find(({ slug }) => slug === globalSlug)
|
||||
const globalTableName = toSnakeCase(globalSlug)
|
||||
const tableName = `_${globalTableName}_versions`
|
||||
const tableName = `_${globalTableName}_v`
|
||||
|
||||
const result = await upsertRow({
|
||||
adapter: this,
|
||||
|
||||
@@ -16,7 +16,7 @@ export const createVersion: CreateVersion = async function createVersion(
|
||||
const db = this.sessions?.[req.transactionID] || this.db
|
||||
const collection = this.payload.collections[collectionSlug].config
|
||||
const collectionTableName = toSnakeCase(collectionSlug)
|
||||
const tableName = `_${collectionTableName}_versions`
|
||||
const tableName = `_${collectionTableName}_v`
|
||||
|
||||
const result = await upsertRow({
|
||||
adapter: this,
|
||||
|
||||
@@ -16,7 +16,7 @@ export const deleteVersions: DeleteVersions = async function deleteVersion(
|
||||
const db = this.sessions?.[req.transactionID] || this.db
|
||||
const collectionConfig: SanitizedCollectionConfig = this.payload.collections[collection].config
|
||||
|
||||
const tableName = `_${toSnakeCase(collection)}_versions`
|
||||
const tableName = `_${toSnakeCase(collection)}_v`
|
||||
const fields = buildVersionCollectionFields(collectionConfig)
|
||||
|
||||
const { docs } = await findMany({
|
||||
|
||||
@@ -22,10 +22,12 @@ export const findGlobalVersions: FindGlobalVersions = async function findGlobalV
|
||||
where,
|
||||
},
|
||||
) {
|
||||
const globalConfig: SanitizedGlobalConfig = this.payload.globals.config.find(({ slug }) => slug === global)
|
||||
const globalConfig: SanitizedGlobalConfig = this.payload.globals.config.find(
|
||||
({ slug }) => slug === global,
|
||||
)
|
||||
const sort = typeof sortArg === 'string' ? sortArg : '-createdAt'
|
||||
|
||||
const tableName = `_${toSnakeCase(global)}_versions`
|
||||
const tableName = `_${toSnakeCase(global)}_v`
|
||||
const fields = buildVersionGlobalFields(globalConfig)
|
||||
|
||||
return findMany({
|
||||
|
||||
@@ -25,7 +25,7 @@ export const findVersions: FindVersions = async function findVersions(
|
||||
const collectionConfig: SanitizedCollectionConfig = this.payload.collections[collection].config
|
||||
const sort = typeof sortArg === 'string' ? sortArg : collectionConfig.defaultSort
|
||||
|
||||
const tableName = `_${toSnakeCase(collection)}_versions`
|
||||
const tableName = `_${toSnakeCase(collection)}_v`
|
||||
const fields = buildVersionCollectionFields(collectionConfig)
|
||||
|
||||
return findMany({
|
||||
|
||||
@@ -28,18 +28,20 @@ export const init: Init = async function init(this: PostgresAdapter) {
|
||||
buildTable({
|
||||
adapter: this,
|
||||
buildRelationships: true,
|
||||
disableUnique: false,
|
||||
fields: collection.fields,
|
||||
tableName,
|
||||
timestamps: collection.timestamps,
|
||||
})
|
||||
|
||||
if (collection.versions) {
|
||||
const versionsTableName = `_${tableName}_versions`
|
||||
const versionsTableName = `_${tableName}_v`
|
||||
const versionFields = buildVersionCollectionFields(collection)
|
||||
|
||||
buildTable({
|
||||
adapter: this,
|
||||
buildRelationships: true,
|
||||
disableUnique: true,
|
||||
fields: versionFields,
|
||||
tableName: versionsTableName,
|
||||
timestamps: true,
|
||||
@@ -53,18 +55,20 @@ export const init: Init = async function init(this: PostgresAdapter) {
|
||||
buildTable({
|
||||
adapter: this,
|
||||
buildRelationships: true,
|
||||
disableUnique: false,
|
||||
fields: global.fields,
|
||||
tableName,
|
||||
timestamps: false,
|
||||
})
|
||||
|
||||
if (global.versions) {
|
||||
const versionsTableName = `_${tableName}_versions`
|
||||
const versionsTableName = `_${tableName}_v`
|
||||
const versionFields = buildVersionGlobalFields(global)
|
||||
|
||||
buildTable({
|
||||
adapter: this,
|
||||
buildRelationships: true,
|
||||
disableUnique: true,
|
||||
fields: versionFields,
|
||||
tableName: versionsTableName,
|
||||
timestamps: true,
|
||||
|
||||
@@ -17,7 +17,7 @@ export const queryDrafts: QueryDrafts = async function queryDrafts({
|
||||
where,
|
||||
}) {
|
||||
const collectionConfig: SanitizedCollectionConfig = this.payload.collections[collection].config
|
||||
const tableName = `_${toSnakeCase(collection)}_versions`
|
||||
const tableName = `_${toSnakeCase(collection)}_v`
|
||||
const fields = buildVersionCollectionFields(collectionConfig)
|
||||
|
||||
const combinedWhere = combineQueries({ latest: { equals: true } }, where)
|
||||
|
||||
@@ -4,7 +4,16 @@ 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'
|
||||
|
||||
@@ -18,6 +27,7 @@ type Args = {
|
||||
baseColumns?: Record<string, PgColumnBuilder>
|
||||
baseExtraConfig?: Record<string, (cols: GenericColumns) => IndexBuilder | UniqueConstraintBuilder>
|
||||
buildRelationships?: boolean
|
||||
disableUnique: boolean
|
||||
fields: Field[]
|
||||
tableName: string
|
||||
timestamps?: boolean
|
||||
@@ -32,6 +42,7 @@ export const buildTable = ({
|
||||
baseColumns = {},
|
||||
baseExtraConfig = {},
|
||||
buildRelationships,
|
||||
disableUnique = false,
|
||||
fields,
|
||||
tableName,
|
||||
timestamps,
|
||||
@@ -43,7 +54,6 @@ export const buildTable = ({
|
||||
let hasLocalizedRelationshipField = false
|
||||
let hasManyNumberField: 'index' | boolean = false
|
||||
let hasLocalizedManyNumberField = false
|
||||
const disableUnique = tableName.endsWith('_versions')
|
||||
|
||||
const localesColumns: Record<string, PgColumnBuilder> = {}
|
||||
const localesIndexes: Record<string, (cols: GenericColumns) => IndexBuilder> = {}
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/* eslint-disable no-param-reassign */
|
||||
import type { Relation } from 'drizzle-orm'
|
||||
import type { IndexBuilder, PgColumnBuilder, UniqueConstraintBuilder } from 'drizzle-orm/pg-core'
|
||||
import type { Field } from 'payload/types'
|
||||
import type { Field, TabAsField } from 'payload/types'
|
||||
|
||||
import { relations } from 'drizzle-orm'
|
||||
import {
|
||||
@@ -36,7 +36,7 @@ type Args = {
|
||||
columns: Record<string, PgColumnBuilder>
|
||||
disableUnique?: boolean
|
||||
fieldPrefix?: string
|
||||
fields: Field[]
|
||||
fields: (Field | TabAsField)[]
|
||||
forceLocalized?: boolean
|
||||
indexes: Record<string, (cols: GenericColumns) => IndexBuilder>
|
||||
localesColumns: Record<string, PgColumnBuilder>
|
||||
@@ -212,6 +212,7 @@ export const traverseFields = ({
|
||||
adapter,
|
||||
baseColumns,
|
||||
baseExtraConfig,
|
||||
disableUnique,
|
||||
fields: [],
|
||||
tableName: selectTableName,
|
||||
})
|
||||
@@ -268,6 +269,7 @@ export const traverseFields = ({
|
||||
adapter,
|
||||
baseColumns,
|
||||
baseExtraConfig,
|
||||
disableUnique,
|
||||
fields: field.fields,
|
||||
tableName: arrayTableName,
|
||||
})
|
||||
@@ -328,6 +330,7 @@ export const traverseFields = ({
|
||||
adapter,
|
||||
baseColumns,
|
||||
baseExtraConfig,
|
||||
disableUnique,
|
||||
fields: block.fields,
|
||||
tableName: blockTableName,
|
||||
})
|
||||
@@ -363,7 +366,39 @@ export const traverseFields = ({
|
||||
break
|
||||
}
|
||||
|
||||
case 'tab':
|
||||
case 'group': {
|
||||
if (!('name' in field)) {
|
||||
const {
|
||||
hasLocalizedField: groupHasLocalizedField,
|
||||
hasLocalizedManyNumberField: groupHasLocalizedManyNumberField,
|
||||
hasLocalizedRelationshipField: groupHasLocalizedRelationshipField,
|
||||
hasManyNumberField: groupHasManyNumberField,
|
||||
} = traverseFields({
|
||||
adapter,
|
||||
buildRelationships,
|
||||
columnPrefix,
|
||||
columns,
|
||||
disableUnique,
|
||||
fieldPrefix,
|
||||
fields: field.fields,
|
||||
forceLocalized,
|
||||
indexes,
|
||||
localesColumns,
|
||||
localesIndexes,
|
||||
newTableName: parentTableName,
|
||||
parentTableName,
|
||||
relationsToBuild,
|
||||
relationships,
|
||||
})
|
||||
|
||||
if (groupHasLocalizedField) hasLocalizedField = true
|
||||
if (groupHasLocalizedRelationshipField) hasLocalizedRelationshipField = true
|
||||
if (groupHasManyNumberField) hasManyNumberField = true
|
||||
if (groupHasLocalizedManyNumberField) hasLocalizedManyNumberField = true
|
||||
break
|
||||
}
|
||||
|
||||
const {
|
||||
hasLocalizedField: groupHasLocalizedField,
|
||||
hasLocalizedManyNumberField: groupHasLocalizedManyNumberField,
|
||||
@@ -395,63 +430,44 @@ export const traverseFields = ({
|
||||
}
|
||||
|
||||
case 'tabs': {
|
||||
field.tabs.forEach((tab) => {
|
||||
if ('name' in tab) {
|
||||
const {
|
||||
hasLocalizedField: tabHasLocalizedField,
|
||||
hasLocalizedManyNumberField: tabHasLocalizedManyNumberField,
|
||||
hasLocalizedRelationshipField: tabHasLocalizedRelationshipField,
|
||||
hasManyNumberField: tabHasManyNumberField,
|
||||
} = traverseFields({
|
||||
adapter,
|
||||
buildRelationships,
|
||||
columnPrefix: `${columnPrefix || ''}${toSnakeCase(tab.name)}_`,
|
||||
columns,
|
||||
disableUnique,
|
||||
fieldPrefix: `${fieldPrefix || ''}${tab.name}_`,
|
||||
fields: tab.fields,
|
||||
indexes,
|
||||
localesColumns,
|
||||
localesIndexes,
|
||||
newTableName: `${parentTableName}_${columnPrefix || ''}${toSnakeCase(tab.name)}`,
|
||||
parentTableName,
|
||||
relationsToBuild,
|
||||
relationships,
|
||||
})
|
||||
|
||||
if (tabHasLocalizedField) hasLocalizedField = true
|
||||
if (tabHasLocalizedRelationshipField) hasLocalizedRelationshipField = true
|
||||
if (tabHasManyNumberField) hasManyNumberField = true
|
||||
if (tabHasLocalizedManyNumberField) hasLocalizedManyNumberField = true
|
||||
} else {
|
||||
;({ hasLocalizedField, hasLocalizedRelationshipField } = traverseFields({
|
||||
adapter,
|
||||
buildRelationships,
|
||||
columnPrefix,
|
||||
columns,
|
||||
disableUnique,
|
||||
fieldPrefix,
|
||||
fields: tab.fields,
|
||||
indexes,
|
||||
localesColumns,
|
||||
localesIndexes,
|
||||
newTableName: parentTableName,
|
||||
parentTableName,
|
||||
relationsToBuild,
|
||||
relationships,
|
||||
}))
|
||||
}
|
||||
const {
|
||||
hasLocalizedField: tabHasLocalizedField,
|
||||
hasLocalizedManyNumberField: tabHasLocalizedManyNumberField,
|
||||
hasLocalizedRelationshipField: tabHasLocalizedRelationshipField,
|
||||
hasManyNumberField: tabHasManyNumberField,
|
||||
} = traverseFields({
|
||||
adapter,
|
||||
buildRelationships,
|
||||
columnPrefix,
|
||||
columns,
|
||||
disableUnique,
|
||||
fieldPrefix,
|
||||
fields: field.tabs.map((tab) => ({ ...tab, type: 'tab' })),
|
||||
forceLocalized,
|
||||
indexes,
|
||||
localesColumns,
|
||||
localesIndexes,
|
||||
newTableName,
|
||||
parentTableName,
|
||||
relationsToBuild,
|
||||
relationships,
|
||||
})
|
||||
|
||||
if (tabHasLocalizedField) hasLocalizedField = true
|
||||
if (tabHasLocalizedRelationshipField) hasLocalizedRelationshipField = true
|
||||
if (tabHasManyNumberField) hasManyNumberField = true
|
||||
if (tabHasLocalizedManyNumberField) hasLocalizedManyNumberField = true
|
||||
|
||||
break
|
||||
}
|
||||
|
||||
case 'row':
|
||||
case 'collapsible': {
|
||||
;({
|
||||
hasLocalizedField,
|
||||
hasLocalizedManyNumberField,
|
||||
hasLocalizedRelationshipField,
|
||||
hasManyNumberField,
|
||||
const {
|
||||
hasLocalizedField: rowHasLocalizedField,
|
||||
hasLocalizedManyNumberField: rowHasLocalizedManyNumberField,
|
||||
hasLocalizedRelationshipField: rowHasLocalizedRelationshipField,
|
||||
hasManyNumberField: rowHasManyNumberField,
|
||||
} = traverseFields({
|
||||
adapter,
|
||||
buildRelationships,
|
||||
@@ -460,6 +476,7 @@ export const traverseFields = ({
|
||||
disableUnique,
|
||||
fieldPrefix,
|
||||
fields: field.fields,
|
||||
forceLocalized,
|
||||
indexes,
|
||||
localesColumns,
|
||||
localesIndexes,
|
||||
@@ -467,7 +484,12 @@ export const traverseFields = ({
|
||||
parentTableName,
|
||||
relationsToBuild,
|
||||
relationships,
|
||||
}))
|
||||
})
|
||||
|
||||
if (rowHasLocalizedField) hasLocalizedField = true
|
||||
if (rowHasLocalizedRelationshipField) hasLocalizedRelationshipField = true
|
||||
if (rowHasManyNumberField) hasManyNumberField = true
|
||||
if (rowHasLocalizedManyNumberField) hasLocalizedManyNumberField = true
|
||||
break
|
||||
}
|
||||
|
||||
|
||||
@@ -8,10 +8,10 @@ import { traverseFields } from './traverseFields'
|
||||
|
||||
type Args = {
|
||||
arrayTableName: string
|
||||
baseTableName: string
|
||||
blocks: {
|
||||
[blockType: string]: BlockRowToInsert[]
|
||||
}
|
||||
columnName: string
|
||||
data: unknown
|
||||
field: ArrayField
|
||||
locale?: string
|
||||
@@ -26,8 +26,8 @@ type Args = {
|
||||
|
||||
export const transformArray = ({
|
||||
arrayTableName,
|
||||
baseTableName,
|
||||
blocks,
|
||||
columnName,
|
||||
data,
|
||||
field,
|
||||
locale,
|
||||
@@ -43,7 +43,6 @@ export const transformArray = ({
|
||||
data.forEach((arrayRow, i) => {
|
||||
const newRow: ArrayRowToInsert = {
|
||||
arrays: {},
|
||||
columnName,
|
||||
locales: {},
|
||||
row: {
|
||||
_order: i + 1,
|
||||
@@ -62,12 +61,13 @@ export const transformArray = ({
|
||||
|
||||
traverseFields({
|
||||
arrays: newRow.arrays,
|
||||
baseTableName,
|
||||
blocks,
|
||||
columnPrefix: '',
|
||||
data: arrayRow,
|
||||
fieldPrefix: '',
|
||||
fields: field.fields,
|
||||
locales: newRow.locales,
|
||||
newTableName: arrayTableName,
|
||||
numbers,
|
||||
parentTableName: arrayTableName,
|
||||
path: `${path || ''}${field.name}.${i}.`,
|
||||
|
||||
@@ -8,6 +8,7 @@ import type { BlockRowToInsert, RelationshipToDelete } from './types'
|
||||
import { traverseFields } from './traverseFields'
|
||||
|
||||
type Args = {
|
||||
baseTableName: string
|
||||
blocks: {
|
||||
[blockType: string]: BlockRowToInsert[]
|
||||
}
|
||||
@@ -21,9 +22,9 @@ type Args = {
|
||||
selects: {
|
||||
[tableName: string]: Record<string, unknown>[]
|
||||
}
|
||||
tableName
|
||||
}
|
||||
export const transformBlocks = ({
|
||||
baseTableName,
|
||||
blocks,
|
||||
data,
|
||||
field,
|
||||
@@ -33,14 +34,14 @@ export const transformBlocks = ({
|
||||
relationships,
|
||||
relationshipsToDelete,
|
||||
selects,
|
||||
tableName,
|
||||
}: Args) => {
|
||||
data.forEach((blockRow, i) => {
|
||||
if (typeof blockRow.blockType !== 'string') return
|
||||
const matchedBlock = field.blocks.find(({ slug }) => slug === blockRow.blockType)
|
||||
if (!matchedBlock) return
|
||||
const blockType = toSnakeCase(blockRow.blockType)
|
||||
|
||||
if (!blocks[blockRow.blockType]) blocks[blockRow.blockType] = []
|
||||
if (!blocks[blockType]) blocks[blockType] = []
|
||||
|
||||
const newRow: BlockRowToInsert = {
|
||||
arrays: {},
|
||||
@@ -53,16 +54,17 @@ export const transformBlocks = ({
|
||||
|
||||
if (field.localized && locale) newRow.row._locale = locale
|
||||
|
||||
const blockTableName = `${tableName}_${toSnakeCase(blockRow.blockType)}`
|
||||
const blockTableName = `${baseTableName}_${blockType}`
|
||||
|
||||
traverseFields({
|
||||
arrays: newRow.arrays,
|
||||
baseTableName,
|
||||
blocks,
|
||||
columnPrefix: '',
|
||||
data: blockRow,
|
||||
fieldPrefix: '',
|
||||
fields: matchedBlock.fields,
|
||||
locales: newRow.locales,
|
||||
newTableName: blockTableName,
|
||||
numbers,
|
||||
parentTableName: blockTableName,
|
||||
path: `${path || ''}${field.name}.${i}.`,
|
||||
@@ -72,6 +74,6 @@ export const transformBlocks = ({
|
||||
selects,
|
||||
})
|
||||
|
||||
blocks[blockRow.blockType].push(newRow)
|
||||
blocks[blockType].push(newRow)
|
||||
})
|
||||
}
|
||||
|
||||
@@ -29,12 +29,13 @@ export const transformForWrite = ({ data, fields, path = '', tableName }: Args):
|
||||
// above rowToInsert
|
||||
traverseFields({
|
||||
arrays: rowToInsert.arrays,
|
||||
baseTableName: tableName,
|
||||
blocks: rowToInsert.blocks,
|
||||
columnPrefix: '',
|
||||
data,
|
||||
fieldPrefix: '',
|
||||
fields,
|
||||
locales: rowToInsert.locales,
|
||||
newTableName: tableName,
|
||||
numbers: rowToInsert.numbers,
|
||||
parentTableName: tableName,
|
||||
path,
|
||||
|
||||
@@ -17,19 +17,34 @@ type Args = {
|
||||
arrays: {
|
||||
[tableName: string]: ArrayRowToInsert[]
|
||||
}
|
||||
/**
|
||||
* This is the name of the base table
|
||||
*/
|
||||
baseTableName: string
|
||||
blocks: {
|
||||
[blockType: string]: BlockRowToInsert[]
|
||||
}
|
||||
/**
|
||||
* A snake-case field prefix, representing prior fields
|
||||
* Ex: my_group_my_named_tab_
|
||||
*/
|
||||
columnPrefix: string
|
||||
data: Record<string, unknown>
|
||||
existingLocales?: Record<string, unknown>[]
|
||||
/**
|
||||
* A prefix that will retain camel-case formatting, representing prior fields
|
||||
* Ex: myGroup_myNamedTab_
|
||||
*/
|
||||
fieldPrefix: string
|
||||
fields: Field[]
|
||||
forcedLocale?: string
|
||||
locales: {
|
||||
[locale: string]: Record<string, unknown>
|
||||
}
|
||||
newTableName: string
|
||||
numbers: Record<string, unknown>[]
|
||||
/**
|
||||
* This is the name of the parent table
|
||||
*/
|
||||
parentTableName: string
|
||||
path: string
|
||||
relationships: Record<string, unknown>[]
|
||||
@@ -42,14 +57,15 @@ type Args = {
|
||||
|
||||
export const traverseFields = ({
|
||||
arrays,
|
||||
baseTableName,
|
||||
blocks,
|
||||
columnPrefix,
|
||||
data,
|
||||
existingLocales,
|
||||
fieldPrefix,
|
||||
fields,
|
||||
forcedLocale,
|
||||
locales,
|
||||
newTableName,
|
||||
numbers,
|
||||
parentTableName,
|
||||
path,
|
||||
@@ -60,15 +76,17 @@ export const traverseFields = ({
|
||||
}: Args) => {
|
||||
fields.forEach((field) => {
|
||||
let columnName = ''
|
||||
let fieldName = ''
|
||||
let fieldData: unknown
|
||||
|
||||
if (fieldAffectsData(field)) {
|
||||
columnName = `${columnPrefix || ''}${toSnakeCase(field.name)}`
|
||||
fieldName = `${fieldPrefix || ''}${field.name}`
|
||||
fieldData = data[field.name]
|
||||
}
|
||||
|
||||
if (field.type === 'array') {
|
||||
const arrayTableName = `${newTableName}_${columnName}`
|
||||
const arrayTableName = `${parentTableName}_${columnName}`
|
||||
|
||||
if (!arrays[arrayTableName]) arrays[arrayTableName] = []
|
||||
|
||||
@@ -78,8 +96,8 @@ export const traverseFields = ({
|
||||
if (Array.isArray(localeData)) {
|
||||
const newRows = transformArray({
|
||||
arrayTableName,
|
||||
baseTableName,
|
||||
blocks,
|
||||
columnName,
|
||||
data: localeData,
|
||||
field,
|
||||
locale: localeKey,
|
||||
@@ -97,8 +115,8 @@ export const traverseFields = ({
|
||||
} else {
|
||||
const newRows = transformArray({
|
||||
arrayTableName,
|
||||
baseTableName,
|
||||
blocks,
|
||||
columnName,
|
||||
data: data[field.name],
|
||||
field,
|
||||
numbers,
|
||||
@@ -120,6 +138,7 @@ export const traverseFields = ({
|
||||
Object.entries(data[field.name]).forEach(([localeKey, localeData]) => {
|
||||
if (Array.isArray(localeData)) {
|
||||
transformBlocks({
|
||||
baseTableName,
|
||||
blocks,
|
||||
data: localeData,
|
||||
field,
|
||||
@@ -129,13 +148,13 @@ export const traverseFields = ({
|
||||
relationships,
|
||||
relationshipsToDelete,
|
||||
selects,
|
||||
tableName: newTableName,
|
||||
})
|
||||
}
|
||||
})
|
||||
}
|
||||
} else if (isArrayOfRows(fieldData)) {
|
||||
transformBlocks({
|
||||
baseTableName,
|
||||
blocks,
|
||||
data: fieldData,
|
||||
field,
|
||||
@@ -144,7 +163,6 @@ export const traverseFields = ({
|
||||
relationships,
|
||||
relationshipsToDelete,
|
||||
selects,
|
||||
tableName: newTableName,
|
||||
})
|
||||
}
|
||||
|
||||
@@ -157,14 +175,15 @@ export const traverseFields = ({
|
||||
Object.entries(data[field.name]).forEach(([localeKey, localeData]) => {
|
||||
traverseFields({
|
||||
arrays,
|
||||
baseTableName,
|
||||
blocks,
|
||||
columnPrefix: `${columnName}_`,
|
||||
data: localeData as Record<string, unknown>,
|
||||
existingLocales,
|
||||
fieldPrefix: `${fieldName}_`,
|
||||
fields: field.fields,
|
||||
forcedLocale: localeKey,
|
||||
locales,
|
||||
newTableName: parentTableName,
|
||||
numbers,
|
||||
parentTableName,
|
||||
path: `${path || ''}${field.name}.`,
|
||||
@@ -177,13 +196,14 @@ export const traverseFields = ({
|
||||
} else {
|
||||
traverseFields({
|
||||
arrays,
|
||||
baseTableName,
|
||||
blocks,
|
||||
columnPrefix: `${columnName}_`,
|
||||
data: data[field.name] as Record<string, unknown>,
|
||||
existingLocales,
|
||||
fieldPrefix: `${fieldName}_`,
|
||||
fields: field.fields,
|
||||
locales,
|
||||
newTableName: parentTableName,
|
||||
numbers,
|
||||
parentTableName,
|
||||
path: `${path || ''}${field.name}.`,
|
||||
@@ -206,14 +226,15 @@ export const traverseFields = ({
|
||||
Object.entries(data[tab.name]).forEach(([localeKey, localeData]) => {
|
||||
traverseFields({
|
||||
arrays,
|
||||
baseTableName,
|
||||
blocks,
|
||||
columnPrefix: `${columnPrefix || ''}${toSnakeCase(tab.name)}_`,
|
||||
data: localeData as Record<string, unknown>,
|
||||
existingLocales,
|
||||
fieldPrefix: `${fieldPrefix || ''}${tab.name}_`,
|
||||
fields: tab.fields,
|
||||
forcedLocale: localeKey,
|
||||
locales,
|
||||
newTableName: parentTableName,
|
||||
numbers,
|
||||
parentTableName,
|
||||
path: `${path || ''}${tab.name}.`,
|
||||
@@ -226,13 +247,14 @@ export const traverseFields = ({
|
||||
} else {
|
||||
traverseFields({
|
||||
arrays,
|
||||
baseTableName,
|
||||
blocks,
|
||||
columnPrefix: `${columnPrefix || ''}${toSnakeCase(tab.name)}_`,
|
||||
data: data[tab.name] as Record<string, unknown>,
|
||||
existingLocales,
|
||||
fieldPrefix: `${fieldPrefix || ''}${tab.name}_`,
|
||||
fields: tab.fields,
|
||||
locales,
|
||||
newTableName: parentTableName,
|
||||
numbers,
|
||||
parentTableName,
|
||||
path: `${path || ''}${tab.name}.`,
|
||||
@@ -246,13 +268,14 @@ export const traverseFields = ({
|
||||
} else {
|
||||
traverseFields({
|
||||
arrays,
|
||||
baseTableName,
|
||||
blocks,
|
||||
columnPrefix,
|
||||
data,
|
||||
existingLocales,
|
||||
fieldPrefix,
|
||||
fields: tab.fields,
|
||||
locales,
|
||||
newTableName: parentTableName,
|
||||
numbers,
|
||||
parentTableName,
|
||||
path,
|
||||
@@ -268,13 +291,14 @@ export const traverseFields = ({
|
||||
if (field.type === 'row' || field.type === 'collapsible') {
|
||||
traverseFields({
|
||||
arrays,
|
||||
baseTableName,
|
||||
blocks,
|
||||
columnPrefix,
|
||||
data,
|
||||
existingLocales,
|
||||
fieldPrefix,
|
||||
fields: field.fields,
|
||||
locales,
|
||||
newTableName: parentTableName,
|
||||
numbers,
|
||||
parentTableName,
|
||||
path,
|
||||
@@ -359,7 +383,7 @@ export const traverseFields = ({
|
||||
}
|
||||
|
||||
if (field.type === 'select' && field.hasMany && Array.isArray(fieldData)) {
|
||||
const selectTableName = `${newTableName}_${toSnakeCase(field.name)}`
|
||||
const selectTableName = `${parentTableName}_${columnName}`
|
||||
if (!selects[selectTableName]) selects[selectTableName] = []
|
||||
|
||||
if (field.localized) {
|
||||
@@ -421,9 +445,9 @@ export const traverseFields = ({
|
||||
}
|
||||
|
||||
if (localeKey) {
|
||||
ref[localeKey][columnName] = formattedValue
|
||||
ref[localeKey][fieldName] = formattedValue
|
||||
} else {
|
||||
ref[columnName] = formattedValue
|
||||
ref[fieldName] = formattedValue
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
@@ -2,7 +2,6 @@ export type ArrayRowToInsert = {
|
||||
arrays: {
|
||||
[tableName: string]: ArrayRowToInsert[]
|
||||
}
|
||||
columnName: string
|
||||
locales: {
|
||||
[locale: string]: Record<string, unknown>
|
||||
}
|
||||
|
||||
@@ -9,14 +9,16 @@ import type { PostgresAdapter } from './types'
|
||||
import buildQuery from './queries/buildQuery'
|
||||
import { upsertRow } from './upsertRow'
|
||||
|
||||
export const updateGlobalVersion: UpdateGlobalVersion = async function updateVersion (
|
||||
export const updateGlobalVersion: UpdateGlobalVersion = async function updateVersion(
|
||||
this: PostgresAdapter,
|
||||
{ id, global, locale, req = {} as PayloadRequest, versionData, where: whereArg },
|
||||
) {
|
||||
const db = this.sessions?.[req.transactionID] || this.db
|
||||
const globalConfig: SanitizedGlobalConfig = this.payload.globals.config.find(({ slug }) => slug === global)
|
||||
const globalConfig: SanitizedGlobalConfig = this.payload.globals.config.find(
|
||||
({ slug }) => slug === global,
|
||||
)
|
||||
const whereToUse = whereArg || { id: { equals: id } }
|
||||
const tableName = `_${toSnakeCase(global)}_versions`
|
||||
const tableName = `_${toSnakeCase(global)}_v`
|
||||
const fields = buildVersionGlobalFields(globalConfig)
|
||||
|
||||
const { where } = await buildQuery({
|
||||
|
||||
@@ -16,7 +16,7 @@ export const updateVersion: UpdateVersion = async function updateVersion(
|
||||
const db = this.sessions?.[req.transactionID] || this.db
|
||||
const collectionConfig: SanitizedCollectionConfig = this.payload.collections[collection].config
|
||||
const whereToUse = whereArg || { id: { equals: id } }
|
||||
const tableName = `_${toSnakeCase(collection)}_versions`
|
||||
const tableName = `_${toSnakeCase(collection)}_v`
|
||||
const fields = buildVersionCollectionFields(collectionConfig)
|
||||
|
||||
const { where } = await buildQuery({
|
||||
|
||||
Reference in New Issue
Block a user