mirror of
https://github.com/monkeytypegame/monkeytype.git
synced 2025-02-27 00:04:37 +08:00
* Feat:Update response structure (#2427) * Fix:response and error structure * update:response message * update:response class * update * Update response message Co-authored-by: Mustafiz Kaifee Mumtaz <mustafiz.mumtaz@freecharge.com> * Add MonkeyToken foundation (#2487) by Bruception * Api changes (#2492) * API changes * Remove unused import * Add Ape client (#2513) * Add all endpoints (#2514) * Merged backend typescript into api overhaul (#2515) * Install typescript and add backend tsconfig Cannot yet build due to a number of compilation errors in JS code Signed-off-by: Brian Evans <ebrian101@gmail.com> * Fix typescript compilation errors Signed-off-by: Brian Evans <ebrian101@gmail.com> * Migrated backend to ES modules Switched to import export syntax Signed-off-by: Brian Evans <ebrian101@gmail.com> * Add typescript declaration for anticheat Signed-off-by: Brian Evans <ebrian101@gmail.com> * Rename top level files to .ts Fix service account json file typing Signed-off-by: Brian Evans <ebrian101@gmail.com> * Add dev build scripts for backend typescript Signed-off-by: Brian Evans <ebrian101@gmail.com> * Removed empty lines and switched to using db Cleaned up imports by removing needless empty lines and migrated to the new db.js instead of mongodb.js. Signed-off-by: Brian Evans <ebrian101@gmail.com> * Fixed backend commonjs syntax to ES module syntax Signed-off-by: Brian Evans <ebrian101@gmail.com> * Add build to backend start script Signed-off-by: Brian Evans <ebrian101@gmail.com> * Migrate some endpoints to Ape * Strict equals * Remove artifact * ape -> Ape * Ape migration p2 (#2522) * Migrate leaderboard endpoints to ape * Fixed comment * Init backend types * Fail * Return * Migrate Quotes to Ape (#2528) * Migrate quotes to Ape * Fix backend response * Fix issue * Fix rate limit (#2533) * fix rate limit * Fix import * Fix issues * Ape migration p4 (#2547) * Migrate results endpoints to ape * Remove unused import * Remove unused import * Fix loaders * Make function async * Hide try saving results * Migrate some users endpoints to Ape (#2548) * Complete Ape Migration (#2553) * Complete ape migration * Fix preset * Return preset data * Add typings * Move captcha reset * Read from params * Fix result tags endpoint * Fix stuck loader * fixed lb memory not saving * fixed quote rating popup not showing up for new users Co-authored-by: Mustafiz Kaifee <49086821+Mustafiz04@users.noreply.github.com> Co-authored-by: Mustafiz Kaifee Mumtaz <mustafiz.mumtaz@freecharge.com> Co-authored-by: Brian Evans <53117772+mrbrianevans@users.noreply.github.com> Co-authored-by: Miodec <bartnikjack@gmail.com>
86 lines
2.4 KiB
JavaScript
86 lines
2.4 KiB
JavaScript
import Mongo from "mongodb";
|
|
const { ObjectID } = Mongo;
|
|
import MonkeyError from "../handlers/error";
|
|
import db from "../init/db";
|
|
|
|
import UserDAO from "./user";
|
|
|
|
class ResultDAO {
|
|
static async addResult(uid, result) {
|
|
let user;
|
|
try {
|
|
user = await UserDAO.getUser(uid);
|
|
} catch (e) {
|
|
user = null;
|
|
}
|
|
if (!user) throw new MonkeyError(404, "User not found", "add result");
|
|
if (result.uid === undefined) result.uid = uid;
|
|
// result.ir = true;
|
|
let res = await db.collection("results").insertOne(result);
|
|
return {
|
|
insertedId: res.insertedId,
|
|
};
|
|
}
|
|
|
|
static async deleteAll(uid) {
|
|
return await db.collection("results").deleteMany({ uid });
|
|
}
|
|
|
|
static async updateTags(uid, resultid, tags) {
|
|
const result = await db
|
|
.collection("results")
|
|
.findOne({ _id: ObjectID(resultid), uid });
|
|
if (!result) throw new MonkeyError(404, "Result not found");
|
|
const userTags = await UserDAO.getTags(uid);
|
|
const userTagIds = userTags.map((tag) => tag._id.toString());
|
|
let validTags = true;
|
|
tags.forEach((tagId) => {
|
|
if (!userTagIds.includes(tagId)) validTags = false;
|
|
});
|
|
if (!validTags)
|
|
throw new MonkeyError(400, "One of the tag id's is not valid");
|
|
return await db
|
|
.collection("results")
|
|
.updateOne({ _id: ObjectID(resultid), uid }, { $set: { tags } });
|
|
}
|
|
|
|
static async getResult(uid, id) {
|
|
const result = await db
|
|
.collection("results")
|
|
.findOne({ _id: ObjectID(id), uid });
|
|
if (!result) throw new MonkeyError(404, "Result not found");
|
|
return result;
|
|
}
|
|
|
|
static async getLastResult(uid) {
|
|
let result = await db
|
|
.collection("results")
|
|
.find({ uid })
|
|
.sort({ timestamp: -1 })
|
|
.limit(1)
|
|
.toArray();
|
|
result = result[0];
|
|
if (!result) throw new MonkeyError(404, "No results found");
|
|
return result;
|
|
}
|
|
|
|
static async getResultByTimestamp(uid, timestamp) {
|
|
return await db.collection("results").findOne({ uid, timestamp });
|
|
}
|
|
|
|
static async getResults(uid, start, end) {
|
|
start = start ?? 0;
|
|
end = end ?? 1000;
|
|
const result = await db
|
|
.collection("results")
|
|
.find({ uid })
|
|
.sort({ timestamp: -1 })
|
|
.skip(start)
|
|
.limit(end)
|
|
.toArray(); // this needs to be changed to later take patreon into consideration
|
|
if (!result) throw new MonkeyError(404, "Result not found");
|
|
return result;
|
|
}
|
|
}
|
|
|
|
export default ResultDAO;
|