127 lines
3.5 KiB
TypeScript
127 lines
3.5 KiB
TypeScript
import cloud from '@lafjs/cloud'
|
|
const db = cloud.database();
|
|
import Utils from "@/Utils";
|
|
export default async function (ctx: FunctionContext) {
|
|
const uid = ctx.body.uid;
|
|
if (!uid) {
|
|
return { code: 0, data: null, msg: "未获取到uid" };
|
|
}
|
|
const address = ctx.body.address;
|
|
let dbname = "users";
|
|
const gameName = ctx.body.gameName;
|
|
let db1 = "691093093cf0c4532ba4fd9c";
|
|
if (gameName == "iaa") {
|
|
dbname = "usersAd";
|
|
db1 = "691097ac3cf0c4532ba4fd9e";
|
|
}
|
|
let ret1 = await db.collection(dbname).where({ _id: uid }).getOne();
|
|
let oldAddress = ret1.data.address;
|
|
if (address == oldAddress) {
|
|
return;
|
|
}
|
|
const token1 = ctx.body.token;
|
|
if (ret1.data && ret1.data.token) {
|
|
let istoken = Utils.checkToken(token1, ret1.data.token);
|
|
if (!istoken) {
|
|
return { code: 0, data: null, msg: "token校验失败" };
|
|
}
|
|
}
|
|
let ret = await db.collection(dbname).where({ _id: uid }).update({ address: address });
|
|
if (ret1.data.isWhite == false) {
|
|
let res = await rank(db1, uid, ret1, oldAddress, address);
|
|
}
|
|
return { code: 1, data: { address: address }, msg: "ok" }
|
|
}
|
|
|
|
async function rank(db1, uid, res1, oldaddress, address) {
|
|
let add = res1.data.addLevel;
|
|
if (add < 5) {
|
|
return;
|
|
}
|
|
let rankInfo = await db.collection("sRank").where({ _id: db1 }).getOne();
|
|
let total = rankInfo.data.total;
|
|
if (total != null) {
|
|
total = JSON.parse(total);
|
|
} else {
|
|
total = {};
|
|
}
|
|
if (total[oldaddress]) {
|
|
for (let i = 0; i < total[oldaddress].length; i++) {
|
|
if (total[oldaddress][i].id == uid) {
|
|
total[oldaddress].splice(i, 1)
|
|
}
|
|
}
|
|
}
|
|
if (total[address]) {
|
|
let isHave = false;
|
|
for (let i = 0; i < total[address].length; i++) {
|
|
if (total[address][i].id == uid) {
|
|
isHave = true;
|
|
break;
|
|
}
|
|
}
|
|
if (isHave == false) {
|
|
let length = total[address].length;
|
|
if (length < 30 || add > total[address][length - 1].addLevel) {
|
|
total[address].push({
|
|
id: uid,
|
|
addLevel: add,
|
|
time: Date.now(),
|
|
username: res1.data?.username,
|
|
useravatar: res1.data?.useravatar,
|
|
useravatarIcon: res1.data?.useravatarIcon,
|
|
levelAmount: res1.data?.levelAmount
|
|
});
|
|
}
|
|
}
|
|
} else {
|
|
total[address] = [{
|
|
id: uid,
|
|
addLevel: add,
|
|
time: Date.now(),
|
|
username: res1.data?.username,
|
|
useravatar: res1.data?.useravatar,
|
|
useravatarIcon: res1.data?.useravatarIcon,
|
|
levelAmount: res1.data?.levelAmount
|
|
}];
|
|
}
|
|
total[address].sort((a, b) => {
|
|
if (a.addLevel !== b.addLevel) {
|
|
return b.addLevel - a.addLevel;
|
|
}
|
|
return a.time - b.time;
|
|
});
|
|
if (total[address].length >= 30) {
|
|
total[address] = total[address].slice(0, 30);
|
|
}
|
|
if (!total["role"]) {
|
|
total["role"] = {};
|
|
}
|
|
if (total["role"][oldaddress] > 0) {
|
|
total["role"][oldaddress] -= 1;
|
|
let length = total[oldaddress]?.length || 0;
|
|
if (length < 10) {
|
|
total["role"][oldaddress] = length;
|
|
}
|
|
}
|
|
if (!total["role"][address]) {
|
|
total["role"][address] = 1;
|
|
} else {
|
|
total["role"][address] += 1;
|
|
let length = total[address]?.length || 0;
|
|
if (length < 10) {
|
|
total["role"][address] = length;
|
|
};
|
|
}
|
|
//console.log(address);
|
|
let ret1 = await db.collection("sRank").where({ _id: db1 }).update({ total: JSON.stringify(total) });
|
|
let rank = -1;
|
|
for (let i = 0; i < total[address].length; i++) {
|
|
if (total[address][i].id == uid) {
|
|
rank = i + 1;
|
|
break;
|
|
}
|
|
}
|
|
return rank;
|
|
}
|