37 lines
1.2 KiB
JavaScript
37 lines
1.2 KiB
JavaScript
const cloud = require('wx-server-sdk')
|
|
|
|
cloud.init({ env: cloud.DYNAMIC_CURRENT_ENV })
|
|
const db = cloud.database()
|
|
|
|
const ALLOWED_VISIBILITY = ['public', 'friends', 'private']
|
|
|
|
// Lightweight edit: only the post's text content and visibility can change here.
|
|
exports.main = async event => {
|
|
const { OPENID } = cloud.getWXContext()
|
|
if (!OPENID) throw new Error('no openid in wx context')
|
|
if (!event.postId) throw new Error('postId is required')
|
|
|
|
let postRes
|
|
try {
|
|
postRes = await db.collection('posts').doc(event.postId).get()
|
|
} catch (_) {
|
|
throw new Error('post not found')
|
|
}
|
|
const post = postRes.data
|
|
if (!post) throw new Error('post not found')
|
|
if (post.authorOpenid !== OPENID) throw new Error('not allowed')
|
|
|
|
const data = { updatedAt: Date.now() }
|
|
if (typeof event.content === 'string') {
|
|
const content = event.content.trim()
|
|
if (!content) throw new Error('content is required')
|
|
data.content = content.slice(0, 2000)
|
|
}
|
|
if (typeof event.visibility === 'string' && ALLOWED_VISIBILITY.includes(event.visibility)) {
|
|
data.visibility = event.visibility
|
|
}
|
|
|
|
await db.collection('posts').doc(event.postId).update({ data })
|
|
return { ok: true }
|
|
}
|