From a2c202fa36df81fe2c096915181f29911dfe47a1 Mon Sep 17 00:00:00 2001 From: Brian Cao Date: Fri, 26 Jan 2024 11:39:27 -0800 Subject: [PATCH] Re-add user delete. --- src/pages/api/teams/[id]/users/[userId].ts | 38 ++++++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 src/pages/api/teams/[id]/users/[userId].ts diff --git a/src/pages/api/teams/[id]/users/[userId].ts b/src/pages/api/teams/[id]/users/[userId].ts new file mode 100644 index 00000000..3b16ac05 --- /dev/null +++ b/src/pages/api/teams/[id]/users/[userId].ts @@ -0,0 +1,38 @@ +import { canDeleteTeamUser } from 'lib/auth'; +import { useAuth, useValidate } from 'lib/middleware'; +import { NextApiRequestQueryBody } from 'lib/types'; +import { NextApiResponse } from 'next'; +import { methodNotAllowed, ok, unauthorized } from 'next-basics'; +import { deleteTeamUser } from 'queries'; +import * as yup from 'yup'; + +export interface TeamUserRequestQuery { + id: string; + userId: string; +} + +const schema = { + DELETE: yup.object().shape({ + id: yup.string().uuid().required(), + userId: yup.string().uuid().required(), + }), +}; + +export default async (req: NextApiRequestQueryBody, res: NextApiResponse) => { + await useAuth(req, res); + await useValidate(schema, req, res); + + if (req.method === 'DELETE') { + const { id: teamId, userId } = req.query; + + if (!(await canDeleteTeamUser(req.auth, teamId, userId))) { + return unauthorized(res, 'You must be the owner of this team.'); + } + + await deleteTeamUser(teamId, userId); + + return ok(res); + } + + return methodNotAllowed(res); +};