Skip to content

Commit

Permalink
Refactored score parts to allow for multi mdoes
Browse files Browse the repository at this point in the history
  • Loading branch information
WitchOfFrost committed May 30, 2022
1 parent 6e910b4 commit 77c3dc3
Show file tree
Hide file tree
Showing 3 changed files with 291 additions and 250 deletions.
198 changes: 117 additions & 81 deletions src/endpoints/getBeatmapScores.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -7,94 +7,130 @@ import * as modules from "../index.mjs";
export default async (pool, req, res) => {
const conn = await pool.getConnection();
const url = req.originalUrl.split("/");
let i = 0;
let response = {
scores: [],
};

let scores = await conn.query(
`SELECT * FROM scores WHERE (score_id, user_id, beatmap_id) IN (SELECT min(score_id), user_id, beatmap_id FROM scores WHERE (user_id, beatmap_id, total_score) IN (select user_id, beatmap_id, max(total_score) AS total_score FROM scores WHERE beatmap_id = ? AND passed = 1 GROUP BY user_id, beatmap_id) GROUP BY user_id, beatmap_id) ORDER BY total_score DESC, created_at ASC LIMIT 50`,
[url[3]]
);

scores.forEach(async (score) => {
let user = await conn.query(
`SELECT * FROM users WHERE user_id = ? LIMIT 1`,
[score.user_id]
);
const args = {};

url[4]
.split("?")[1]
.split("&")
.forEach((arg) => {
let objBuild = arg.split("=");

let mods = [];
JSON.parse(score.mods).forEach((mod) => {
mods.push(mod.acronym);
args[objBuild[0]] = objBuild[1];
});

response.scores.push({
accuracy: Number(score.accuracy),
beatmap_id: Number(score.beatmap_id),
build_id: Number(1),
created_at: await modules.sqlToOsuDate(score.created_at),
id: Number(score.score_id),
max_combo: Number(score.max_combo),
mods: mods,
passed: Boolean(score.passed),
rank: String(score.rank),
ruleset_id: Number(score.ruleset_id),
statistics: {
good: Number(score.count_good),
great: Number(score.count_great),
meh: Number(score.count_meh),
miss: Number(score.count_miss),
ok: Number(score.count_ok),
large_tick_hit: Number(score.count_LTH),
large_tick_miss: Number(score.count_LTM),
small_tick_hit: Number(score.count_STH),
small_tick_miss: Number(score.count_STM),
small_bonus: Number(score.count_SB),
large_bonus: Number(score.count_LB),
ignore_miss: Number(score.count_IM),
ignore_hit: Number(score.count_IH),
Perfect: Number(score.perfect),
},
user: {
avatar_url: String(user[0].avatar_url),
country_code: String(user[0].country_code),
default_group: "default",
id: Number(user[0].user_id),
is_active: Boolean(user[0].is_active),
is_bot: Boolean(user[0].is_bot),
is_deleted: Boolean(user[0].is_deleted),
is_online: Boolean(user[0].is_online),
is_supporter: Boolean(user[0].is_supporter),
last_visit: await modules.sqlToOsuDate(user[0].last_visit),
pm_friends_only: Boolean(user[0].is_supporter),
profile_colour: null,
username: String(user[0].username),
country: {
code: String(user[0].country_code),
name: String(user[0].country_name),
try {
console.log(args);

let i = 0;
let response = {
scores: [],
};

if (args.mode === undefined) {
args.mode = "osu";
}

switch (args.mode.toLowerCase()) {
case "osu":
default:
args.mode_int = 0;
}

console.log(args.mode_int);

let scores = await conn.query(
`SELECT * FROM scores_? WHERE (score_id, user_id, beatmap_id) IN (SELECT min(score_id), user_id, beatmap_id FROM scores_? WHERE (user_id, beatmap_id, total_score) IN (select user_id, beatmap_id, max(total_score) AS total_score FROM scores_? WHERE beatmap_id = ? AND passed = 1 GROUP BY user_id, beatmap_id) GROUP BY user_id, beatmap_id) ORDER BY total_score DESC, created_at ASC LIMIT 50`,
[args.mode_int, args.mode_int, args.mode_int, url[3]] // TODO: Yes I am lazy
);

console.log(scores);

scores.forEach(async (score) => {
let user = await conn.query(
`SELECT * FROM users WHERE user_id = ? LIMIT 1`,
[score.user_id]
);

let mods = [];
JSON.parse(score.mods).forEach((mod) => {
mods.push(mod.acronym);
});

response.scores.push({
accuracy: Number(score.accuracy),
beatmap_id: Number(score.beatmap_id),
build_id: Number(1),
created_at: await modules.sqlToOsuDate(score.created_at),
id: Number(score.score_id),
max_combo: Number(score.max_combo),
mods: mods,
passed: Boolean(score.passed),
rank: String(score.rank),
ruleset_id: Number(args.mode_int),
statistics: {
great: Number(score.count_great),
meh: Number(score.count_meh),
miss: Number(score.count_miss),
ok: Number(score.count_ok),
large_tick_hit: Number(score.count_LTH),
large_tick_miss: Number(score.count_LTM),
small_tick_hit: Number(score.count_STH),
small_tick_miss: Number(score.count_STM),
small_bonus: Number(score.count_SB),
large_bonus: Number(score.count_LB),
ignore_miss: Number(score.count_IM),
ignore_hit: Number(score.count_IH),
Perfect: Number(score.perfect),
},
cover: {
custom_url: null,
url: "https://a.hikaru.pw/1/default_cv.jpg",
id: null,
user: {
avatar_url: String(user[0].avatar_url),
country_code: String(user[0].country_code),
default_group: "default",
id: Number(user[0].user_id),
is_active: Boolean(user[0].is_active),
is_bot: Boolean(user[0].is_bot),
is_deleted: Boolean(user[0].is_deleted),
is_online: Boolean(user[0].is_online),
is_supporter: Boolean(user[0].is_supporter),
last_visit: await modules.sqlToOsuDate(user[0].last_visit),
pm_friends_only: Boolean(user[0].is_supporter),
profile_colour: null,
username: String(user[0].username),
country: {
code: String(user[0].country_code),
name: String(user[0].country_name),
},
cover: {
custom_url: null,
url: "https://a.hikaru.pw/1/default_cv.jpg",
id: null,
},
},
},
score: Number(score.total_score),
user_id: Number(score.user_id),
});
score: Number(score.total_score),
user_id: Number(score.user_id),
});

i++;
});
i++;
});

function sendResult() {
if (i === scores.length) {
res.status(200);
res.json(response);
conn.end();
} else {
setTimeout(sendResult, 200);
function sendResult() {
if (i === scores.length) {
res.status(200);
res.json(response);
console.log(response);
conn.end();
} else {
setTimeout(sendResult, 200);
}
}
}

sendResult();
sendResult();
} catch (err) {
conn.end();
console.log(err);
res.status(500);
res.send();
conn.end();
return;
}
};
80 changes: 40 additions & 40 deletions src/endpoints/postBeatmapScores.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -9,48 +9,48 @@ export default async (pool, req, res) => {
const url = req.originalUrl.split("/");
const scoreid = Math.floor(Math.random() * 100000000) + 1;

const dbResToken = await conn
.query(`SELECT user_id FROM active_tokens WHERE access_token = ?`, [
req.headers.authorization.split(" ")[1],
])
.catch((err) => {
conn.end();
console.log(err);
res.status(500);
res.send();
conn.end();
return;
});
try {
const dbResToken = await conn.query(
`SELECT user_id FROM active_tokens WHERE access_token = ?`,
[req.headers.authorization.split(" ")[1]]
);

let beatmap = await conn.query(
`SELECT * FROM beatmaps WHERE beatmap_id = ? LIMIT 1`,
[Number(url[3])]
);
let beatmap = await conn.query(
`SELECT * FROM beatmaps WHERE beatmap_id = ? LIMIT 1`,
[Number(url[3])]
);

if (beatmap.length === 0) {
await modules.importBeatmap(pool, Number(url[3]), null);
}
if (beatmap.length === 0) {
await modules.importBeatmap(pool, Number(url[3]), null);
}

const user = await conn
.query(
`UPDATE users SET play_start = ?, current_ruleset = ?, active_id = ?, active_bm_id = ? WHERE user_id = ?`,
[new Date(), req.body.ruleset_id, scoreid, url[3], dbResToken[0].user_id]
)
.then((dbResUsers) => {
conn.end();
res.status(200);
res.json({
beatmap_id: Number(url[3]),
created_at: new Date(Date.now()).toISOString(),
id: Number(scoreid),
user_id: Number(dbResToken[0].id),
const user = await conn
.query(
`UPDATE users SET play_start = ?, current_ruleset = ?, active_id = ?, active_bm_id = ? WHERE user_id = ?`,
[
new Date(),
req.body.ruleset_id,
scoreid,
url[3],
dbResToken[0].user_id,
]
)
.then((dbResUsers) => {
conn.end();
res.status(200);
res.json({
beatmap_id: Number(url[3]),
created_at: new Date(Date.now()).toISOString(),
id: Number(scoreid),
user_id: Number(dbResToken[0].id),
});
});
})
.catch((err) => {
console.log(err);
res.status(500);
res.send();
conn.end();
return;
});
} catch (err) {
conn.end();
console.log(err);
res.status(500);
res.send();
conn.end();
return;
}
};
Loading

0 comments on commit 77c3dc3

Please sign in to comment.