30 lines
1.7 KiB
TypeScript
30 lines
1.7 KiB
TypeScript
import cloud from "@lafjs/cloud";
|
|
import Utils from "@/Utils";
|
|
import { isV2Task, parseTask, refreshLegacyTask, LEGACY_TARGETS, taskVersionError, taskConflict, writeTask } from "@/dailyTaskCompatibility";
|
|
const db = cloud.database();
|
|
export default async function (ctx: FunctionContext) {
|
|
const body = ctx.body || {};
|
|
if (!body.uid) return { code: 0, data: null, msg: "未获取到uid" };
|
|
const dbname = body.gameName === "iaa" ? "usersAd" : "users";
|
|
const { data: user } = await db.collection(dbname).where({ _id: body.uid }).getOne();
|
|
if (!user) return { code: 0, data: null, msg: "未获取到用户信息" };
|
|
if (user.token && !Utils.checkToken(body.token, user.token)) return { code: 0, data: null, msg: "token校验失败" };
|
|
if (isV2Task(user.task)) return taskVersionError();
|
|
const now = Date.now();
|
|
const task = refreshLegacyTask(user.task, user.taskTime, now);
|
|
if (body.action === "save") {
|
|
const incoming = parseTask(body.task);
|
|
if (!incoming || typeof incoming !== "object") return { code: 0, data: null, msg: "请输入task数据" };
|
|
for (const key of Object.keys(LEGACY_TARGETS)) {
|
|
const value = Number(incoming[key]?.value);
|
|
if (!Number.isFinite(value) || value < 0) return { code: 0, data: null, msg: "任务进度无效" };
|
|
task[key].value = value;
|
|
if (task[key].state === 0 && value >= task[key].target) task[key].state = 1;
|
|
}
|
|
if (!await writeTask(dbname, user, task, now + 8 * 3600000)) return taskConflict();
|
|
return { code: 1, data: { task }, msg: "用户数据更新成功" };
|
|
}
|
|
if (body.action === "read") return { code: 1, data: { task }, msg: "成功" };
|
|
return { code: 400, data: null, msg: "无效的操作类型,请使用 save 或 read" };
|
|
}
|