Fixes https://github.com/payloadcms/payload/issues/6884 Adds a new flag `acceptIDOnCreate` that allows you to thread your own `id` to `payload.create` `data`, for example: ```ts // doc created with id 1 const doc = await payload.create({ collection: 'posts', data: {id: 1, title: "my title"}}) ``` ```ts import { Types } from 'mongoose' const id = new Types.ObjectId().toHexString() const doc = await payload.create({ collection: 'posts', data: {id, title: "my title"}}) ```
37 lines
862 B
TypeScript
37 lines
862 B
TypeScript
import type { Create } from 'payload'
|
|
|
|
import toSnakeCase from 'to-snake-case'
|
|
|
|
import type { DrizzleAdapter } from './types.js'
|
|
|
|
import { upsertRow } from './upsertRow/index.js'
|
|
import { getTransaction } from './utilities/getTransaction.js'
|
|
|
|
export const create: Create = async function create(
|
|
this: DrizzleAdapter,
|
|
{ collection: collectionSlug, data, req, returning, select },
|
|
) {
|
|
const db = await getTransaction(this, req)
|
|
const collection = this.payload.collections[collectionSlug].config
|
|
|
|
const tableName = this.tableNameMap.get(toSnakeCase(collection.slug))
|
|
|
|
const result = await upsertRow({
|
|
adapter: this,
|
|
data,
|
|
db,
|
|
fields: collection.flattenedFields,
|
|
ignoreResult: returning === false,
|
|
operation: 'create',
|
|
req,
|
|
select,
|
|
tableName,
|
|
})
|
|
|
|
if (returning === false) {
|
|
return null
|
|
}
|
|
|
|
return result
|
|
}
|