fix(striker-ui-api): add delete request builder

main
Tsu-ba-me 2 years ago
parent 251a048b8a
commit 58a867f010
  1. 65
      striker-ui-api/src/lib/request_handlers/buildDeleteRequestHandler.ts

@ -0,0 +1,65 @@
import { AssertionError } from 'assert';
import { RequestHandler } from 'express';
import { sanitize } from '../sanitize';
import { stderr, stdoutVar } from '../shell';
export const buildDeleteRequestHandler =
<
P extends Record<string, string> = Record<string, string>,
ResBody = undefined,
ReqBody extends Record<string, unknown> | undefined = Record<
string,
unknown
>,
ReqQuery = qs.ParsedQs,
Locals extends Record<string, unknown> = Record<string, unknown>,
>({
delete: handleDelete,
key = 'uuid',
listKey = 'uuids',
}: {
delete: (
list: string[],
...handlerArgs: Parameters<
RequestHandler<P, ResBody, ReqBody, ReqQuery, Locals>
>
) => Promise<void>;
key?: string;
listKey?: string;
}): RequestHandler<P, ResBody, ReqBody, ReqQuery, Locals> =>
async (...handlerArgs) => {
const { 0: request, 1: response } = handlerArgs;
const {
body: { [listKey]: rList } = {},
params: { [key]: rId },
} = request;
const list = sanitize(rList, 'string[]');
if (rId !== undefined) {
list.push(rId);
}
stdoutVar(list, `Process delete request with list: `);
try {
await handleDelete(list, ...handlerArgs);
} catch (error) {
let scode;
if (error instanceof AssertionError) {
scode = 400;
stderr(`Failed to assert value during delete request; CAUSE: ${error}`);
} else {
scode = 500;
stderr(`Failed to complete delete request; CAUSE: ${error}`);
}
return response.status(scode).send();
}
return response.status(204).send();
};
Loading…
Cancel
Save