full
This commit is contained in:
38
utils/commentStatusSave.js
Normal file
38
utils/commentStatusSave.js
Normal file
@@ -0,0 +1,38 @@
|
||||
const { resolveCommentModerationStatus } = require('./contentModeration')
|
||||
|
||||
const STATUS_FALLBACKS = {
|
||||
temp_accept: ['temp_accept', 'accepted', 'pending'],
|
||||
rejected: ['rejected', 'pending'],
|
||||
}
|
||||
|
||||
/**
|
||||
* Save comment with moderation status; fall back if server schema lacks newer enum values.
|
||||
*/
|
||||
async function saveCommentWithModerationStatus(Model, data, textField = 'comment') {
|
||||
const text = data[textField] ?? data.text ?? ''
|
||||
const preferredStatus = resolveCommentModerationStatus(text)
|
||||
const candidates = STATUS_FALLBACKS[preferredStatus] ?? [preferredStatus]
|
||||
|
||||
let lastError = null
|
||||
for (let i = 0; i < candidates.length; i += 1) {
|
||||
const status = candidates[i]
|
||||
const doc = new Model({ ...data, status })
|
||||
try {
|
||||
await doc.save()
|
||||
return doc
|
||||
} catch (err) {
|
||||
lastError = err
|
||||
const isLast = i === candidates.length - 1
|
||||
if (err?.name === 'ValidationError' && !isLast) {
|
||||
continue
|
||||
}
|
||||
throw err
|
||||
}
|
||||
}
|
||||
|
||||
throw lastError ?? new Error('Failed to save comment')
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
saveCommentWithModerationStatus,
|
||||
}
|
||||
Reference in New Issue
Block a user