33a962e6b8
Extract 3410-line server.js into 12 focused modules:
- src/db.js: database init and migrations
- src/models/{player,course}.js: DB helper functions
- src/scrapers/{browser,player-http,player-puppeteer,course-puppeteer}.js
- src/services/{player-service,rating-calculator}.js
- src/routes/{players,courses,pages}.js
Remove dead code: duplicate saveRatingHistoryToDB, legacy
getPlayerCompetitionRatings/getPredictedRating/getAllRatingsWithScraping,
unused getCourseFromDB/getLatestOfficialRoundDate/testPDGARateLimit,
legacy cache Map, and POST /api/predicted-rating route.
Consolidate 5 duplicated Puppeteer launch blocks into launchBrowser().
server.js is now 28 lines: imports, middleware, mount routers, bootstrap.
79 lines
1.9 KiB
JavaScript
79 lines
1.9 KiB
JavaScript
const { db } = require('../db');
|
|
|
|
function saveCourseToDB(courseData) {
|
|
return new Promise((resolve, reject) => {
|
|
db.run(
|
|
`INSERT OR REPLACE INTO courses (name, link, city, last_updated)
|
|
VALUES (?, ?, ?, datetime('now'))`,
|
|
[courseData.name, courseData.link, courseData.city],
|
|
function(err) {
|
|
if (err) reject(err);
|
|
else resolve(this.lastID);
|
|
}
|
|
);
|
|
});
|
|
}
|
|
|
|
function getAllCoursesFromDB() {
|
|
return new Promise((resolve, reject) => {
|
|
db.all(
|
|
'SELECT * FROM courses ORDER BY name ASC',
|
|
[],
|
|
(err, rows) => {
|
|
if (err) reject(err);
|
|
else resolve(rows);
|
|
}
|
|
);
|
|
});
|
|
}
|
|
|
|
function saveLayoutToDB(courseId, layoutData) {
|
|
return new Promise((resolve, reject) => {
|
|
db.run(
|
|
`INSERT OR IGNORE INTO layouts (course_id, name, par)
|
|
VALUES (?, ?, ?)`,
|
|
[courseId, layoutData.name, layoutData.par],
|
|
function(err) {
|
|
if (err) reject(err);
|
|
else resolve(this.lastID);
|
|
}
|
|
);
|
|
});
|
|
}
|
|
|
|
function getLayoutsForCourse(courseId) {
|
|
return new Promise((resolve, reject) => {
|
|
db.all(
|
|
'SELECT * FROM layouts WHERE course_id = ? ORDER BY last_played DESC, name ASC',
|
|
[courseId],
|
|
(err, rows) => {
|
|
if (err) reject(err);
|
|
else resolve(rows);
|
|
}
|
|
);
|
|
});
|
|
}
|
|
|
|
function updateLayoutRating(courseId, layoutName, par, meanRating, ratingCount, lastPlayed = null) {
|
|
return new Promise((resolve, reject) => {
|
|
db.run(
|
|
`UPDATE layouts
|
|
SET mean_rating = ?, rating_count = ?, last_calculated = datetime('now'), last_played = ?
|
|
WHERE course_id = ? AND name = ? AND par = ?`,
|
|
[meanRating, ratingCount, lastPlayed, courseId, layoutName, par],
|
|
function(err) {
|
|
if (err) reject(err);
|
|
else resolve(this.changes);
|
|
}
|
|
);
|
|
});
|
|
}
|
|
|
|
module.exports = {
|
|
saveCourseToDB,
|
|
getAllCoursesFromDB,
|
|
saveLayoutToDB,
|
|
getLayoutsForCourse,
|
|
updateLayoutRating
|
|
};
|