diff --git a/packages/db-postgres/src/create/insertRows.ts b/packages/db-postgres/src/create/insertRows.ts index b78fe1978b..c30570f910 100644 --- a/packages/db-postgres/src/create/insertRows.ts +++ b/packages/db-postgres/src/create/insertRows.ts @@ -37,6 +37,9 @@ export const insertRows = async ({ tableName, }); + // TODO: + // What do we do if we want to insert a new row and let default values populate, + // but we don't have any values? const [insertedRow] = await adapter.db.insert(adapter.tables[tableName]) .values(row).returning(); diff --git a/packages/db-postgres/src/create/traverseFields.ts b/packages/db-postgres/src/create/traverseFields.ts index 91652bdec9..f363897258 100644 --- a/packages/db-postgres/src/create/traverseFields.ts +++ b/packages/db-postgres/src/create/traverseFields.ts @@ -190,7 +190,9 @@ export const traverseFields = async ({ break; default: { - targetRow[columnName] = data[columnName]; + if (typeof data[field.name] !== 'undefined') { + targetRow[columnName] = data[field.name]; + } break; } } diff --git a/packages/db-postgres/src/init.ts b/packages/db-postgres/src/init.ts index 64e1d8610d..852873bbac 100644 --- a/packages/db-postgres/src/init.ts +++ b/packages/db-postgres/src/init.ts @@ -22,6 +22,7 @@ export const init: Init = async function init( buildRelationships: true, fields: collection.fields, tableName: collection.slug, + timestamps: collection.timestamps, }); }, ); diff --git a/packages/db-postgres/src/schema/build.ts b/packages/db-postgres/src/schema/build.ts index 9dd34b2580..2ad4860ec3 100644 --- a/packages/db-postgres/src/schema/build.ts +++ b/packages/db-postgres/src/schema/build.ts @@ -13,6 +13,7 @@ import { index, numeric, PgColumnHKT, + timestamp, IndexBuilder, } from 'drizzle-orm/pg-core'; import { Field } from 'payload/types'; @@ -29,6 +30,7 @@ type Args = { buildRelationships?: boolean fields: Field[] tableName: string + timestamps?: boolean } type Result = { @@ -41,6 +43,7 @@ export const buildTable = ({ buildRelationships, fields, tableName, + timestamps, }: Args): Result => { const formattedTableName = toSnakeCase(tableName); const columns: Record = baseColumns; @@ -87,6 +90,11 @@ export const buildTable = ({ relationships, })); + if (timestamps) { + columns.createdAt = timestamp('created_at').defaultNow().notNull(); + columns.updatedAt = timestamp('updated_at').defaultNow().notNull(); + } + const table = pgTable(formattedTableName, columns, (cols) => { return Object.entries(indexes).reduce((acc, [colName, func]) => { acc[colName] = func(cols);