Driver of the Day Persistence

This commit is contained in:
ssyyhhrr
2023-03-15 16:39:42 +00:00
parent c185abe7b7
commit bec302b2c6
7 changed files with 53 additions and 31 deletions

1
.gitignore vendored
View File

@@ -1,4 +1,5 @@
node_modules
driver.txt
drivers.json
stats.json
.idea

63
app.js
View File

@@ -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,
})
})

View File

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

View File

@@ -1 +1 @@
{}
{"2023-03-13":{"visits":4,"guesses":0}}

14
package-lock.json generated
View File

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

View File

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

View File

@@ -184,4 +184,4 @@
</body>
<script src="./js/main.js"></script>
<script src="./js/countUp.js"></script>
</html>
</html>