UNPKG

@rapidthenerd/ergast-ts

Version:

Node wrapper for Ergast API

86 lines (71 loc) 3.31 kB
import {QualifyingData} from "./interface/QualifyingData"; import axios from "axios"; import {CircuitData} from "./interface/CircuitData"; import {QualifyingResultEntry} from "./interface/QualifyingResultEntry"; import {Cache} from "./cache/cache"; export class Qualifying { public async getForCurrentYear(round: number): Promise<QualifyingData> { return this.getFor(new Date().getFullYear(), round); } public async getFor(year: string | number, round: number): Promise<QualifyingData> { const key = Cache.generateKey("qualifying", year, round); if (Cache.isEnabled() && Cache.isInCache(key)) { return Cache.get(key); } const response = await axios.get(`https://ergast.com/api/f1/${year}/${round}/qualifying.json`); const responseData = response.data.MRData.RaceTable; const racesData = responseData.Races[0]; if (!racesData) { throw new Error(`No Data found for year ${year}`); } const circuitData: CircuitData = { season: racesData.season, round: racesData.round, name: racesData.Circuit.circuitName, wikiUrl: racesData.Circuit.url, id: racesData.Circuit.circuitId, lat: parseFloat(racesData.Circuit.Location.lat), long: parseFloat(racesData.Circuit.Location.long), local: racesData.Circuit.Location.locality, country: racesData.Circuit.Location.country, }; const qualifyingResults = racesData.QualifyingResults; const qualifyingEntries: QualifyingResultEntry[] = []; for (let i = 0; i < 20; i++) { const currentEntry = qualifyingResults[i]; if (currentEntry === null || currentEntry === undefined) break; qualifyingEntries.push({ number: currentEntry.number, position: currentEntry.position, driverId: currentEntry.Driver.driverId, permanentNumber: currentEntry.Driver.permanentNumber, code: currentEntry.Driver.code, wikiUrl: currentEntry.Driver.url, givenName: currentEntry.Driver.givenName, familyName: currentEntry.Driver.familyName, dateOfBirth: new Date(currentEntry.Driver.dateOfBirth), nationality: currentEntry.Driver.nationality, constructor: { id: currentEntry.Constructor.constructorId, wikiUrl: currentEntry.Constructor.url, name: currentEntry.Constructor.name, nationality: currentEntry.Constructor.nationality }, q1: currentEntry.q1, q2: currentEntry.q2, q3: currentEntry.q3 }); } const qualData: QualifyingData = { season: year, round: round, wikiUrl: responseData.url, circuit: circuitData, date: new Date(responseData.date), time: responseData.time, qualifyingEntries: qualifyingEntries } Cache.set(key, qualData); return qualData; } }