FurBall/uniCloud-alipay/cloudfunctions/userManager/index.js

107 lines
2.8 KiB
JavaScript

'use strict'
const db = uniCloud.database()
exports.main = async (event, context) => {
const { action, uid } = event
if (!uid) {
return { code: -1, message: '缺少用户标识' }
}
try {
switch (action) {
case 'profile': {
// 查询用户资料
const res = await db.collection('users')
.doc(uid)
.get()
if (!res.data || res.data.length === 0) {
// 尝试兼容 user 集合
const res2 = await db.collection('users')
.doc(uid)
.get()
if (!res2.data || res2.data.length === 0) {
return { code: -1, message: '用户不存在' }
}
const user = res2.data[0]
return {
code: 0,
data: {
avatarUrl: user.avatarUrl || '',
nickName: user.nickName || '毛球用户',
membership: user.membership || { type: 'free', expireAt: null }
}
}
}
const user = res.data[0]
return {
code: 0,
data: {
avatarUrl: user.avatarUrl || user.wx_avatar_url || '',
nickName: user.nickName || user.wx_nickname || '毛球用户',
membership: user.membership || { type: 'free', expireAt: null }
}
}
}
case 'stats': {
// 统计用户数据
let petCount = 0
let recordCount = 0
let pendingScheduleCount = 0
try {
const petsRes = await db.collection('pets')
.where({ user_id: uid })
.count()
petCount = petsRes.total || 0
} catch (e) {
// 集合可能不存在
}
try {
const recordsRes = await db.collection('health_records')
.where({ user_id: uid })
.count()
recordCount = recordsRes.total || 0
} catch (e) {
// 集合可能不存在
}
try {
const schedulesRes = await db.collection('schedules')
.where({ user_id: uid, status: 'pending' })
.count()
pendingScheduleCount = schedulesRes.total || 0
} catch (e) {
// 集合可能不存在
}
return {
code: 0,
data: { petCount, recordCount, pendingScheduleCount }
}
}
case 'updateProfile': {
const { nickName, avatarUrl, phone } = event
await db.collection('users').doc(uid).update({
nickName: nickName || '',
avatarUrl: avatarUrl || '',
phone: phone || '',
updatedAt: Date.now()
})
return { code: 0, message: '更新成功' }
}
default:
return { code: -1, message: `未知操作: ${action}` }
}
} catch (err) {
console.error('userManager error:', err)
return { code: -1, message: err.message || '操作失败' }
}
}