mirror of
https://github.com/monkeytypegame/monkeytype.git
synced 2025-11-09 13:44:29 +08:00
parent
e419187d2c
commit
89e99fa668
3 changed files with 161 additions and 0 deletions
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue