From 426998397d6a35b3f508b62dd3d457457a0a024a Mon Sep 17 00:00:00 2001 From: alekswilc Date: Tue, 20 Aug 2024 19:51:32 +0200 Subject: [PATCH] missing file for #24 --- src/mongo/steam.ts | 36 ++++++++++++++++++++++++++++++++++++ src/util/SteamUtil.ts | 37 +++++++++++++++++++++++++++++++++++++ 2 files changed, 73 insertions(+) create mode 100644 src/mongo/steam.ts create mode 100644 src/util/SteamUtil.ts diff --git a/src/mongo/steam.ts b/src/mongo/steam.ts new file mode 100644 index 0000000..4a2a697 --- /dev/null +++ b/src/mongo/steam.ts @@ -0,0 +1,36 @@ +import { Model, model, Schema } from 'mongoose'; + + +export const raw_schema = { + steam: { + type: String, + required: true + }, + stats: { + type: Object, + required: false, + }, + personaname: { + type: String, + required: true, + }, + avatarfull: { + type: String, + required: true, + }, +} + +const schema = new Schema(raw_schema); + + +export type TMSteam = Model + +export const MSteam = model('steam', schema); + +export interface ISteam { + steam: string + stats: object + personaname: string + avatarfull: string + lastUpdated: number +} \ No newline at end of file diff --git a/src/util/SteamUtil.ts b/src/util/SteamUtil.ts new file mode 100644 index 0000000..1980cf2 --- /dev/null +++ b/src/util/SteamUtil.ts @@ -0,0 +1,37 @@ +import { MSteam } from '../mongo/steam.js'; +import { PlayerUtil } from './PlayerUtil.js'; + +export class SteamUtil { + public static async updatePlayerDataInDatabase(steam: string) { + const data = await PlayerUtil.getPlayer(steam); + const stats = await PlayerUtil.getPlayerStats(steam); + const steamApi = await MSteam.findOne({ steam }); + + if (steamApi) { + await MSteam.findOneAndUpdate({ steam }, { stats, personaname: data?.personaname, avatarfull: data?.avatarfull }); + return; + } + + await MSteam.create({ steam, stats, personaname: data?.personaname, avatarfull: data?.avatarfull }); + } + + + public static async getPlayer(steam: string) { + const steamApi = await MSteam.findOne({ steam }); + this.updatePlayerDataInDatabase(steam); + + if (steamApi) return { personname: steamApi.personaname, avatarfull: steamApi.avatarfull }; + + return await PlayerUtil.getPlayer(steam); + } + + public static async getPlayerStats(steam: string) { + const steamApi = await MSteam.findOne({ steam }); + this.updatePlayerDataInDatabase(steam); + + if (steamApi) + return steamApi.stats; + + return await PlayerUtil.getPlayerStats(steam); + } +} \ No newline at end of file