Skip to content

feat: orgs conferencing apps#22211

Closed
ibex088 wants to merge 75 commits intomainfrom
feat/orgs-conferencing-apps
Closed

feat: orgs conferencing apps#22211
ibex088 wants to merge 75 commits intomainfrom
feat/orgs-conferencing-apps

Conversation

@ibex088
Copy link
Contributor

@ibex088 ibex088 commented Jul 2, 2025

What does this PR do?

This pull request introduces support for installing conferencing applications at the team/organization level.

Benefits

No individual setup required: Users within a team or organization no longer need to connect their personal accounts to Zoom or other conferencing apps.

Shared credentials: Once installed by a team admin, the conferencing app credentials are available for all sub-teams and users within the org.

Users can leverage the shared team/org-installed credentials when creating personal events, as well as sub-team events.

Reduced redundancy: Instead of every user configuring the same app, the admin installs it once and all members can use it seamlessly.

@ibex088 ibex088 requested a review from a team July 2, 2025 12:13
@ibex088 ibex088 requested a review from a team as a code owner July 2, 2025 12:13
@github-actions
Copy link
Contributor

github-actions bot commented Jul 2, 2025

Hey there and thank you for opening this pull request! 👋🏼

We require pull request titles to follow the Conventional Commits specification and it looks like your proposed title needs to be adjusted.

Details:

No release type found in pull request title "Feat/orgs conferencing apps". Add a prefix to indicate what kind of release this pull request corresponds to. For reference, see https://www.conventionalcommits.org/

Available types:
 - feat: A new feature
 - fix: A bug fix
 - docs: Documentation only changes
 - style: Changes that do not affect the meaning of the code (white-space, formatting, missing semi-colons, etc)
 - refactor: A code change that neither fixes a bug nor adds a feature
 - perf: A code change that improves performance
 - test: Adding missing tests or correcting existing tests
 - build: Changes that affect the build system or external dependencies (example scopes: gulp, broccoli, npm)
 - ci: Changes to our CI configuration files and scripts (example scopes: Travis, Circle, BrowserStack, SauceLabs)
 - chore: Other changes that don't modify src or test files
 - revert: Reverts a previous commit

@graphite-app graphite-app bot requested a review from a team July 2, 2025 12:14
@keithwillcode keithwillcode added core area: core, team members only platform Anything related to our platform plan labels Jul 2, 2025
@dosubot dosubot bot added the ✨ feature New feature or request label Jul 2, 2025
@graphite-app
Copy link

graphite-app bot commented Jul 2, 2025

Graphite Automations

"Add consumer team as reviewer" took an action on this PR • (07/02/25)

1 reviewer was added to this PR based on Keith Williams's automation.

@delve-auditor
Copy link

delve-auditor bot commented Jul 2, 2025

No security or compliance issues detected. Reviewed everything up to b270660.

Security Overview
  • 🔎 Scanned files: 34 changed file(s)
Detected Code Changes
Change Type Relevant files
Enhancement ► atoms.conferencing-apps.controller.ts
    Add Organization Conferencing Apps List Endpoint
► conferencing-atom.service.ts
    Include Team Installed Apps Option
► conferencing.controller.ts
    Add Default Conferencing App with Credential ID
► organizations-conferencing.controller.ts
    Implement Organization Level Conferencing Apps
► organizations-teams-conferencing.controller.ts
    Implement Team Level Conferencing Apps
Refactor ► conferencing.repository.ts
    Update Team Conferencing Apps Query
► conferencing.service.ts
    Refactor Conferencing App Logic
► user.repository.ts
    Add Profile Skip Platform Check Method
Configuration changes ► package.json
    Update Platform Libraries Version

Reply to this PR with @delve-auditor followed by a description of what change you want and we'll auto-submit a change to this PR to implement it.

Copy link
Contributor

@cubic-dev-ai cubic-dev-ai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

cubic found 9 issues across 22 files. Review them in cubic.dev

React with 👍 or 👎 to teach cubic. Tag @cubic-dev-ai to give specific feedback.

export const QUERY_KEY = "get-installed-conferencing-apps";

export const useAtomsGetInstalledConferencingApps = (teamId?: number) => {
export const useAtomsGetInstalledConferencingApps = (teamId?: number, orgId?: number) => {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The function signature now allows both teamId and orgId, but the logic does not handle the case where both are provided. This could lead to ambiguous or unintended API calls. Consider validating that only one of teamId or orgId is provided at a time.

},
});

