修改bug
This commit is contained in:
91
cloudfunctions/commentCreate/index.js
Normal file
91
cloudfunctions/commentCreate/index.js
Normal file
@@ -0,0 +1,91 @@
|
||||
const cloud = require('wx-server-sdk')
|
||||
|
||||
cloud.init({ env: cloud.DYNAMIC_CURRENT_ENV })
|
||||
const db = cloud.database()
|
||||
const _ = db.command
|
||||
const COMMENTS_COLLECTION = 'comments'
|
||||
|
||||
function isCollectionMissing(error) {
|
||||
const text = String(error?.errMsg || error?.message || error || '')
|
||||
return (
|
||||
text.includes('collection not exist') ||
|
||||
text.includes('collection not exists') ||
|
||||
text.includes('collection is not exists') ||
|
||||
text.includes('DATABASE_COLLECTION_NOT_EXIST') ||
|
||||
text.includes('-502005')
|
||||
)
|
||||
}
|
||||
|
||||
function isCollectionAlreadyExists(error) {
|
||||
const text = String(error?.errMsg || error?.message || error || '')
|
||||
return text.includes('collection already exists') || text.includes('DATABASE_COLLECTION_ALREADY_EXIST')
|
||||
}
|
||||
|
||||
async function ensureCommentsCollection() {
|
||||
if (typeof db.createCollection !== 'function') {
|
||||
throw new Error('comments collection does not exist')
|
||||
}
|
||||
|
||||
try {
|
||||
await db.createCollection(COMMENTS_COLLECTION)
|
||||
} catch (error) {
|
||||
if (!isCollectionAlreadyExists(error)) throw error
|
||||
}
|
||||
}
|
||||
|
||||
async function addComment(data) {
|
||||
try {
|
||||
return await db.collection(COMMENTS_COLLECTION).add({ data })
|
||||
} catch (error) {
|
||||
if (!isCollectionMissing(error)) throw error
|
||||
await ensureCommentsCollection()
|
||||
return db.collection(COMMENTS_COLLECTION).add({ data })
|
||||
}
|
||||
}
|
||||
|
||||
exports.main = async event => {
|
||||
const { OPENID } = cloud.getWXContext()
|
||||
if (!OPENID) throw new Error('no openid in wx context')
|
||||
|
||||
const postId = String(event.postId || '').trim()
|
||||
const content = String(event.content || '').trim()
|
||||
if (!postId) throw new Error('postId is required')
|
||||
if (!content) throw new Error('content is required')
|
||||
|
||||
const [postRes, userRes] = await Promise.all([
|
||||
db.collection('posts').doc(postId).get(),
|
||||
db.collection('users').where({ openid: OPENID }).limit(1).get()
|
||||
])
|
||||
|
||||
if (!postRes.data) throw new Error('post not found')
|
||||
if (!userRes.data.length) throw new Error('user not found')
|
||||
|
||||
const now = Date.now()
|
||||
const user = userRes.data[0]
|
||||
const result = await addComment({
|
||||
postId,
|
||||
openid: OPENID,
|
||||
authorId: user._id,
|
||||
authorSnapshot: {
|
||||
name: user.nickname || '',
|
||||
avatarKey: user.avatarKey || 'gradient-avatar-1',
|
||||
avatarUrl: user.avatarUrl || ''
|
||||
},
|
||||
content: content.slice(0, 500),
|
||||
createdAt: now,
|
||||
updatedAt: now
|
||||
})
|
||||
|
||||
await db.collection('posts').doc(postId).update({
|
||||
data: {
|
||||
'counts.comments': _.inc(1),
|
||||
updatedAt: now
|
||||
}
|
||||
})
|
||||
|
||||
const updatedPost = await db.collection('posts').doc(postId).get()
|
||||
return {
|
||||
commentId: result._id,
|
||||
comments: updatedPost.data.counts?.comments || 0
|
||||
}
|
||||
}
|
||||
8
cloudfunctions/commentCreate/package.json
Normal file
8
cloudfunctions/commentCreate/package.json
Normal file
@@ -0,0 +1,8 @@
|
||||
{
|
||||
"name": "commentCreate",
|
||||
"version": "1.0.0",
|
||||
"main": "index.js",
|
||||
"dependencies": {
|
||||
"wx-server-sdk": "latest"
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user