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 } } }