if (user?.organizationId) {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

When the user belongs to an organization this branch replaces the previous { userId } filter with { teamId: { in: [user.organizationId] } }, causing personal credentials owned by the user to be ignored. As a result users who are part of an org will no longer see their own conferencing credentials in the location selector.

const fallbackUrl = decodedCallbackState.onErrorReturnTo || "";
return { url: fallbackUrl };
}
} else if (decodedCallbackState.orgId) {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This new branch repeats almost the same logic as the preceding team-level branch (building the same params / headers, performing the same axios call, and handling identical success & error flows). Copy-pasting this block increases maintenance cost and risks future inconsistencies. Extract the shared logic into a reusable helper instead of duplicating it.

@vercel
Copy link

vercel bot commented Jul 2, 2025

The latest updates on your projects. Learn more about Vercel for GitHub.

2 Skipped Deployments
Project Deployment Preview Comments Updated (UTC)
cal Ignored Ignored Preview Oct 31, 2025 11:06am
cal-eu Ignored Ignored Preview Oct 31, 2025 11:06am

@vercel vercel bot temporarily deployed to Preview – api July 3, 2025 12:27 Inactive
@vercel vercel bot temporarily deployed to Preview – cal July 3, 2025 12:27 Inactive
Copy link
Contributor

@supalarry supalarry left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

couple small comments, besides that like discussed in Slack we need a how to guide for customers how to use this


@IsNumber()
@IsOptional()
@Expose()
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think that the properties in DefaultConferencingAppsOutputDto won't show up in v2 docs because missing ApiProperty - we need to add it so customers know what data to expect.

}

async findTeamConferencingApps(teamId: number) {
const parentTeam = await this.dbRead.prisma.team.findUnique({
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

shouldn't this be just const team because we then check ?.parentId

});
}

async findMultipleTeamsConferencingApp(teamIds: number[], app: string) {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why in findTeamConferencingApps we check parentId and here not?

if (!existingOption) {
apps[groupByCategory] = [...apps[groupByCategory], option];
}
// const existingOption = apps[groupByCategory].find((o) => o.value === option.value);
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

can delete comments

@ibex088 ibex088 self-assigned this Oct 6, 2025
@ibex088 ibex088 requested a review from a team as a code owner October 6, 2025 08:07
Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🧹 Nitpick comments (1)
apps/api/v2/src/modules/users/users.repository.ts (1)

309-318: Consider a more explicit null check.

The condition typeof metadata === "object" evaluates to true for null due to a JavaScript quirk. While spreading null results in an empty object (matching the else branch behavior), a more explicit check would improve clarity.

Apply this diff to make the intent clearer:

       metadata:
-        typeof metadata === "object"
+        metadata && typeof metadata === "object"
           ? {
               ...metadata,
📜 Review details

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Disabled knowledge base sources:

  • Linear integration is disabled by default for public repositories

You can enable these sources in your CodeRabbit configuration.

📥 Commits

Reviewing files that changed from the base of the PR and between b613d75 and d9e12fb.

📒 Files selected for processing (3)
  • apps/api/v2/src/modules/conferencing/outputs/get-default-conferencing-app.output.ts (2 hunks)
  • apps/api/v2/src/modules/teams/teams/teams.repository.ts (2 hunks)
  • apps/api/v2/src/modules/users/users.repository.ts (2 hunks)
🚧 Files skipped from review as they are similar to previous changes (2)
  • apps/api/v2/src/modules/conferencing/outputs/get-default-conferencing-app.output.ts
  • apps/api/v2/src/modules/teams/teams/teams.repository.ts
🧰 Additional context used
📓 Path-based instructions (4)
**/*.{service,repository}.ts

📄 CodeRabbit inference engine (.cursor/rules/review.mdc)

Avoid dot-suffixes like .service.ts or .repository.ts for new files; reserve .test.ts, .spec.ts, .types.ts for their specific purposes

Files:

  • apps/api/v2/src/modules/users/users.repository.ts
**/*.ts

📄 CodeRabbit inference engine (.cursor/rules/review.mdc)

**/*.ts: For Prisma queries, only select data you need; never use include, always use select
Ensure the credential.key field is never returned from tRPC endpoints or APIs

Files:

  • apps/api/v2/src/modules/users/users.repository.ts
**/*.{ts,tsx}

📄 CodeRabbit inference engine (.cursor/rules/review.mdc)

Flag excessive Day.js use in performance-critical code; prefer native Date or Day.js .utc() in hot paths like loops

Files:

  • apps/api/v2/src/modules/users/users.repository.ts
**/*.{ts,tsx,js,jsx}

⚙️ CodeRabbit configuration file

Flag default exports and encourage named exports. Named exports provide better tree-shaking, easier refactoring, and clearer imports. Exempt main components like pages, layouts, and components that serve as the primary export of a module.

Files:

  • apps/api/v2/src/modules/users/users.repository.ts
🧬 Code graph analysis (1)
apps/api/v2/src/modules/users/users.repository.ts (2)
packages/platform/libraries/index.ts (1)
  • userMetadata (73-73)
packages/prisma/zod-utils.ts (1)
  • userMetadata (327-349)
🔇 Additional comments (2)
apps/api/v2/src/modules/users/users.repository.ts (2)

10-10: LGTM!

The import of userMetadata is necessary for type-safe metadata parsing and aligns with the PR's introduction of credentialId support.


297-297: LGTM!

The addition of the optional credentialId parameter correctly extends the method to support credential-specific default conferencing apps, aligning with the PR objectives.

@graphite-app graphite-app bot added the community Created by Linear-GitHub Sync label Nov 23, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

api area: API, enterprise API, access token, OAuth community Created by Linear-GitHub Sync core area: core, team members only ✨ feature New feature or request organizations area: organizations, orgs platform Anything related to our platform plan ready-for-e2e size/XXL

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants