Files
payload/packages/db-mongodb/src/updateOne.ts
Sasha 79a7b4ad02 chore(db-mongodb): tsconfig uses strict: true and noUncheckedIndexedAccess: true (#11444)
Migrates the `db-mongodb` package to use `strict: true` and
`noUncheckedIndexedAccess: true` TSConfig properties.
This greatly improves code quality and prevents some runtime errors or
gives better error messages.
2025-03-01 00:17:24 +02:00

74 lines
1.8 KiB
TypeScript

import type { MongooseUpdateQueryOptions } from 'mongoose'
import type { UpdateOne } from 'payload'
import type { MongooseAdapter } from './index.js'
import { buildQuery } from './queries/buildQuery.js'
import { buildProjectionFromSelect } from './utilities/buildProjectionFromSelect.js'
import { getCollection } from './utilities/getEntity.js'
import { getSession } from './utilities/getSession.js'
import { handleError } from './utilities/handleError.js'
import { transform } from './utilities/transform.js'
export const updateOne: UpdateOne = async function updateOne(
this: MongooseAdapter,
{
id,
collection: collectionSlug,
data,
locale,
options: optionsArgs = {},
req,
returning,
select,
where: whereArg = {},
},
) {
const { collectionConfig, Model } = getCollection({ adapter: this, collectionSlug })
const where = id ? { id: { equals: id } } : whereArg
const fields = collectionConfig.fields
const options: MongooseUpdateQueryOptions = {
...optionsArgs,
lean: true,
new: true,
projection: buildProjectionFromSelect({
adapter: this,
fields: collectionConfig.flattenedFields,
select,
}),
session: await getSession(this, req),
}
const query = await buildQuery({
adapter: this,
collectionSlug,
fields: collectionConfig.flattenedFields,
locale,
where,
})
let result
transform({ adapter: this, data, fields, operation: 'write' })
try {
if (returning === false) {
await Model.updateOne(query, data, options)
return null
} else {
result = await Model.findOneAndUpdate(query, data, options)
}
} catch (error) {
handleError({ collection: collectionSlug, error, req })
}
if (!result) {
return null
}
transform({ adapter: this, data: result, fields, operation: 'read' })
return result
}