From 34f9cc1ec0a77efceb14777d3cc6271258032c5a Mon Sep 17 00:00:00 2001 From: Suhyun Park Date: Sat, 13 Jul 2024 09:56:57 +0900 Subject: [PATCH] fix: restful; delete record --- src/api/record/{append.ts => $put.ts} | 4 ++-- src/api/record/:recordId/$delete.ts | 25 +++++++++++++++++++++++++ src/api/record/:recordId/index.ts | 9 +++++++++ src/api/record/index.ts | 6 ++++-- src/utils/guard.ts | 4 ++++ 5 files changed, 44 insertions(+), 4 deletions(-) rename src/api/record/{append.ts => $put.ts} (85%) create mode 100644 src/api/record/:recordId/$delete.ts create mode 100644 src/api/record/:recordId/index.ts diff --git a/src/api/record/append.ts b/src/api/record/$put.ts similarity index 85% rename from src/api/record/append.ts rename to src/api/record/$put.ts index bda10c7..2895904 100644 --- a/src/api/record/append.ts +++ b/src/api/record/$put.ts @@ -5,7 +5,7 @@ import { GameInputGuard } from "src/utils/guard"; const Body = GameInputGuard; -const append: RequestHandler = async (req, res) => { +const handler: RequestHandler = async (req, res) => { const body = Body.check(req.body); if (!req.user) { @@ -20,4 +20,4 @@ const append: RequestHandler = async (req, res) => { res.sendStatus(200); }; -export default append; +export default handler; diff --git a/src/api/record/:recordId/$delete.ts b/src/api/record/:recordId/$delete.ts new file mode 100644 index 0000000..5e70fcb --- /dev/null +++ b/src/api/record/:recordId/$delete.ts @@ -0,0 +1,25 @@ +import { RequestHandler } from "express"; +import { Record } from "runtypes"; +import db from "src/database/db"; +import { IntegerString } from "src/utils/guard"; + +const Params = Record({ + recordId: IntegerString, +}); + +const handler: RequestHandler = async (req, res) => { + const { recordId } = Params.check(req.params); + + if (!req.user) { + res.sendStatus(401); + return; + } + + await db.gameRecord.delete({ + where: { gameId: +recordId }, + }); + + res.sendStatus(200); +}; + +export default handler; diff --git a/src/api/record/:recordId/index.ts b/src/api/record/:recordId/index.ts new file mode 100644 index 0000000..db3f589 --- /dev/null +++ b/src/api/record/:recordId/index.ts @@ -0,0 +1,9 @@ +import { Router } from "express"; +import { wrap } from "src/utils/asyncWrapper"; +import $delete from "./$delete"; + +const router = Router(); + +router.delete("/", wrap($delete)); + +export default router; diff --git a/src/api/record/index.ts b/src/api/record/index.ts index 4ac38f4..cc3930a 100644 --- a/src/api/record/index.ts +++ b/src/api/record/index.ts @@ -1,9 +1,11 @@ import { Router } from "express"; import { wrap } from "src/utils/asyncWrapper"; -import append from "./append"; +import $put from "./$put"; +import recordId from "./:recordId"; const router = Router(); +router.use("/:recordId", recordId); -router.put("/append", wrap(append)); +router.put("/", wrap($put)); export default router; diff --git a/src/utils/guard.ts b/src/utils/guard.ts index de11f43..59d213f 100644 --- a/src/utils/guard.ts +++ b/src/utils/guard.ts @@ -21,6 +21,10 @@ export const YakumanGuard = StringType.withConstraint((x) => export const Integer = NumberType.withConstraint((x) => Number.isInteger(x)); +export const IntegerString = StringType.withConstraint((x) => + Number.isInteger(Number(x)) +); + export const GameInputGuard = RecordType({ gameType: GameTypeGuard, userScores: ArrayType(