import cloud from "@lafjs/cloud"; import Utils from "@/Utils"; import { WEEKLY_REWARDS } from "@/dailyTaskConfig"; import { refreshTaskData } from "@/dailyTaskService"; const db = cloud.database(); export default async function (ctx: FunctionContext) { const body = ctx.body || {}; const uid = body.uid; if (!uid) return { code: 0, data: null, msg: "未获取到uid" }; const result = await db.collection("users").where({ _id: uid }).getOne(); const user = result.data; 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 (user.isDebug !== true && user.isDebug !== "true") { return { code: 403, data: null, msg: "仅调试账号可调用" }; } // const debugKey = process.env.DAILY_TASK_DEBUG_KEY; // if (!debugKey || body.debugKey !== debugKey) { // return { code: 403, data: null, msg: "调试密钥校验失败" }; // } const level = Number(user.levelAmount) + 1 || 1; let task = refreshTaskData(user.task, uid, level).data; const action = String(body.action || ""); if (action === "set_daily_progress" || action === "complete_daily") { const dailyTask = findDailyTask(task.dailyTasks, body.taskId, body.slot); if (!dailyTask) return { code: 0, data: { task }, msg: "未找到指定每日任务" }; const value = action === "complete_daily" ? dailyTask.target : Number(body.value); if (!Number.isFinite(value)) return { code: 0, data: { task }, msg: "value必须是数字" }; dailyTask.value = Math.max(0, Math.min(dailyTask.target, value)); if (dailyTask.state !== 2) dailyTask.state = dailyTask.value >= dailyTask.target ? 1 : 0; } else if (action === "complete_all_daily") { task.dailyTasks.forEach(dailyTask => { if (dailyTask.state === 2) return; dailyTask.value = dailyTask.target; dailyTask.state = 1; }); } else if (action === "set_weekly_stars" || action === "add_weekly_stars") { const value = Number(body.value); if (!Number.isFinite(value)) return { code: 0, data: { task }, msg: "value必须是数字" }; const stars = action === "add_weekly_stars" ? task.weeklyStars + value : value; task.weeklyStars = Math.max(0, Math.min(140, stars)); } else if (action === "reset_daily") { task.dayKey = ""; task = refreshTaskData(task, uid, level).data; } else if (action === "reset_weekly") { task.weeklyStars = 0; task.weeklyRewards = cloneWeeklyRewards(); } else if (action === "reset_all") { task.dayKey = ""; task.weekKey = ""; task = refreshTaskData(task, uid, level).data; } else { return { code: 0, data: { task }, msg: "不支持的调试操作" }; } task = refreshTaskData(task, uid, level).data; await db.collection(dbname).where({ _id: uid }).update({ task: JSON.stringify(task), taskTime: Date.now(), }); return { code: 1, data: { task }, msg: "调试任务数据更新成功" }; } function findDailyTask(tasks: any[], taskId: unknown, slot: unknown) { if (taskId != null && taskId !== "") return tasks.find(task => task.taskId === String(taskId)); const slotNumber = Number(slot); return Number.isInteger(slotNumber) ? tasks.find(task => task.slot === slotNumber) : null; } function cloneWeeklyRewards() { return WEEKLY_REWARDS.map(reward => ({ ...reward, state: 0 as const, rewards: reward.rewards.map(item => ({ ...item })), })); }