fix(): fix profile update
This commit is contained in:
parent
3f3e369fb7
commit
17473db3b5
@ -18,6 +18,9 @@ import { Router } from "express";
|
|||||||
import { ErrorResponseBuilder, SuccessResponseBuilder } from "../responseBuilder.js";
|
import { ErrorResponseBuilder, SuccessResponseBuilder } from "../responseBuilder.js";
|
||||||
import { MAdmin } from "../../mongo/admin.js";
|
import { MAdmin } from "../../mongo/admin.js";
|
||||||
import { MProfile } from "../../mongo/profile.js";
|
import { MProfile } from "../../mongo/profile.js";
|
||||||
|
import { PlayerUtil } from "../../util/PlayerUtil.js";
|
||||||
|
import { getVehicle } from "../../util/contants.js";
|
||||||
|
import { isTruthyAndGreaterThanZero } from "../../util/functions.js";
|
||||||
|
|
||||||
export class AdminRoute
|
export class AdminRoute
|
||||||
{
|
{
|
||||||
@ -203,6 +206,101 @@ export class AdminRoute
|
|||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
|
app.post("/profile/:playerId/forceUpdate", async (req, res) =>
|
||||||
|
{
|
||||||
|
const token = req.headers[ "x-auth-token" ];
|
||||||
|
|
||||||
|
if (!token)
|
||||||
|
{
|
||||||
|
res.status(400).json(new ErrorResponseBuilder()
|
||||||
|
.setCode(400)
|
||||||
|
.setData("Missing token").toJSON());
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const admin = await MAdmin.findOne({ token });
|
||||||
|
|
||||||
|
if (!admin)
|
||||||
|
{
|
||||||
|
res.status(401).json(new ErrorResponseBuilder()
|
||||||
|
.setCode(401)
|
||||||
|
.setData("Invalid token").toJSON());
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const player = await MProfile.findOne({
|
||||||
|
id: req.params.playerId,
|
||||||
|
});
|
||||||
|
|
||||||
|
if (!player)
|
||||||
|
{
|
||||||
|
res.status(401).json(new ErrorResponseBuilder()
|
||||||
|
.setCode(401)
|
||||||
|
.setData("Invalid playerId").toJSON());
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const stats = await PlayerUtil.getPlayerStats(player.id);
|
||||||
|
|
||||||
|
if (!stats)
|
||||||
|
{
|
||||||
|
res.status(401).json(new ErrorResponseBuilder()
|
||||||
|
.setCode(401)
|
||||||
|
.setData("Invalid playerId (2)").toJSON());
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
player.steamTrainDistance = stats?.stats?.find(x => x.name === "DISTANCE_M")?.value ?? 0;
|
||||||
|
player.steamDispatcherTime = stats?.stats?.find(x => x.name === "DISPATCHER_TIME")?.value ?? 0;
|
||||||
|
player.steamTrainScore = stats?.stats?.find(x => x.name === "SCORE")?.value ?? 0;
|
||||||
|
|
||||||
|
|
||||||
|
if (player.steamTrainDistance > player.trainDistance)
|
||||||
|
{
|
||||||
|
player.trainDistance = player.steamTrainDistance;
|
||||||
|
}
|
||||||
|
if (player.steamTrainScore > player.trainPoints)
|
||||||
|
{
|
||||||
|
player.trainPoints = player.steamTrainScore;
|
||||||
|
}
|
||||||
|
|
||||||
|
const sum = Object.keys(player.trainStats).filter(x => x !== "N/A").map(x => player.trainStats[ x ]).reduce((acc, obj) =>
|
||||||
|
{
|
||||||
|
acc.time += obj.time;
|
||||||
|
acc.distance += obj.distance;
|
||||||
|
acc.score += obj.score;
|
||||||
|
return acc;
|
||||||
|
}, { time: 0, distance: 0, score: 0 });
|
||||||
|
|
||||||
|
|
||||||
|
player.trainStats[ "N/A" ] = {
|
||||||
|
time: 0,
|
||||||
|
distance: player.trainDistance - sum.distance,
|
||||||
|
score: player.trainPoints - sum.score,
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
if (typeof player.createdAt !== "number")
|
||||||
|
{
|
||||||
|
player.createdAt = new Date(parseInt(player._id.toString().substring(0, 8), 16) * 1000).getTime();
|
||||||
|
}
|
||||||
|
|
||||||
|
const playerData = await PlayerUtil.getPlayerSteamData(player.id);
|
||||||
|
|
||||||
|
player.username = playerData?.personaname ?? player.username;
|
||||||
|
player.avatar = playerData?.avatarfull ?? player.avatar;
|
||||||
|
|
||||||
|
await MProfile.updateOne({ id: player.id }, player);
|
||||||
|
|
||||||
|
res.json(
|
||||||
|
new SuccessResponseBuilder()
|
||||||
|
.setCode(200)
|
||||||
|
.setData({})
|
||||||
|
.toJSON(),
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
return app;
|
return app;
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -85,22 +85,30 @@ export class StationsModule
|
|||||||
player.steamTrainScore = stats?.stats?.find(x => x.name === "SCORE")?.value ?? 0;
|
player.steamTrainScore = stats?.stats?.find(x => x.name === "SCORE")?.value ?? 0;
|
||||||
|
|
||||||
|
|
||||||
if ((player.steamTrainDistance > player.trainDistance) || (player.trainPoints > player.steamTrainScore))
|
if (player.steamTrainDistance > player.trainDistance)
|
||||||
{
|
{
|
||||||
player.trainStats[ "N/A" ] = {
|
player.trainDistance = player.steamTrainDistance;
|
||||||
time: 0, distance: player.steamTrainDistance > player.trainDistance ? player.steamTrainDistance - player.trainDistance : player.trainDistance,
|
|
||||||
score: player.trainPoints > player.steamTrainScore ? player.steamTrainScore - player.trainPoints : player.trainPoints,
|
|
||||||
};
|
|
||||||
|
|
||||||
if (player.steamTrainDistance > player.trainDistance)
|
|
||||||
{
|
|
||||||
player.trainDistance = player.steamTrainDistance;
|
|
||||||
}
|
|
||||||
if (player.trainPoints > player.steamTrainScore)
|
|
||||||
{
|
|
||||||
player.trainPoints = player.steamTrainScore;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
if (player.steamTrainScore > player.trainPoints)
|
||||||
|
{
|
||||||
|
player.trainPoints = player.steamTrainScore;
|
||||||
|
}
|
||||||
|
|
||||||
|
const sum = Object.keys(player.trainStats).filter(x => x !== "N/A").map(x => player.trainStats[ x ]).reduce((acc, obj) =>
|
||||||
|
{
|
||||||
|
acc.time += obj.time;
|
||||||
|
acc.distance += obj.distance;
|
||||||
|
acc.score += obj.score;
|
||||||
|
return acc;
|
||||||
|
}, { time: 0, distance: 0, score: 0 });
|
||||||
|
|
||||||
|
|
||||||
|
player.trainStats[ "N/A" ] = {
|
||||||
|
time: 0,
|
||||||
|
distance: player.trainDistance - sum.distance,
|
||||||
|
score: player.trainPoints - sum.score,
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
player.flags = player.flags.filter(x => x !== "private");
|
player.flags = player.flags.filter(x => x !== "private");
|
||||||
|
|
||||||
|
@ -118,22 +118,31 @@ export class TrainsModule
|
|||||||
player.steamDispatcherTime = stats?.stats?.find(x => x.name === "DISPATCHER_TIME")?.value ?? 0;
|
player.steamDispatcherTime = stats?.stats?.find(x => x.name === "DISPATCHER_TIME")?.value ?? 0;
|
||||||
player.steamTrainScore = stats?.stats?.find(x => x.name === "SCORE")?.value ?? 0;
|
player.steamTrainScore = stats?.stats?.find(x => x.name === "SCORE")?.value ?? 0;
|
||||||
|
|
||||||
if ((player.steamTrainDistance > player.trainDistance) || (player.steamTrainScore > player.trainPoints))
|
|
||||||
{
|
|
||||||
player.trainStats[ "N/A" ] = {
|
|
||||||
time: 0, distance: player.steamTrainDistance > player.trainDistance ? player.steamTrainDistance - player.trainDistance : player.trainDistance,
|
|
||||||
score: player.steamTrainScore > player.trainPoints ? player.steamTrainScore - player.trainPoints : player.trainPoints,
|
|
||||||
};
|
|
||||||
|
|
||||||
if (player.steamTrainDistance > player.trainDistance)
|
if (player.steamTrainDistance > player.trainDistance)
|
||||||
{
|
{
|
||||||
player.trainDistance = player.steamTrainDistance;
|
player.trainDistance = player.steamTrainDistance;
|
||||||
}
|
|
||||||
if (player.steamTrainScore > player.trainPoints)
|
|
||||||
{
|
|
||||||
player.trainPoints = player.steamTrainScore;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
if (player.steamTrainScore > player.trainPoints)
|
||||||
|
{
|
||||||
|
player.trainPoints = player.steamTrainScore;
|
||||||
|
}
|
||||||
|
|
||||||
|
const sum = Object.keys(player.trainStats).filter(x => x !== "N/A").map(x => player.trainStats[ x ]).reduce((acc, obj) =>
|
||||||
|
{
|
||||||
|
acc.time += obj.time;
|
||||||
|
acc.distance += obj.distance;
|
||||||
|
acc.score += obj.score;
|
||||||
|
return acc;
|
||||||
|
}, { time: 0, distance: 0, score: 0 });
|
||||||
|
|
||||||
|
|
||||||
|
player.trainStats[ "N/A" ] = {
|
||||||
|
time: 0,
|
||||||
|
distance: player.trainDistance - sum.distance,
|
||||||
|
score: player.trainPoints - sum.score,
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
player.flags = player.flags.filter(x => x !== "private");
|
player.flags = player.flags.filter(x => x !== "private");
|
||||||
|
|
||||||
|
@ -61,6 +61,18 @@ export const ProfileCard = ({ data }: { data: TProfileData }) =>
|
|||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const adminForceUpdate = () =>
|
||||||
|
{
|
||||||
|
post(`/admin/profile/${ data.player.id }/forceUpdate`, {}, { "X-Auth-Token": token })
|
||||||
|
.then((response) =>
|
||||||
|
{
|
||||||
|
if (response.code === 200)
|
||||||
|
{
|
||||||
|
toast.success(t("admin.update.alert"));
|
||||||
|
}
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
const { t } = useTranslation();
|
const { t } = useTranslation();
|
||||||
return <>
|
return <>
|
||||||
@ -253,6 +265,11 @@ export const ProfileCard = ({ data }: { data: TProfileData }) =>
|
|||||||
onClick={ () => setHideProfileModal(true) }>
|
onClick={ () => setHideProfileModal(true) }>
|
||||||
{ t("admin.hide.button") }
|
{ t("admin.hide.button") }
|
||||||
</button>
|
</button>
|
||||||
|
|
||||||
|
<button className="inline-flex items-center justify-center rounded-md bg-primary py-2 px-5 text-center font-medium text-white hover:bg-opacity-50 lg:px-4 xl:px-5"
|
||||||
|
onClick={ () => adminForceUpdate() }>
|
||||||
|
{ t("admin.update.button") }
|
||||||
|
</button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</> }
|
</> }
|
||||||
|
@ -189,6 +189,10 @@
|
|||||||
},
|
},
|
||||||
"button": "Hide profile",
|
"button": "Hide profile",
|
||||||
"alert": "Player profile hidden."
|
"alert": "Player profile hidden."
|
||||||
|
},
|
||||||
|
"update": {
|
||||||
|
"button": "Force update",
|
||||||
|
"alert": "Profile updated!"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -189,6 +189,10 @@
|
|||||||
},
|
},
|
||||||
"button": "Ukryj profil",
|
"button": "Ukryj profil",
|
||||||
"alert": "Ukryto profil gracza."
|
"alert": "Ukryto profil gracza."
|
||||||
|
},
|
||||||
|
"update": {
|
||||||
|
"button": "Wymuś aktualizacje",
|
||||||
|
"alert": "Zaktualizowano profil!"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -30,7 +30,7 @@ import { get } from "../../util/fetcher.ts";
|
|||||||
export const Profile = () =>
|
export const Profile = () =>
|
||||||
{
|
{
|
||||||
const { id } = useParams();
|
const { id } = useParams();
|
||||||
const { data, error, isLoading } = useSWR(`/profiles/${ id }`, get, { refreshInterval: 10_000, errorRetryCount: 5 });
|
const { data, error, isLoading } = useSWR(`/profiles/${ id }`, get, { refreshInterval: 5_000, errorRetryCount: 5 });
|
||||||
|
|
||||||
const { t } = useTranslation();
|
const { t } = useTranslation();
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user