* feat - Restrict same email to create more than 'n' active bookings at a time * updated checkbookerbookinglimit function * type fix * minor change * import fix * minor fixes * back to null on disable * back * type check * managed edge cases * chore: name changes * name changes * fix * minor change * changed name * use default value for maxactivebookingsperbooker, and some minor changes * disabling bookerbooking limit for recurring event * disabling bookerbooking limit for recurring event * type fix * ui fix and backend eventtype update check * Add `maxActiveBookingPerBookerOfferReschedule` to schema * Create `MaxActiveBookingsPerBookerController` and offer reschedule option * Add offer reschedule to event type form data * Pass data through to HttpError * When checking max bookings, return last booking info if applicable * removed unused code * minor changes * update validation * chore * Do not check booking limits if rescheduling * Add data for reschedule * Add reschedule specific error code * On maximum booking error, write to booker store reschedule params * Add translations for error codes * Write to error message previous booking time * minor fix * Write to error message previous booking time * Type fixes * Clean up comment * Refactor eventType update errors * Typo fix * Type fix * Type fix * Type fix * Fix test * Fix test * Add migration * Addressed feedback and missed merges --------- Co-authored-by: romit <romitgabani@icloud.com>
43 lines
1.5 KiB
TypeScript
43 lines
1.5 KiB
TypeScript
import { wrapApiHandlerWithSentry } from "@sentry/nextjs";
|
|
import { captureException } from "@sentry/nextjs";
|
|
import type { NextApiRequest, NextApiResponse } from "next";
|
|
|
|
import { getServerErrorFromUnknown } from "./getServerErrorFromUnknown";
|
|
import { performance } from "./perfObserver";
|
|
|
|
type Handle<T> = (req: NextApiRequest, res: NextApiResponse) => Promise<T>;
|
|
|
|
/** Allows us to get type inference from API handler responses */
|
|
export function defaultResponder<T>(
|
|
f: Handle<T>,
|
|
/** If set we will wrap the handle with sentry tracing */
|
|
endpointRoute?: string
|
|
) {
|
|
return async (req: NextApiRequest, res: NextApiResponse) => {
|
|
let ok = false;
|
|
try {
|
|
performance.mark("Start");
|
|
const result = endpointRoute
|
|
? await wrapApiHandlerWithSentry(f, endpointRoute)(req, res)
|
|
: await f(req, res);
|
|
ok = true;
|
|
if (result && !res.writableEnded) {
|
|
return res.json(result);
|
|
}
|
|
} catch (err) {
|
|
const error = getServerErrorFromUnknown(err);
|
|
// we don't want to report Bad Request errors to Sentry / console
|
|
if (!(error.statusCode >= 400 && error.statusCode < 500)) {
|
|
console.error(error);
|
|
captureException(error);
|
|
}
|
|
return res
|
|
.status(error.statusCode)
|
|
.json({ message: error.message, url: error.url, method: error.method, data: error?.data || null });
|
|
} finally {
|
|
performance.mark("End");
|
|
performance.measure(`[${ok ? "OK" : "ERROR"}][$1] ${req.method} '${req.url}'`, "Start", "End");
|
|
}
|
|
};
|
|
}
|