Skip to content
Snippets Groups Projects
Commit 0d444dae authored by Quentin Bramas's avatar Quentin Bramas
Browse files

prebuild predefined ranks

parent f09a2b08
Branches
No related merge requests found
......@@ -3,7 +3,8 @@
"scripts": {
"dev": "solid-start dev",
"build": "solid-start build",
"start": "solid-start start"
"start": "solid-start start",
"prepare-ranks": "echo 'npx ts-node-esm --experimentalSpecifierResolution node src/prepare-predefined-ranks.ts'"
},
"type": "module",
"devDependencies": {
......@@ -11,6 +12,7 @@
"postcss": "^8.4.18",
"solid-start-node": "^0.2.0",
"tailwindcss": "^3.2.0",
"ts-node": "^10.9.1",
"typescript": "^4.8.4",
"vite": "^3.1.8"
},
......
......@@ -8,10 +8,11 @@ import fs from 'fs'
let _db:sqlite.Database<sqlite3.Database, sqlite3.Statement> = null;
const dataPath = process.env.DATA_PATH || '/data';
export const dataPath = process.env.DATA_PATH || '/data';
const dbPath = dataPath+'/db.sqlite';
const dbVersionPath = dataPath+'/db.version';
export async function init() {
// Check the version of the database
......@@ -43,7 +44,7 @@ export async function init() {
file.on("finish", () => {
file.close();
console.log("Download Completed");
resolve();
resolve(true);
});
file.on("error", (err) => {
console.log("Error while downloading the database file");
......
import server$ from "solid-start/server";
import {db, init} from "~/models/db";
import predefinedCommunities from "~/predefined-communities";
import { rankToABC } from "../routes/rank/[category]";
import {db, init, dataPath} from "./db";
import predefinedCommunities from "../predefined-communities";
import fs from 'fs';
interface Row {
id: number,
......@@ -22,12 +21,25 @@ const year_window = 6;
let predefinedCommunityRanks : null | Record<string, Record<number, {journals:Row[], conferences: Row[]}>> = null;
export const rankToABC = (rank: number, total: number) => {
rank /= total;
if (rank <= 0.01) return "A*";
if (rank <= 0.05) return "A";
if (rank <= 0.25) return "B";
return "C";
}
export const initRanks = async () => {
if(predefinedCommunityRanks !== null) return;
await init();
predefinedCommunityRanks = {};
if(fs.existsSync(dataPath+'/ranks.json')) {
console.log('Loading predefined community ranks from', dataPath+'/ranks.json');
loadRanks(dataPath+'/ranks.json');
return;
}
console.log('Initializing predefined community ranks');
......@@ -79,6 +91,16 @@ export const initRanks = async () => {
}
}
}
console.log('Done.');
}
export function saveRanks(filename: string)
{
fs.writeFileSync(filename, JSON.stringify(predefinedCommunityRanks));
}
export function loadRanks(filename: string)
{
predefinedCommunityRanks = JSON.parse(fs.readFileSync(filename).toString());
}
export default {
......
import predefinedCommunities from "./predefined-communities";
import { initRanks, saveRanks } from './models/rank'
async function main() {
await initRanks();
saveRanks('./ignore/ranks.json');
}
main();
\ No newline at end of file
......@@ -3,7 +3,7 @@ import { APIEvent, json } from "solid-start/api";
import { useParams, RouteDataArgs } from "solid-start";
import { createServerData$ } from "solid-start/server";
import Rank from "~/models/rank";
import {default as Rank, rankToABC} from "~/models/rank";
import predefinedCommunities from "~/predefined-communities";
......@@ -26,13 +26,6 @@ export function routeData({ params } : RouteDataArgs) {
return ranks;
}
export const rankToABC = (rank: number, total: number) => {
rank /= total;
if (rank <= 0.01) return "A*";
if (rank <= 0.05) return "A";
if (rank <= 0.25) return "B";
return "C";
}
const EmptyRow = () => <>
<tr class="bg-white border-b dark:bg-gray-800 dark:border-gray-700 hover:bg-gray-50 dark:hover:bg-gray-600">
......
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment