* add webhook version schema * version the code * update version from numeric to date val * migration * update schema and build factory * update string * move version picker * tooltip instead of infobadge * -- * fix type * -- * fix type * fix type * -- * fix messed up merge * improvements to payloadfactory * extract version off of DB and instead keep it in IWebhookRepository * fix webhookform * fix type safety and routing ambiguity * scalable with easier factory extensions and base definition * fix types * -- * -- * clean up prisma/client type imports * fix * type fix * type fix * cleanup * add tests and registry changes * unintended file inclusion * type-fix * select in repo * -- * explicit return type * -- * fix type * fixes * feedback 1 * feedback 2 * use enum instead of string * fixes
50 lines
1.8 KiB
TypeScript
50 lines
1.8 KiB
TypeScript
import { DEFAULT_WEBHOOK_VERSION } from "../../interface/IWebhookRepository";
|
|
import { PayloadBuilderFactory } from "./PayloadBuilderFactory";
|
|
import * as V2021_10_20 from "./v2021-10-20";
|
|
|
|
// Re-export for consumers
|
|
export { DEFAULT_WEBHOOK_VERSION } from "../../interface/IWebhookRepository";
|
|
|
|
/**
|
|
* Create and initialize a PayloadBuilderFactory with all registered versions.
|
|
*
|
|
* This is the central registry (composition root) for all webhook versions.
|
|
* The factory is fully configured here - consumers just use it.
|
|
*
|
|
* @returns Fully configured PayloadBuilderFactory instance
|
|
*
|
|
* @example Adding a new webhook version
|
|
* 1. Create directory: versioned/v2024-12-01/
|
|
* 2. Implement builders in that directory
|
|
* 3. Import and register here:
|
|
* ```ts
|
|
*
|
|
* import * as V2024_12_01 from "./v2024-12-01";
|
|
*
|
|
* factory.registerVersion(WebhookVersion.V_2024_12_01, {
|
|
* booking: new V2024_12_01.BookingPayloadBuilder(),
|
|
* form: new V2024_12_01.FormPayloadBuilder(),
|
|
* ooo: new V2024_12_01.OOOPayloadBuilder(),
|
|
* recording: new V2024_12_01.RecordingPayloadBuilder(),
|
|
* meeting: new V2024_12_01.MeetingPayloadBuilder(),
|
|
* instantMeeting: new V2024_12_01.InstantMeetingBuilder(),
|
|
* delegation: new V2024_12_01.DelegationPayloadBuilder(),
|
|
* });
|
|
* ```
|
|
*/
|
|
export function createPayloadBuilderFactory(): PayloadBuilderFactory {
|
|
const defaultBuilders = {
|
|
booking: new V2021_10_20.BookingPayloadBuilder(),
|
|
form: new V2021_10_20.FormPayloadBuilder(),
|
|
ooo: new V2021_10_20.OOOPayloadBuilder(),
|
|
recording: new V2021_10_20.RecordingPayloadBuilder(),
|
|
meeting: new V2021_10_20.MeetingPayloadBuilder(),
|
|
instantMeeting: new V2021_10_20.InstantMeetingBuilder(),
|
|
delegation: new V2021_10_20.DelegationPayloadBuilder(),
|
|
};
|
|
|
|
const factory = new PayloadBuilderFactory(DEFAULT_WEBHOOK_VERSION, defaultBuilders);
|
|
|
|
return factory;
|
|
}
|