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

122 lines
3.6 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 'list': {
const { petId, type, page, pageSize } = event
let query = db.collection('health_records').where({ user_id: uid })
if (petId) {
query = db.collection('health_records').where({
user_id: uid,
pet_id: petId,
})
}
if (type && type !== 'all') {
const where = petId
? { user_id: uid, pet_id: petId, type }
: { user_id: uid, type }
query = db.collection('health_records').where(where)
}
const p = page || 1
const ps = pageSize || 50
const skip = (p - 1) * ps
const res = await query
.orderBy('date', 'desc')
.skip(skip)
.limit(ps)
.get()
return {
code: 0,
data: { list: res.data || [], total: res.affectedDocs !== undefined ? res.affectedDocs : res.data.length },
}
}
case 'detail': {
const { recordId } = event
if (!recordId) {
return { code: -1, message: '缺少记录ID' }
}
const res = await db.collection('health_records').doc(recordId).get()
if (!res.data || res.data.length === 0) {
return { code: -1, message: '记录不存在' }
}
return { code: 0, data: res.data[0] }
}
case 'add': {
const { pet_id, type, title, date, nextDate, hospital, doctor, description,
vaccineName, batchNumber, dewormType, dewormBrand, diagnosis, medications,
images, cost, tags } = event
if (!pet_id || !type || !date) {
return { code: -1, message: '请填写必填项(宠物、类型、日期)' }
}
const now = Date.now()
const recordData = {
user_id: uid,
pet_id,
type,
title: title || '',
date,
nextDate: nextDate || '',
hospital: hospital || '',
doctor: doctor || '',
description: description || '',
vaccineName: vaccineName || '',
batchNumber: batchNumber || '',
dewormType: dewormType || '',
brand: dewormBrand || '',
diagnosis: diagnosis || '',
medications: medications || [],
images: images || [],
cost: cost || 0,
tags: tags || [],
createdAt: now,
updatedAt: now,
}
const res = await db.collection('health_records').add(recordData)
return { code: 0, data: { _id: res.id }, message: '添加成功' }
}
case 'update': {
const { recordId, ...updateFields } = event
if (!recordId) {
return { code: -1, message: '缺少记录ID' }
}
delete updateFields.action
delete updateFields.uid
updateFields.updatedAt = Date.now()
await db.collection('health_records').doc(recordId).update(updateFields)
return { code: 0, message: '更新成功' }
}
case 'delete': {
const { recordId } = event
if (!recordId) {
return { code: -1, message: '缺少记录ID' }
}
await db.collection('health_records').doc(recordId).remove()
return { code: 0, message: '删除成功' }
}
default:
return { code: -1, message: `未知操作: ${action}` }
}
} catch (err) {
console.error('recordManager error:', err)
return { code: -1, message: err.message || '操作失败' }
}
}