- 删除未使用的空组件目录、死代码导出(clearAuth/calcDistance/COLORS/ AVATAR_GRADIENTS/Message/TabBarItem/deletePost/uploadImage/getFileURL/ _initLogin),确保程序仍可正常运行 - 新增 8 个云函数并补全对应页面逻辑:getMessages/sendMessage(私信聊天)、 getHotTopics/searchPosts/searchUsers(搜索)、getStory(故事,复用 posts 集合)、getNotifications/markAllRead(基于点赞评论聚合的通知系统) - 在 cloudbaserc.json 中注册全部新云函数,并通过 --deployMode zip 完成部署 Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
47 lines
1.4 KiB
JavaScript
47 lines
1.4 KiB
JavaScript
const cloud = require('wx-server-sdk')
|
|
cloud.init({ env: cloud.DYNAMIC_CURRENT_ENV })
|
|
const db = cloud.database()
|
|
const _ = db.command
|
|
const PAGE_SIZE = 30
|
|
|
|
exports.main = async (event, context) => {
|
|
const { OPENID } = cloud.getWXContext()
|
|
const { peerId, page = 0 } = event || {}
|
|
|
|
try {
|
|
const meRes = await db.collection('users').where({ openid: OPENID }).get()
|
|
if (meRes.data.length === 0) return { code: -1, message: '用户不存在' }
|
|
const myId = meRes.data[0]._id
|
|
|
|
let list = []
|
|
if (peerId) {
|
|
const skip = page * PAGE_SIZE
|
|
const msgRes = await db.collection('messages')
|
|
.where(_.or([
|
|
{ fromId: myId, toId: peerId },
|
|
{ fromId: peerId, toId: myId },
|
|
]))
|
|
.orderBy('createdAt', 'desc')
|
|
.skip(skip)
|
|
.limit(PAGE_SIZE)
|
|
.get()
|
|
|
|
list = msgRes.data.reverse().map(m => ({ ...m, isMe: m.fromId === myId }))
|
|
|
|
// 把对方发来的未读消息标记为已读
|
|
const unreadIds = msgRes.data.filter(m => m.toId === myId && !m.isRead).map(m => m._id)
|
|
if (unreadIds.length) {
|
|
await db.collection('messages').where({ _id: _.in(unreadIds) }).update({ data: { isRead: true } })
|
|
}
|
|
}
|
|
|
|
const unreadRes = await db.collection('messages')
|
|
.where({ toId: myId, isRead: _.neq(true) })
|
|
.count()
|
|
|
|
return { code: 0, data: { list, unreadCount: unreadRes.total } }
|
|
} catch (e) {
|
|
return { code: -1, message: e.message }
|
|
}
|
|
}
|