forked from simrail/simrail.pro
fix(backend, frontend): fix date in profiles, fix steam api error
This commit is contained in:
parent
6a951a5da6
commit
eb1a89b69d
@ -58,8 +58,7 @@ export class ProfilesRoute
|
|||||||
new SuccessResponseBuilder()
|
new SuccessResponseBuilder()
|
||||||
.setCode(200)
|
.setCode(200)
|
||||||
.setData({
|
.setData({
|
||||||
player,
|
player
|
||||||
createdAt: player._id.getTimestamp().getTime()
|
|
||||||
})
|
})
|
||||||
.toJSON(),
|
.toJSON(),
|
||||||
);
|
);
|
||||||
|
@ -131,6 +131,6 @@ export interface IProfile
|
|||||||
steamTrainDistance: number;
|
steamTrainDistance: number;
|
||||||
steamTrainScore: number;
|
steamTrainScore: number;
|
||||||
|
|
||||||
|
createdAt: number
|
||||||
flags: string[]
|
flags: string[]
|
||||||
}
|
}
|
@ -20,7 +20,7 @@ import { assert } from "node:console";
|
|||||||
|
|
||||||
const STEAM_API_KEY = process.env.STEAM_APIKEY;
|
const STEAM_API_KEY = process.env.STEAM_APIKEY;
|
||||||
|
|
||||||
const steamFetch = (url: string, maxRetries: number = 5) =>
|
const steamFetch = (url: string) =>
|
||||||
{
|
{
|
||||||
let retries = 0;
|
let retries = 0;
|
||||||
|
|
||||||
@ -28,10 +28,7 @@ const steamFetch = (url: string, maxRetries: number = 5) =>
|
|||||||
{
|
{
|
||||||
const req = () =>
|
const req = () =>
|
||||||
{
|
{
|
||||||
if (retries > maxRetries)
|
|
||||||
{
|
|
||||||
throw new Error("request failed to api steam");
|
|
||||||
}
|
|
||||||
fetch(url, { signal: AbortSignal.timeout(10000) }).then(x => x.json())
|
fetch(url, { signal: AbortSignal.timeout(10000) }).then(x => x.json())
|
||||||
.then(x => res(x))
|
.then(x => res(x))
|
||||||
.catch(() =>
|
.catch(() =>
|
||||||
@ -39,7 +36,7 @@ const steamFetch = (url: string, maxRetries: number = 5) =>
|
|||||||
console.log("STEAM request failed! ", url.replace(STEAM_API_KEY!, "[XXX]"), retries);
|
console.log("STEAM request failed! ", url.replace(STEAM_API_KEY!, "[XXX]"), retries);
|
||||||
|
|
||||||
retries++;
|
retries++;
|
||||||
setTimeout(() => req(), 1000);
|
setTimeout(() => req(), retries * 1000);
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
req();
|
req();
|
||||||
@ -57,7 +54,7 @@ export class PlayerUtil
|
|||||||
|
|
||||||
if (!player)
|
if (!player)
|
||||||
{
|
{
|
||||||
const data = await steamFetch(`https://api.steampowered.com/ISteamUser/GetPlayerSummaries/v2/?key=${ STEAM_API_KEY }&format=json&steamids=${ steamId }`, 20) as IPlayerPayload;
|
const data = await steamFetch(`https://api.steampowered.com/ISteamUser/GetPlayerSummaries/v2/?key=${ STEAM_API_KEY }&format=json&steamids=${ steamId }`) as IPlayerPayload;
|
||||||
|
|
||||||
assert(data.response.players, "Expected data.response.players to be truthy");
|
assert(data.response.players, "Expected data.response.players to be truthy");
|
||||||
|
|
||||||
@ -69,7 +66,6 @@ export class PlayerUtil
|
|||||||
return player;
|
return player;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
const trainStats: {
|
const trainStats: {
|
||||||
[ trainName: string ]: {
|
[ trainName: string ]: {
|
||||||
score: number,
|
score: number,
|
||||||
@ -81,7 +77,6 @@ export class PlayerUtil
|
|||||||
[ name: string ]: {
|
[ name: string ]: {
|
||||||
time: number
|
time: number
|
||||||
}
|
}
|
||||||
|
|
||||||
} = {};
|
} = {};
|
||||||
|
|
||||||
let trainPoints = 0;
|
let trainPoints = 0;
|
||||||
@ -124,6 +119,8 @@ export class PlayerUtil
|
|||||||
dispatcherTime,
|
dispatcherTime,
|
||||||
|
|
||||||
flags: !stats ? [ "private" ] : [],
|
flags: !stats ? [ "private" ] : [],
|
||||||
|
|
||||||
|
createdAt: Date.now(),
|
||||||
}).catch(e => e);
|
}).catch(e => e);
|
||||||
|
|
||||||
if (player instanceof Error)
|
if (player instanceof Error)
|
||||||
@ -152,7 +149,7 @@ export class PlayerUtil
|
|||||||
|
|
||||||
public static async getPlayerSteamData(steamId: string)
|
public static async getPlayerSteamData(steamId: string)
|
||||||
{
|
{
|
||||||
const data = await steamFetch(`https://api.steampowered.com/ISteamUser/GetPlayerSummaries/v2/?key=${ STEAM_API_KEY }&format=json&steamids=${ steamId }`, 5) as IPlayerPayload;
|
const data = await steamFetch(`https://api.steampowered.com/ISteamUser/GetPlayerSummaries/v2/?key=${ STEAM_API_KEY }&format=json&steamids=${ steamId }`) as IPlayerPayload;
|
||||||
|
|
||||||
if (!data?.response?.players?.length)
|
if (!data?.response?.players?.length)
|
||||||
{
|
{
|
||||||
|
@ -244,7 +244,7 @@ export const ProfileCard = ({ data }: { data: TProfileData }) =>
|
|||||||
|
|
||||||
<div className="shadow-default dark:bg-boxdark items-center justify-center p-2.5 flex flex-col xl:p-5 gap-2">
|
<div className="shadow-default dark:bg-boxdark items-center justify-center p-2.5 flex flex-col xl:p-5 gap-2">
|
||||||
<h1 className="text-sm text-black dark:text-white">
|
<h1 className="text-sm text-black dark:text-white">
|
||||||
{t("profile.info", { date: dayjs(data.createdAt).format('DD/MM/YYYY') })}
|
{t("profile.info", { date: dayjs(data.player.createdAt).format('DD/MM/YYYY') })}
|
||||||
</h1>
|
</h1>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
@ -33,7 +33,6 @@ export interface TProfileSuccessResponse
|
|||||||
export interface TProfileData
|
export interface TProfileData
|
||||||
{
|
{
|
||||||
player: TProfilePlayer;
|
player: TProfilePlayer;
|
||||||
createdAt: number
|
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface TProfilePlayer
|
export interface TProfilePlayer
|
||||||
@ -49,6 +48,7 @@ export interface TProfilePlayer
|
|||||||
"steamTrainDistance": number,
|
"steamTrainDistance": number,
|
||||||
"steamTrainScore": number,
|
"steamTrainScore": number,
|
||||||
"flags": string[]
|
"flags": string[]
|
||||||
|
createdAt: number;
|
||||||
|
|
||||||
trainStats: Record<string, {
|
trainStats: Record<string, {
|
||||||
time: number;
|
time: number;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user