Merge pull request 'fix(): fix profile update' (#82) from v3.0.1 into main
Reviewed-on: #82 Reviewed-by: Aleksander Wilczyński <aleks@alekswilc.dev>
This commit is contained in:
commit
7e29802f8e
@ -18,6 +18,9 @@ import { Router } from "express";
|
||||
import { ErrorResponseBuilder, SuccessResponseBuilder } from "../responseBuilder.js";
|
||||
import { MAdmin } from "../../mongo/admin.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
|
||||
{
|
||||
@ -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;
|
||||
}
|
||||
}
|
@ -85,22 +85,30 @@ export class StationsModule
|
||||
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" ] = {
|
||||
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;
|
||||
}
|
||||
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,
|
||||
};
|
||||
|
||||
|
||||
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.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)
|
||||
{
|
||||
player.trainDistance = player.steamTrainDistance;
|
||||
}
|
||||
if (player.steamTrainScore > player.trainPoints)
|
||||
{
|
||||
player.trainPoints = player.steamTrainScore;
|
||||
}
|
||||
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,
|
||||
};
|
||||
|
||||
|
||||
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();
|
||||
return <>
|
||||
@ -253,6 +265,11 @@ export const ProfileCard = ({ data }: { data: TProfileData }) =>
|
||||
onClick={ () => setHideProfileModal(true) }>
|
||||
{ t("admin.hide.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>
|
||||
</> }
|
||||
|
@ -189,6 +189,10 @@
|
||||
},
|
||||
"button": "Hide profile",
|
||||
"alert": "Player profile hidden."
|
||||
},
|
||||
"update": {
|
||||
"button": "Force update",
|
||||
"alert": "Profile updated!"
|
||||
}
|
||||
}
|
||||
}
|
@ -189,6 +189,10 @@
|
||||
},
|
||||
"button": "Ukryj profil",
|
||||
"alert": "Ukryto profil gracza."
|
||||
},
|
||||
"update": {
|
||||
"button": "Wymuś aktualizacje",
|
||||
"alert": "Zaktualizowano profil!"
|
||||
}
|
||||
}
|
||||
}
|
@ -30,7 +30,7 @@ import { get } from "../../util/fetcher.ts";
|
||||
export const Profile = () =>
|
||||
{
|
||||
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();
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user