Add an admin delete score endpoint.

This commit is contained in:
zkldi
2021-10-12 22:58:54 +01:00
parent 9923345941
commit 3fe34c7758
3 changed files with 55 additions and 2 deletions
@@ -188,5 +188,5 @@ export async function RevertImport(importDocument: ImportDocument) {
scoreID: { $in: importDocument.scoreIDs },
});
await RemoveMultipleScores(scores);
await DeleteMultipleScores(scores);
}
@@ -1,10 +1,14 @@
import db from "external/mongo/db";
import { ONE_MINUTE } from "lib/constants/time";
import { ChangeRootLogLevel, GetLogLevel } from "lib/logger/logger";
import { ServerConfig } from "lib/setup/config";
import t from "tap";
import deepmerge from "deepmerge";
import { CreateFakeAuthCookie } from "test-utils/fake-auth";
import mockApi from "test-utils/mock-api";
import ResetDBState from "test-utils/resets";
import { TestingIIDXSPScore } from "test-utils/test-data";
import { ScoreDocument } from "tachi-common";
const LOG_LEVEL = ServerConfig.LOG_LEVEL;
@@ -58,3 +62,25 @@ t.test("POST /api/v1/admin/change-log-level", async (t) => {
t.end();
});
t.test("POST /api/v1/admin/delete-score", async (t) => {
t.beforeEach(ResetDBState);
await db.scores.insert(
deepmerge<ScoreDocument>(TestingIIDXSPScore, {
scoreID: "deleteme",
})
);
const res = await mockApi.post("/api/v1/admin/delete-score").send({
scoreID: "deleteme",
});
t.equal(res.statusCode, 200);
const dbScore = await db.scores.findOne({ scoreID: "deleteme" });
t.equal(dbScore, null, "Should remove teh score from the database.");
t.end();
});
@@ -10,6 +10,7 @@ import { ServerConfig, ServerTypeInfo } from "lib/setup/config";
import { Game, UserAuthLevels } from "tachi-common";
import db from "external/mongo/db";
import { DeleteScore } from "lib/delete-scores/delete-scores";
const logger = CreateLogCtx(__filename);
@@ -207,4 +208,30 @@ router.post(
}
);
/**
* Force Delete anyones score.
*
* @param scoreID - The scoreID to delete.
*
* @name POST /api/v1/admin/delete-score
*/
router.post("/delete-score", prValidate({ scoreID: "string" }), async (req, res) => {
const score = await db.scores.findOne({ scoreID: req.body.scoreID });
if (!score) {
return res.status(404).json({
success: false,
description: `This score does not exist.`,
});
}
await DeleteScore(score);
return res.status(200).json({
success: true,
description: `Removed score.`,
body: {},
});
});
export default router;