fix(backend, frontend): fix date in profiles, fix steam api error

This commit is contained in:
Aleksander Wilczyński 2024-12-13 19:57:52 +01:00
parent 6a951a5da6
commit eb1a89b69d
Signed by untrusted user: alekswilc
GPG Key ID: D4464A248E5F27FE
5 changed files with 11 additions and 15 deletions

View File

@ -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(),
); );

View File

@ -131,6 +131,6 @@ export interface IProfile
steamTrainDistance: number; steamTrainDistance: number;
steamTrainScore: number; steamTrainScore: number;
createdAt: number
flags: string[] flags: string[]
} }

View File

@ -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)
{ {

View File

@ -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>

View File

@ -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;