server/laf-cloud/functions/passCheck.ts

55 lines
2.3 KiB
TypeScript

import cloud from '@lafjs/cloud'
const db = cloud.database();
import Utils from "@/Utils";
import { legacyPassView } from '@/passCheckUpgrade';
import { currentPassStart, freezeUser, parse } from '@/passCheckSettlement';
export default async function (ctx: FunctionContext) {
const action = ctx.body.action;
const uid = ctx.body.uid;
if (!action) {
return { code: 0, data: null, msg: "未获取到action" };
}
if (!uid) {
return { code: 0, data: null, msg: "未获取到uid" };
}
let dbname = "users";
// const gameName = ctx.body.gameName;
// if (gameName == "iaa") {
// dbname = "usersAd";
// }
let res = await db.collection(dbname).where({ _id: uid }).getOne();
const token1 = ctx.body.token;
if (res.data && res.data.token) {
let istoken = Utils.checkToken(token1, res.data.token);
if (!istoken) {
return { code: 0, data: null, msg: "token校验失败" };
}
}
if (!res.data) return { code: 0, msg: '用户不存在' };
res.data = await freezeUser(res.data);
switch (action) {
case 'save':
let passCheck = ctx.body.passCheck;
if (!passCheck) {
return { code: 0, data: null, msg: "未获取到coinAmount" };
}
const incoming = parse(passCheck);
const ends = [incoming[1], incoming[2]].filter(s => Number(s?.time) > 0).map(s => Number(s.time));
if (ends.some(end => end <= Date.now())) return { code: 410, msg: '上期进度已冻结' };
const where: any = { _id: res.data._id, passCheck: res.data.passCheck ?? null };
if (ends.length) where.$expr = { $lt: ['$$NOW', new Date(Math.min(...ends))] };
const ret = await (cloud.mongo.db as any).collection(dbname).updateOne(where, { $set: { passCheck } });
if (!(ret.matchedCount ?? ret.modifiedCount)) return { code: 409, msg: '战令已更新或到期,请重试' };
return { code: 1, data: { passCheck: passCheck }, msg: "用户数据更新成功" }
case 'read':
let passCheck1 = legacyPassView(res.data?.passCheck || null, res.data?.passCheckUpgrade);
let t = await currentPassStart();
return { code: 1, data: { passCheck: passCheck1, time: t }, msg: "成功" }
default:
return {
code: 400,
message: '无效的操作类型,请使用 save 或 read'
}
}
}