WorkshopTasker/server/api/clients.post.ts

54 lines
1.7 KiB
TypeScript
Raw Normal View History

2023-05-11 06:03:22 +02:00
/* global defineEventHandler, createError, readBody */
2023-05-11 09:11:20 +02:00
import { baaWrapper } from "./clients.get";
2023-05-11 06:03:22 +02:00
import { client } from "~/utils/types/database";
2023-05-11 09:11:20 +02:00
const clientKeys: Array<string> = [
2023-05-11 06:03:22 +02:00
"name",
"address",
"phone",
"email",
];
export function checkIsClient(
value: any,
2023-05-11 09:11:20 +02:00
required = false,
2023-05-11 06:03:22 +02:00
): value is Partial<Omit<client, "id">> {
const errors = new Map<string, string>();
if (typeof value !== "object") {
throw createError({
statusCode: 400,
message: "Invalid body",
});
}
if (!(typeof value.name === "string" || value.name === null || (!required && value.name === undefined))) errors.set("name", "is not string or null");
if (!(typeof value.address === "string" || value.address === null || (!required && value.address === undefined))) errors.set("address", "is not string or null");
if (!(typeof value.phone === "string" || value.phone === null || (!required && value.phone === undefined))) errors.set("phone", "is not string or null");
if (!(typeof value.email === "string" || value.email === null || (!required && value.email === undefined))) errors.set("email", "is not string or null");
2023-05-11 09:11:20 +02:00
for (const i in value as Partial<Omit<client, "id">>)
2023-05-11 06:03:22 +02:00
if (!clientKeys.includes(i)) errors.set(i, `excessive property`);
if (errors.size !== 0) {
let message = "Invalid Parameters: ";
for (const i in errors)
message += i + ", ";
message = message.slice(0, -2);
throw createError({
statusCode: 400,
message,
data: {
errors: Object.fromEntries(errors),
},
});
}
return true;
}
2023-05-11 09:11:20 +02:00
export default defineEventHandler((e) => {
return baaWrapper.RESTpost(e, clientKeys as Array<keyof Omit<client, "id">>, (o): o is Omit<client, "id"> => checkIsClient(o, true));
2023-05-11 06:03:22 +02:00
});