mirror of
https://github.com/ssyyhhrr/stewardle.git
synced 2025-11-08 10:33:46 -05:00
Driver of the Day Persistence
This commit is contained in:
1
.gitignore
vendored
1
.gitignore
vendored
@@ -1,4 +1,5 @@
|
|||||||
node_modules
|
node_modules
|
||||||
driver.txt
|
driver.txt
|
||||||
drivers.json
|
drivers.json
|
||||||
|
stats.json
|
||||||
.idea
|
.idea
|
||||||
63
app.js
63
app.js
@@ -6,12 +6,15 @@ const express = require("express")
|
|||||||
const favicon = require("serve-favicon")
|
const favicon = require("serve-favicon")
|
||||||
const morgan = require("morgan")
|
const morgan = require("morgan")
|
||||||
const dayjs = require("dayjs")
|
const dayjs = require("dayjs")
|
||||||
|
const process = require("process")
|
||||||
const {v4: uuidv4} = require("uuid")
|
const {v4: uuidv4} = require("uuid")
|
||||||
|
|
||||||
const version = uuidv4()
|
const version = uuidv4()
|
||||||
|
|
||||||
const driversPath = "./assets/drivers.json"
|
const driversPath = "./assets/drivers.json"
|
||||||
const statsPath = "./assets/stats.json"
|
const statsPath = "./assets/stats.json"
|
||||||
|
const driverPath = "./assets/driver.txt"
|
||||||
|
const pastPath = "./assets/past.json"
|
||||||
|
|
||||||
const flag = {
|
const flag = {
|
||||||
"British": "gb",
|
"British": "gb",
|
||||||
@@ -71,7 +74,23 @@ let driver
|
|||||||
|
|
||||||
let year = new Date().getFullYear()
|
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 () => {
|
schedule.scheduleJob("59 23 * * *", async () => {
|
||||||
axios.get("https://ergast.com/api/f1/1950/driverStandings.json?limit=1000").then(async () => {
|
axios.get("https://ergast.com/api/f1/1950/driverStandings.json?limit=1000").then(async () => {
|
||||||
@@ -97,24 +116,6 @@ schedule.scheduleJob("0 0 * * *", () => {
|
|||||||
dotd()
|
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() {
|
async function updateDrivers() {
|
||||||
drivers = {}
|
drivers = {}
|
||||||
for (let i = 2000; i <= year; i++) {
|
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...")
|
console.log("Selecting Driver of the Day...")
|
||||||
let newDriver = getRandomProperty(drivers)
|
if (cold && fs.existsSync(driverPath)) {
|
||||||
if (pastDrivers.includes(newDriver)) {
|
driver = fs.readFileSync(driverPath)
|
||||||
console.log("Driver was picked recently, re-selecting...")
|
} else {
|
||||||
dotd()
|
let newDriver = getRandomProperty(drivers)
|
||||||
return
|
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(`Driver of the Day is ${driver}!`)
|
||||||
console.log(drivers[driver])
|
console.log(drivers[driver])
|
||||||
}
|
}
|
||||||
@@ -213,7 +218,7 @@ function server() {
|
|||||||
app.get("/winner", (req, res) => {
|
app.get("/winner", (req, res) => {
|
||||||
if (req.headers.authorization !== "Bearer kRyX3RYMRY$&yEc8") return res.end()
|
if (req.headers.authorization !== "Bearer kRyX3RYMRY$&yEc8") return res.end()
|
||||||
res.json({
|
res.json({
|
||||||
"winner": drivers[driver].firstName + " " + drivers[driver].lastName
|
"winner": drivers[driver].firstName + " " + drivers[driver].lastName,
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|||||||
@@ -240,6 +240,7 @@ async function submit(guess, real) {
|
|||||||
})
|
})
|
||||||
})
|
})
|
||||||
let winner = await data.json()
|
let winner = await data.json()
|
||||||
|
console.log(winner)
|
||||||
let gg = document.getElementsByClassName("input")[0]
|
let gg = document.getElementsByClassName("input")[0]
|
||||||
if (gg != null) {
|
if (gg != null) {
|
||||||
gg.classList.remove("input")
|
gg.classList.remove("input")
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
{}
|
{"2023-03-13":{"visits":4,"guesses":0}}
|
||||||
14
package-lock.json
generated
14
package-lock.json
generated
@@ -16,6 +16,7 @@
|
|||||||
"lodash": "^4.17.21",
|
"lodash": "^4.17.21",
|
||||||
"morgan": "^1.10.0",
|
"morgan": "^1.10.0",
|
||||||
"node-schedule": "^2.1.0",
|
"node-schedule": "^2.1.0",
|
||||||
|
"process": "^0.11.10",
|
||||||
"serve-favicon": "^2.5.0",
|
"serve-favicon": "^2.5.0",
|
||||||
"uuid": "^9.0.0",
|
"uuid": "^9.0.0",
|
||||||
"xml-js": "^1.6.11"
|
"xml-js": "^1.6.11"
|
||||||
@@ -771,6 +772,14 @@
|
|||||||
"resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz",
|
"resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz",
|
||||||
"integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ=="
|
"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": {
|
"node_modules/proxy-addr": {
|
||||||
"version": "2.0.7",
|
"version": "2.0.7",
|
||||||
"resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz",
|
"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",
|
"resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz",
|
||||||
"integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ=="
|
"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": {
|
"proxy-addr": {
|
||||||
"version": "2.0.7",
|
"version": "2.0.7",
|
||||||
"resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz",
|
"resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz",
|
||||||
|
|||||||
@@ -16,6 +16,7 @@
|
|||||||
"lodash": "^4.17.21",
|
"lodash": "^4.17.21",
|
||||||
"morgan": "^1.10.0",
|
"morgan": "^1.10.0",
|
||||||
"node-schedule": "^2.1.0",
|
"node-schedule": "^2.1.0",
|
||||||
|
"process": "^0.11.10",
|
||||||
"serve-favicon": "^2.5.0",
|
"serve-favicon": "^2.5.0",
|
||||||
"uuid": "^9.0.0",
|
"uuid": "^9.0.0",
|
||||||
"xml-js": "^1.6.11"
|
"xml-js": "^1.6.11"
|
||||||
|
|||||||
@@ -184,4 +184,4 @@
|
|||||||
</body>
|
</body>
|
||||||
<script src="./js/main.js"></script>
|
<script src="./js/main.js"></script>
|
||||||
<script src="./js/countUp.js"></script>
|
<script src="./js/countUp.js"></script>
|
||||||
</html>
|
</html>
|
||||||
|
|||||||
Reference in New Issue
Block a user