Files
heros/build-templates/wechatgame/cloud_functions/cocos_cloud/index.js
walkpan cfb6819bc7 refactor(common): 重构游戏数据同步与单例模块代码
- 移除 GameDataSyncManager 类及相关依赖,简化数据同步管理逻辑
- 在 SingletonModuleComp 中集成数据管理功能,使用本地数组替代字典结构存储英雄数据
- 优化本地与云端数据同步方法,适配云函数接口改动
- 修改英雄判断逻辑,支持基于数组的查询方式
- 修正金币数据的增减接口,增加异步云调用与本地更新的统一处理
- 删除冗余注释及无用代码,提升代码可读性和维护性
- 调整数据结构定义和类型声明,保障类型安全与代码健壮性
2025-10-19 18:05:45 +08:00

80 lines
1.8 KiB
JavaScript

// 云函数入口文件
const cloud = require('wx-server-sdk');
const user_db_name = "cocos_users";
cloud.init({ env: cloud.DYNAMIC_CURRENT_ENV }); // 使用当前云环境
// 云函数入口函数
exports.main = async (event, context) => {
let cmd = event.cmd;
if (cmd == null) {
return {
code: -1,
msg: "no cmd!"
};
}
const wxContext = cloud.getWXContext();
const db = cloud.database({
env: cloud.DYNAMIC_CURRENT_ENV,
throwOnNotFound: false
});
const _ = db.command;
if (cmd === "login") {
let user = await getOrCreaterUser(db, wxContext.OPENID);
return {
code: 200,
data: user,
};
} else if (cmd === "save") {
let data = event.data;
let user = await getOrCreaterUser(db, wxContext.OPENID);
let saveDataRes = await db.collection(user_db_name).doc(user._id).update({
data: {
game_data: _.set(data)
}
});
console.log("Save data:", saveDataRes, data);
if (saveDataRes?.stats?.updated >= 1) {
return {
code: 200,
data: saveDataRes
};
} else {
return {
code: -1,
msg: `Save fail, ${JSON.stringify(saveDataRes)}`
};
}
}
return {
code: -2,
msg: `Unknow cmd: ${event?.cmd}`,
};
};
async function getOrCreaterUser(db, openid) {
try {
let res = await db.collection(user_db_name).where({ _openid: openid }).get();
let userData = null;
if (res == null || res.data == null || res.data.length <= 0) {
userData = {
_openid: openid,
regist_time: Date.now(),
};
let addResult = await db.collection(user_db_name).add({
data: userData
});
userData._id = addResult._id;
} else {
userData = res.data[0];
}
return userData;
} catch (err) {
console.error(`Get or create user err`, err);
return null;
}
}