From 7836aeacc6436bedc02e94af6fcab642bbb3e0a2 Mon Sep 17 00:00:00 2001 From: Rajiv Sahal Date: Thu, 11 Apr 2024 23:16:57 +0530 Subject: [PATCH] feat: add redirect uris for booking success, cancel and reschedule for a platform user (#14518) * update typings * update prisma to include redirect uris for booking success, cancel and reschedule * update migrations * add input for uris and send them back in custom hook * display new uris * add type for enabling emails * update prisma schema and add migrations * chores * fixup * chore: fix style, remove console log, rewrite migration --------- Co-authored-by: Morgan Vernay Co-authored-by: Morgan <33722304+ThyMinimalDev@users.noreply.github.com> --- .../inputs/update-oauth-client.input.ts | 18 ++++++- .../oauth-clients/OAuthClientCard.tsx | 30 ++++++++++- .../oauth-clients/OAuthClientForm.tsx | 51 ++++++++++++++++++- .../platform/oauth-clients/index.tsx | 6 +++ packages/platform/types/oauth-clients.ts | 18 ++++++- .../migration.sql | 5 ++ packages/prisma/schema.prisma | 5 ++ 7 files changed, 129 insertions(+), 4 deletions(-) create mode 100644 packages/prisma/migrations/20240411114622_platform_urls_emails/migration.sql diff --git a/apps/api/v2/src/modules/oauth-clients/inputs/update-oauth-client.input.ts b/apps/api/v2/src/modules/oauth-clients/inputs/update-oauth-client.input.ts index 596651bdd4..1b2a129576 100644 --- a/apps/api/v2/src/modules/oauth-clients/inputs/update-oauth-client.input.ts +++ b/apps/api/v2/src/modules/oauth-clients/inputs/update-oauth-client.input.ts @@ -1,4 +1,4 @@ -import { IsArray, IsOptional, IsString } from "class-validator"; +import { IsArray, IsBoolean, IsOptional, IsString } from "class-validator"; export class UpdateOAuthClientInput { @IsOptional() @@ -13,4 +13,20 @@ export class UpdateOAuthClientInput { @IsOptional() @IsString({ each: true }) redirectUris?: string[] = []; + + @IsOptional() + @IsString() + bookingRedirectUri?: string; + + @IsOptional() + @IsString() + bookingCancelRedirectUri?: string; + + @IsOptional() + @IsString() + bookingRescheduleRedirectUri?: string; + + @IsOptional() + @IsBoolean() + areEmailsEnabled?: boolean; } diff --git a/apps/web/components/settings/organizations/platform/oauth-clients/OAuthClientCard.tsx b/apps/web/components/settings/organizations/platform/oauth-clients/OAuthClientCard.tsx index c7803a9fee..f57f6b5e65 100644 --- a/apps/web/components/settings/organizations/platform/oauth-clients/OAuthClientCard.tsx +++ b/apps/web/components/settings/organizations/platform/oauth-clients/OAuthClientCard.tsx @@ -11,6 +11,10 @@ type OAuthClientCardProps = { name: string; logo?: Avatar; redirectUris: string[]; + bookingRedirectUri: string | null; + bookingCancelRedirectUri: string | null; + bookingRescheduleRedirectUri: string | null; + areEmailsEnabled: boolean; permissions: number; lastItem: boolean; id: string; @@ -23,13 +27,19 @@ export const OAuthClientCard = ({ name, logo, redirectUris, + bookingRedirectUri, + bookingCancelRedirectUri, + bookingRescheduleRedirectUri, permissions, id, secret, lastItem, onDelete, isLoading, + areEmailsEnabled, }: OAuthClientCardProps) => { + console.log(areEmailsEnabled); + const clientPermissions = Object.values(PERMISSIONS_GROUPED_MAP).map((value, index) => { let permissionsMessage = ""; const hasReadPermission = hasPermission(permissions, value.read); @@ -110,8 +120,26 @@ export const OAuthClientCard = ({ Redirect uris: {redirectUris.map((item, index) => (redirectUris.length === index + 1 ? `${item}` : `${item}, `))} + {bookingRedirectUri && ( +
+ Booking redirect uri: {bookingRedirectUri} +
+ )} + {bookingRescheduleRedirectUri && ( +
+ Booking reschedule uri: {bookingRescheduleRedirectUri} +
+ )} + {bookingCancelRedirectUri && ( +
+ Booking cancel uri: {bookingCancelRedirectUri} +
+ )} +
+ Emails enabled: {areEmailsEnabled ? "Yes" : "No"} +
-
+
*/} +
+ + + +
+
+ + + +
+
+ + + +
+
+ + +

Permissions

diff --git a/apps/web/pages/settings/organizations/platform/oauth-clients/index.tsx b/apps/web/pages/settings/organizations/platform/oauth-clients/index.tsx index 6e5619d65a..3a46e7a960 100644 --- a/apps/web/pages/settings/organizations/platform/oauth-clients/index.tsx +++ b/apps/web/pages/settings/organizations/platform/oauth-clients/index.tsx @@ -62,10 +62,15 @@ export const OAuthClients = () => { <>
{data.map((client, index) => { + console.log(client); + return ( { secret={client.secret} isLoading={isDeleting} onDelete={handleDelete} + areEmailsEnabled={client.areEmailsEnabled} /> ); })} diff --git a/packages/platform/types/oauth-clients.ts b/packages/platform/types/oauth-clients.ts index 836e68400c..1d3aab0663 100644 --- a/packages/platform/types/oauth-clients.ts +++ b/packages/platform/types/oauth-clients.ts @@ -1,4 +1,4 @@ -import { IsArray, IsNumber, IsOptional, IsString } from "class-validator"; +import { IsArray, IsNumber, IsOptional, IsBoolean, IsString } from "class-validator"; import { z } from "zod"; export class CreateOAuthClientInput { @@ -15,6 +15,22 @@ export class CreateOAuthClientInput { @IsNumber() permissions!: number; + + @IsOptional() + @IsString() + bookingRedirectUri?: string; + + @IsOptional() + @IsString() + bookingCancelRedirectUri?: string; + + @IsOptional() + @IsString() + bookingRescheduleRedirectUri?: string; + + @IsOptional() + @IsBoolean() + areEmailsEnabled?: boolean; } export class DeleteOAuthClientInput { diff --git a/packages/prisma/migrations/20240411114622_platform_urls_emails/migration.sql b/packages/prisma/migrations/20240411114622_platform_urls_emails/migration.sql new file mode 100644 index 0000000000..232c86ecbd --- /dev/null +++ b/packages/prisma/migrations/20240411114622_platform_urls_emails/migration.sql @@ -0,0 +1,5 @@ +-- AlterTable +ALTER TABLE "PlatformOAuthClient" ADD COLUMN "areEmailsEnabled" BOOLEAN NOT NULL DEFAULT false, +ADD COLUMN "bookingCancelRedirectUri" TEXT, +ADD COLUMN "bookingRedirectUri" TEXT, +ADD COLUMN "bookingRescheduleRedirectUri" TEXT; diff --git a/packages/prisma/schema.prisma b/packages/prisma/schema.prisma index e3a3d5307f..bebe0e44bf 100644 --- a/packages/prisma/schema.prisma +++ b/packages/prisma/schema.prisma @@ -1228,6 +1228,11 @@ model PlatformOAuthClient { refreshToken RefreshToken[] authorizationTokens PlatformAuthorizationToken[] + bookingRedirectUri String? + bookingCancelRedirectUri String? + bookingRescheduleRedirectUri String? + areEmailsEnabled Boolean @default(false) + createdAt DateTime @default(now()) }