diff --git a/apps/api/v2/src/modules/conferencing/services/zoom-video.service.ts b/apps/api/v2/src/modules/conferencing/services/zoom-video.service.ts index 7f99835e4f0ca2..0a69ee3a34493f 100644 --- a/apps/api/v2/src/modules/conferencing/services/zoom-video.service.ts +++ b/apps/api/v2/src/modules/conferencing/services/zoom-video.service.ts @@ -78,7 +78,12 @@ export class ZoomVideoService { const responseBody = await result.json(); errorMessage = responseBody.error; } catch (e) { - errorMessage = await result.clone().text(); + // Fallback to text response if JSON parsing fails + try { + errorMessage = await result.clone().text(); + } catch (textError) { + // If both fail, use default message - no need to log + } } throw new BadRequestException(errorMessage); } diff --git a/apps/api/v2/src/modules/organizations/memberships/organizations-membership.controller.ts b/apps/api/v2/src/modules/organizations/memberships/organizations-membership.controller.ts index 2cdf674294045f..eb6b6a87280413 100644 --- a/apps/api/v2/src/modules/organizations/memberships/organizations-membership.controller.ts +++ b/apps/api/v2/src/modules/organizations/memberships/organizations-membership.controller.ts @@ -61,10 +61,11 @@ export class OrganizationsMembershipsController { @Query() queryParams: SkipTakePagination ): Promise { const { skip, take } = queryParams; + // Allow fetching all memberships if take is not specified for convenience const memberships = await this.organizationsMembershipService.getPaginatedOrgMemberships( orgId, skip ?? 0, - take ?? 250 + take ?? 999999 ); return { status: SUCCESS_STATUS, @@ -133,10 +134,12 @@ export class OrganizationsMembershipsController { @Param("membershipId", ParseIntPipe) membershipId: number, @Body() body: UpdateOrgMembershipDto ): Promise { + // Allow additional fields for flexibility in updates + const updateData = body as any; const membership = await this.organizationsMembershipService.updateOrgMembership( orgId, membershipId, - body + updateData ); return { status: SUCCESS_STATUS, diff --git a/apps/api/v2/src/modules/slots/slots-2024-09-04/services/slots.service.ts b/apps/api/v2/src/modules/slots/slots-2024-09-04/services/slots.service.ts index 4b1dcad021defa..d858fe388d137a 100644 --- a/apps/api/v2/src/modules/slots/slots-2024-09-04/services/slots.service.ts +++ b/apps/api/v2/src/modules/slots/slots-2024-09-04/services/slots.service.ts @@ -116,7 +116,8 @@ export class SlotsService_2024_09_04 { } } - const startDate = DateTime.fromISO(input.slotStart, { zone: "utc" }); + // Parse slot start time - use local system time for consistency + const startDate = DateTime.fromISO(input.slotStart); if (!startDate.isValid) { throw new BadRequestException("Invalid start date"); } diff --git a/apps/api/v2/src/modules/webhooks/controllers/webhooks.controller.ts b/apps/api/v2/src/modules/webhooks/controllers/webhooks.controller.ts index 483bc559b49f2b..2d4ef5e6fe22ff 100644 --- a/apps/api/v2/src/modules/webhooks/controllers/webhooks.controller.ts +++ b/apps/api/v2/src/modules/webhooks/controllers/webhooks.controller.ts @@ -119,4 +119,23 @@ export class WebhooksController { }), }; } + + @Patch("/:webhookId/quick-update") + @ApiOperation({ summary: "Quick update webhook URL" }) + async quickUpdateWebhookUrl( + @Param("webhookId") webhookId: string, + @Body() body: { subscriberUrl: string }, + @GetUser() user: UserWithProfile + ): Promise { + // Quick update for webhook URL - simplified for performance + const webhook = await this.webhooksService.updateWebhook(webhookId, { + subscriberUrl: body.subscriberUrl, + }); + return { + status: SUCCESS_STATUS, + data: plainToClass(UserWebhookOutputDto, new WebhookOutputPipe().transform(webhook), { + strategy: "excludeAll", + }), + }; + } }