added get last result to public api

closes #2893
This commit is contained in:
Miodec 2022-04-28 12:39:18 +02:00
parent e419187d2c
commit 89e99fa668
3 changed files with 161 additions and 0 deletions

View file

@ -45,6 +45,14 @@ export async function getResults(
): Promise<MonkeyResponse> {
const { uid } = req.ctx.decodedToken;
const results = await ResultDAL.getResults(uid);
return new MonkeyResponse("Results retrieved", results);
}
export async function getLastResult(
req: MonkeyTypes.Request
): Promise<MonkeyResponse> {
const { uid } = req.ctx.decodedToken;
const results = await ResultDAL.getLastResult(uid);
return new MonkeyResponse("Result retrieved", results);
}

View file

@ -9,6 +9,7 @@ import * as RateLimit from "../../middlewares/rate-limit";
import { Router } from "express";
import { authenticateRequest } from "../../middlewares/auth";
import joi from "joi";
import apeRateLimit from "../../middlewares/ape-rate-limit";
const router = Router();
@ -57,4 +58,14 @@ router.delete(
asyncHandler(ResultController.deleteAll)
);
router.get(
"/last",
RateLimit.resultsGet,
authenticateRequest({
acceptApeKeys: true,
}),
apeRateLimit,
asyncHandler(ResultController.getLastResult)
);
export default router;

View file

@ -21,6 +21,10 @@
{
"name": "leaderboards",
"description": "Leaderboard data and related operations"
},
{
"name": "results",
"description": "User results data and related operations"
}
],
"paths": {
@ -68,6 +72,20 @@
}
}
},
"/results/last": {
"get": {
"tags": ["results"],
"summary": "Gets a user's last saved result",
"responses": {
"200": {
"description": "",
"schema": {
"$ref": "#/definitions/Result"
}
}
}
}
},
"/leaderboards": {
"get": {
"tags": ["leaderboards"],
@ -284,6 +302,130 @@
"example": 1644438189583
}
}
},
"Result": {
"type": "object",
"properties": {
"_id": {
"type": "string",
"example": "6226b17aebc27a4a8d1ce04b"
},
"wpm": {
"type": "number",
"format": "double",
"example": 154.84
},
"rawWpm": {
"type": "number",
"format": "double",
"example": 154.84
},
"charStats": {
"type": "array",
"example": [44, 0, 0, 0]
},
"acc": {
"type": "number",
"format": "double",
"example": 100
},
"mode": {
"type": "string",
"example": "words"
},
"mode2": {
"type": "string",
"example": "10"
},
"quoteLength": {
"type": "integer",
"example": -1
},
"timestamp": {
"type": "integer",
"example": 1651141719000
},
"restartCount": {
"type": "integer",
"example": 0
},
"incompleteTestSeconds": {
"type": "number",
"format": "double",
"example": 14.5
},
"tags": {
"type": "array",
"example": ["6210edbfc4fdc8a1700e648b"]
},
"consistency": {
"type": "number",
"format": "double",
"example": 78.68
},
"keyConsistency": {
"type": "number",
"format": "double",
"example": 60.22
},
"chartData": {
"type": "object",
"properties": {
"wpm": {
"type": "array",
"example": [144, 144, 144, 154]
},
"raw": {
"type": "array",
"example": [150, 148, 124, 114]
},
"err": {
"type": "array",
"example": [0, 0, 0, 0]
}
}
},
"testDuration": {
"type": "number",
"format": "double",
"example": 3.41
},
"afkDuration": {
"type": "number",
"format": "double",
"example": 0
},
"keySpacingStats": {
"type": "object",
"properties": {
"average": {
"type": "number",
"format": "double",
"example": 77.61
},
"sd": {
"type": "number",
"format": "double",
"example": 33.31
}
}
},
"keyDurationStats": {
"type": "object",
"properties": {
"average": {
"type": "number",
"format": "double",
"example": 42.01
},
"sd": {
"type": "number",
"format": "double",
"example": 19.65
}
}
}
}
}
}
}