From bec302b2c646a0936929f48ce7ed767943138130 Mon Sep 17 00:00:00 2001 From: ssyyhhrr <44934807+ssyyhhrr@users.noreply.github.com> Date: Wed, 15 Mar 2023 16:39:42 +0000 Subject: [PATCH] Driver of the Day Persistence --- .gitignore | 1 + app.js | 63 +++++++++++++++++++++++++---------------------- assets/js/main.js | 1 + assets/stats.json | 2 +- package-lock.json | 14 +++++++++++ package.json | 1 + views/index.ejs | 2 +- 7 files changed, 53 insertions(+), 31 deletions(-) diff --git a/.gitignore b/.gitignore index 8b2fe56..02d6b0e 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,5 @@ node_modules driver.txt drivers.json +stats.json .idea \ No newline at end of file diff --git a/app.js b/app.js index fb5b0a5..5e824ee 100644 --- a/app.js +++ b/app.js @@ -6,12 +6,15 @@ const express = require("express") const favicon = require("serve-favicon") const morgan = require("morgan") const dayjs = require("dayjs") +const process = require("process") const {v4: uuidv4} = require("uuid") const version = uuidv4() const driversPath = "./assets/drivers.json" const statsPath = "./assets/stats.json" +const driverPath = "./assets/driver.txt" +const pastPath = "./assets/past.json" const flag = { "British": "gb", @@ -71,7 +74,23 @@ let driver let year = new Date().getFullYear() -main() +axios.get("https://ergast.com/api/f1/1950/driverStandings.json?limit=1000").then(async () => { + await updateDrivers() +}).catch(() => { + console.log("API is unreachable! Not updating drivers...") + if (fs.existsSync(driversPath)) { + let data = fs.readFileSync(driversPath) + drivers = JSON.parse(data) + } else { + throw "Ergast API is unreachable and the drivers.json cache has not been built. Please try again when the Ergast API is online." + } +}).catch(err => { + console.log(err) + return process.exit(1) +}).then(() => { + dotd(true) + server() +}) schedule.scheduleJob("59 23 * * *", async () => { axios.get("https://ergast.com/api/f1/1950/driverStandings.json?limit=1000").then(async () => { @@ -97,24 +116,6 @@ schedule.scheduleJob("0 0 * * *", () => { dotd() }) -async function main() { - axios.get("https://ergast.com/api/f1/1950/driverStandings.json?limit=1000").then(async () => { - await updateDrivers() - dotd() - server() - }).catch(() => { - console.log("API is unreachable! Not updating drivers...") - if (fs.existsSync(driversPath)) { - let data = fs.readFileSync(driversPath) - drivers = JSON.parse(data) - dotd() - server() - } else { - throw "Ergast API is unreachable and the drivers.json cache has not been built. Please try again when the Ergast API is online." - } - }) -} - async function updateDrivers() { drivers = {} for (let i = 2000; i <= year; i++) { @@ -156,17 +157,21 @@ async function updateDrivers() { }) } -function dotd() { +function dotd(cold = false) { console.log("Selecting Driver of the Day...") - let newDriver = getRandomProperty(drivers) - if (pastDrivers.includes(newDriver)) { - console.log("Driver was picked recently, re-selecting...") - dotd() - return + if (cold && fs.existsSync(driverPath)) { + driver = fs.readFileSync(driverPath) + } else { + let newDriver = getRandomProperty(drivers) + if (pastDrivers.includes(newDriver)) { + console.log("Driver was picked recently, re-selecting...") + return dotd() + } + driver = newDriver + pastDrivers.push(driver) + if (pastDrivers.length > 7) pastDrivers.shift() + fs.writeFileSync(driverPath, driver) } - driver = newDriver - pastDrivers.push(driver) - if (pastDrivers.length > 7) pastDrivers.shift() console.log(`Driver of the Day is ${driver}!`) console.log(drivers[driver]) } @@ -213,7 +218,7 @@ function server() { app.get("/winner", (req, res) => { if (req.headers.authorization !== "Bearer kRyX3RYMRY$&yEc8") return res.end() res.json({ - "winner": drivers[driver].firstName + " " + drivers[driver].lastName + "winner": drivers[driver].firstName + " " + drivers[driver].lastName, }) }) diff --git a/assets/js/main.js b/assets/js/main.js index 1e08ea4..ef981d8 100644 --- a/assets/js/main.js +++ b/assets/js/main.js @@ -240,6 +240,7 @@ async function submit(guess, real) { }) }) let winner = await data.json() + console.log(winner) let gg = document.getElementsByClassName("input")[0] if (gg != null) { gg.classList.remove("input") diff --git a/assets/stats.json b/assets/stats.json index 9e26dfe..b281162 100644 --- a/assets/stats.json +++ b/assets/stats.json @@ -1 +1 @@ -{} \ No newline at end of file +{"2023-03-13":{"visits":4,"guesses":0}} \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 8e94823..95733a5 100644 --- a/package-lock.json +++ b/package-lock.json @@ -16,6 +16,7 @@ "lodash": "^4.17.21", "morgan": "^1.10.0", "node-schedule": "^2.1.0", + "process": "^0.11.10", "serve-favicon": "^2.5.0", "uuid": "^9.0.0", "xml-js": "^1.6.11" @@ -771,6 +772,14 @@ "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" }, + "node_modules/process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", + "engines": { + "node": ">= 0.6.0" + } + }, "node_modules/proxy-addr": { "version": "2.0.7", "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", @@ -1582,6 +1591,11 @@ "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" }, + "process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==" + }, "proxy-addr": { "version": "2.0.7", "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", diff --git a/package.json b/package.json index 0ff9802..4f5231d 100644 --- a/package.json +++ b/package.json @@ -16,6 +16,7 @@ "lodash": "^4.17.21", "morgan": "^1.10.0", "node-schedule": "^2.1.0", + "process": "^0.11.10", "serve-favicon": "^2.5.0", "uuid": "^9.0.0", "xml-js": "^1.6.11" diff --git a/views/index.ejs b/views/index.ejs index fcfa465..cbd4b5e 100644 --- a/views/index.ejs +++ b/views/index.ejs @@ -184,4 +184,4 @@ - \ No newline at end of file +