@rapidthenerd/ergast-ts
Version:
Node wrapper for Ergast API
86 lines (71 loc) • 3.31 kB
text/typescript
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;
}
}