* Fix membership deletion handling and add tests
* fixes
* revert api-v2 specific changes
* Add more tests
* refactor: Move removeMember function into TeamService as private static methods
- Moved removeMember and all related helper functions from separate file into TeamService class
- Made all functions private static methods instead of exporting them
- Deleted the original removeMember.ts file since it's no longer needed
- Updated imports to use the new location
- All integration tests pass successfully
* refactor: Rename memberId to userId in TeamService methods
- Renamed memberId parameter to userId in removeMember private method
- Renamed memberIds parameter to userIds in removeMembers public method
- Updated all calls to removeMembers to use userIds instead of memberIds
- Parameter names now accurately reflect that they are user IDs, not membership IDs
* test: add service unit tests and simplify e2e tests for membership deletion
- Add unit tests for membership deletion services
- Remove redundant deletion behavior tests from controllers
- Keep only happy path tests in e2e controller tests
- Fix unused imports and variables
* package.json version
* fix unit teswtes
* No specs file
* fix unit tests
* fix: Add platform-libraries build step to E2E API v2 workflow
The E2E API v2 tests were failing with TypeScript compilation errors because
TeamService imports from @calcom/platform-libraries require the package to be
built first to generate the dist/ folder with compiled exports.
This adds the same build step that was added to unit-tests.yml to resolve
the module resolution errors.
Co-Authored-By: hariom@cal.com <hariombalhara@gmail.com>
* Making tests clearer and easier to undestand
* chore: bump platform libs
* chore: bump platform libs
---------
Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
Co-authored-by: Morgan <33722304+ThyMinimalDev@users.noreply.github.com>
Co-authored-by: cal.com <morgan@cal.com>
* refactor: convert UserRepository to use dependency injection pattern
- Convert all static methods to public instance methods
- Add constructor that takes PrismaClient parameter
- Update all usage sites to use new instantiation pattern: new UserRepository(prisma).method()
- Follow same pattern as PrismaOOORepository for consistency
- Maintain all existing method logic and signatures unchanged
- Update 125+ files across the codebase to adapt to new pattern
Co-Authored-By: morgan@cal.com <morgan@cal.com>
* optimize: reuse UserRepository instances within same function scope
- Create single UserRepository instance per function scope
- Reuse instance for multiple method calls within same function
- Reduces object instantiation overhead and improves performance
- Apply optimization pattern consistently across codebase
Co-Authored-By: morgan@cal.com <morgan@cal.com>
* fix: repository
* fixup! fix: repository
* fixup! fixup! fix: repository
* fixup! fixup! fixup! fix: repository
* fix: update test mocking strategies for UserRepository dependency injection
- Convert static method mocks to instance method mocks in userCreationService.test.ts
- Update vi.spyOn calls to work with constructor injection pattern in getAllCredentials.test.ts
- Fix UserRepository mocking in getRoutedUrl.test.ts to use constructor injection
- Ensure consistent mocking approach across all test files
- Fix 'UserRepository is not a constructor' errors in tests
Co-Authored-By: morgan@cal.com <morgan@cal.com>
* feat: optimize UserRepository instance reuse and add SessionUser type
- Reuse UserRepository instance in OrganizationRepository.createWithNonExistentOwner
- Add comprehensive SessionUser type definition for type safety
- Improve type constraints in enrichUserWithTheProfile and enrichUserWithItsProfile
- Ensure proper return types with profile information
Co-Authored-By: morgan@cal.com <morgan@cal.com>
* fix: make UserRepository mocking strategy more robust for CI environments
- Add defensive checks for vi.mocked() to handle CI environment differences
- Ensure mockImplementation is available before calling it
- Maintain consistent mocking pattern across all test files
- Fix 'Cannot read properties of undefined' error in CI
Co-Authored-By: morgan@cal.com <morgan@cal.com>
* fixup! fix: make UserRepository mocking strategy more robust for CI environments
* refactor: convert direct UserRepository instantiations to two-step pattern
- Change await new UserRepository(prisma).method(...) to const userRepo = new UserRepository(prisma); await userRepo.method(...)
- Optimize instance reuse within same function scopes
- Apply pattern consistently across all modified files in PR
- Fix type errors in organization.ts and sessionMiddleware.ts
Co-Authored-By: morgan@cal.com <morgan@cal.com>
* refactor: complete two-step UserRepository pattern for remaining files
- Apply two-step instantiation pattern to all remaining modified files in PR
- Ensure consistent UserRepository usage across entire codebase
- Maintain instance reuse optimization within function scopes
Co-Authored-By: morgan@cal.com <morgan@cal.com>
* chore: bump platform libs
---------
Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
Co-authored-by: morgan@cal.com <morgan@cal.com>
Co-authored-by: Morgan <33722304+ThyMinimalDev@users.noreply.github.com>
* feat: optimize Prisma queries by replacing findFirst with findUnique where applicable
- Replace findFirst/findFirstOrThrow with findUnique/findUniqueOrThrow for queries using unique constraints
- Maintain existing functionality and error handling behavior
- Focus on queries using primary keys and unique index fields from schema
- Revert problematic changes that caused test failures to maintain stability
Co-Authored-By: benny@cal.com <benny@cal.com>
* revert: exclude API files from Prisma query optimizations per user request
- Reverted all 55 API-related files to their original state
- Kept all non-API Prisma query optimizations intact
- API files include apps/api/v1, apps/api/v2, apps/web/app/api, and packages/app-store/*/api
- Non-API optimizations remain for packages/lib, packages/features, apps/web (non-api), etc.
Co-Authored-By: benny@cal.com <benny@cal.com>
* feat: optimize membership query in attributeUtils to use findUnique with userId_teamId constraint
Co-Authored-By: benny@cal.com <benny@cal.com>
* revert: exclude test files from Prisma query optimizations per user request
Co-Authored-By: benny@cal.com <benny@cal.com>
* revert: revert attributeUtils.ts to use findFirst for test compatibility
Co-Authored-By: benny@cal.com <benny@cal.com>
---------
Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
Co-authored-by: benny@cal.com <benny@cal.com>
Co-authored-by: Anik Dhabal Babu <81948346+anikdhabal@users.noreply.github.com>
2025-06-17 09:52:02 +03:00
devin-ai-integration[bot]GitHubDevin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>benny@cal.com <benny@cal.com>
* Add logging to `handleGroupEvents`
* `createUsersAndConnectOrg` skipDuplicates when creating new users
* `ProfileRepository.createMany` to get username from `orgAutoAcceptEmail`
* Refactor `createUsersAndConnectToOrg` to use `createMany` instead of individual db calls
* Add error logging to `sendSignupToOrganizationEmail`
* Move `sendSignupToOrganizationEmail` to a `Promise.allSettled`
* Add `createManyForExistingUsers` and `createManyPromise`
* Move creating existing users profiles to `ProfileRepository.createManyForExistingUsers`
* Move `sendExistingUserTeamInviteEmails` to a `Promise.allSettled`
* Refactor `createUsersAndConnectToOrg` to use `ProfileRepository.createManyPromise`
* Type fix
* Create `generateNewChildEventTypeDataForDB`
* Create `addNewMembersToEventTypes`
* Type fix
* Type fix
* Type fix
* `createMany` new workflowsOnEventTypes
* Introduce `DATABASE_CHUNK_SIZE`
* Batch connect children event types
* Batch connect profiles to existing users
* chore: decouple ui dialog from AppRouter and Atoms
* fix type e2e test
* fix: import dialog from @calcom/ui/components/dialog
* fix: remove log
* fix unit test
* fix
* fix and move data-override-list test to features package
---------
Co-authored-by: hbjORbj <sldisek783@gmail.com>
* fix trpc session circle dep
* fixes trpc session cirlce dep
* fix relative imports
* fix more imports to use types and not trpc
* fix exports
* Fixed types
---------
Co-authored-by: Keith Williams <keithwillcode@gmail.com>
* Okta fixes
* Fix username and name in case of sync from Okta
* Fix username and name in case of sync from Okta
* Add test
* cleanup code and add tests
* migration and init to accept creationSource for new bookings
* V1 create booking
* V1 user creation
* webapp booking + V1 user
* user creation in V1, V2 and webapp
* booking source V2 and fix for v1 user
* fit type
* --fix type
* add test -- WIP
* fix type
* fix type
* ^
* Need more sleep zzz
* -_-
* bump libraries platform
* adds for v2 recurring booking
* fix lint
* instant meetings
* fix: api v2 creation source
* fixup! fix: api v2 creation source
* bump libraries
* add user
* fix test
* fixup! fix test
* add more source
* more source...
* fix type & test --1
* fix type & test --2
* typefix
* fixup test
---------
Co-authored-by: Morgan Vernay <morgan@cal.com>
* feat: Enhance SCIM user attribute handling and sync process
- Introduced a new PR_TODO.md file to track ongoing tasks and fixes.
- Updated `getAttributesFromScimPayload` to accept a directoryId and ignore core user attributes during syncing.
- Modified `handleUserEvents` to pass directoryId when syncing custom attributes.
- Improved attribute creation logic to handle unique options and added support for optional isGroup property in attribute options.
- Added utility function `getOptionsWithValidContains` to ensure valid sub-options in attribute options.
- Updated tests to reflect changes in attribute handling and ensure proper functionality.
This commit addresses issues with user attribute syncing and enhances the overall attribute management process.
* test: Add unit tests for getOptionsWithValidContains utility function
- Introduced a new test file for the getOptionsWithValidContains function.
- Added tests to verify the removal of duplicate options, initialization of empty contains arrays, filtering of non-existent sub-options, and handling of empty options arrays.
- Ensured comprehensive coverage of the utility's functionality to enhance reliability and maintainability.
* feat: improve text filters (WIP)
* move function to bottom
* apply some styles
* fix selection of TextFilterOptions
* rename value to operand
* remove unused file
* merge filters/filters into filters/utils
* fix regression of not putting url params correctly
* move makeWhereClause to filters/utils
* fix negative, empty, and not empty operators
* fix initial filtering from search state (url)
* fix type errors
* do not send an empty array to query
* update yarn.lock
* i18n for text filter operators
* extract logic as useColumnFilters()
* add missing import
* fix type error
* revert yarn.lock
* use i18n
* insensitive text match
* move data-table to @calcom/features
* fix type errors
* fix type errors
* fix type errors
---------
Co-authored-by: Udit Takkar <53316345+Udit-takkar@users.noreply.github.com>
* WIP restored from .git cache
* fix exports
* sortable row model
* feat column visibility component
* wip filters with nuqs
* pull in unique values from table into filters
* correctly assign filters via v/f
* inital selection bar refactor
* data-table selection bar + optmistic update of delete
* dynamic link
* migrate member list table to new data-table
* total list shows filtered value > db valuie
* add filters for attributes
* type errors
* make content bigger on lg
* add mb-6 to teams user datatable to match spacing spec
* correctly render multi-badge
* fix: masss asignment optimistic UI
* fix type errors
* remove log
* fix toolbar type error
* chore: Remove debug artifact
* type errors
* Update apps/web/public/static/locales/en/common.json
* use max-w-fit
* chore: Remove unused translation now we don't specify 'mass' in assign
* perf: fix: use the onBlur event to prevent focus loss whilst the list is rerendering
* Move the data-table exports together in the main barrel, then import
* fix exports that were lost in a merge
* fix exports that were lost in a merge
* fix groupteammapping/availbilityslider
* fix overflow problems
* add scrollbar-thin class
* fix type error
* user serverside values for faceted filters
* pass filters to serverside
* filter serverside
* fix team server side filter
* add loaded x of y
* attributes icon change
* correct implementation for text/input attr optimistic
* type check fixes
* fix platform checks
* fix types again
* fix types again
* fix types again
* add use client
* add use client
* fix-types
* fix: Add missing translation in EN
* fix e2e tests via testid
* fix e2e tests via testid
* fix: Member invite popup not popping up
* Update copyInviteLink to new-member-button testid
* Hopefully fix test ids this time
* fix: Use the right buttons on the right pages
---------
Co-authored-by: Alex van Andel <me@alexvanandel.com>
Co-authored-by: Peer Richelsen <peeroke@gmail.com>
Co-authored-by: Udit Takkar <53316345+Udit-takkar@users.noreply.github.com>
* fix: Error in team members migration during org onboarding
* Add invitationMemberHandler tests
* Add unit tests
* Improve tests and refactor
* Improve tests and refactor
* Fix type issue
* Fix createNewUsersConnectToOrgIfExists args
* fix: Support adding an non-existent email as the owner of the organization
* Remove dead code
* fixes
* add test
* self review changes
* Update packages/trpc/server/routers/viewer/organizations/create.handler.ts
Co-authored-by: Joe Au-Yeung <65426560+joeauyeung@users.noreply.github.com>
* Fix typo everywhere
---------
Co-authored-by: Joe Au-Yeung <65426560+joeauyeung@users.noreply.github.com>
Co-authored-by: Peer Richelsen <peeroke@gmail.com>
* fix: [CAL-3374] Says Number is not Verified, but it is Verified
* clearing error only when verified
* type-checks fixed
* chore: improvement
---------
Co-authored-by: Udit Takkar <53316345+Udit-takkar@users.noreply.github.com>
Co-authored-by: Udit Takkar <udit222001@gmail.com>
* feat(appStore): add isOAuth config
* refactor(appStore): EventTypeAppSettngsInterface
* refactor(qr_code): split EventTypeAppCardInterface and EventTypeAppSettingsInterface
* feat(appStore): redirect to onboarding for stripe and basecam
* fix(ui/ScrollableArea): overflow indicator not working
* feat(apps): new install app flow
* fix(configureStep): get disabled props for settings
* fix: getAppInstallsBySlug now use teamIds
* chore: Alby to AppSettingsInterface
* chore: Giphy to appsettings interface
* chore: GTM migration
* chore: GT4 - migration
* chore: fathom migration
* chore: paypal
* feat: basecamp migration
* feat: metapixel migration
* feat:plausable
* feat:stripe
* fix merge issues
* fix merge issues in new app install flow steps
* wip: callback to onboarding
* fix: imports
* fix: more imports
* feat: use redirect to onboarding on install flow
* feat: New app install flow 2 (#14077)
* fix: redirect to event-type after oauth flow
* When clicking on install new app button, only redirect to the new app install flow if it is an oAuth app or an app that extends the EventType feature in it's config
* code refactor, skip event-type step
* removed extra consoles
* so that no one can change the eventTypeId in url
* theme support enabled
* only pass eventTypeId instead of whole evetType obj to OmniInstallAppButton
* fix: clicking on event-type gives error and redirects to /apps
* saved appOnboardingRedirectUrl to OAuth State
* fix: a user having no team breaks the onboarding flow
* add optional chaining to appMetadata.extendsFeature and appMetadata.isOAuth;
* encode appOnboardingRedirectUrl
* fix: dark theme ui issues
* skip configure step if no-event types
if user/team does not have event-type then skip configure step and goto apps/installed/[category]
* exclude calendars from apps- onboarding flow
* Update getAppOnboardingRedirectUrl.ts
* fix: On configure step, inputs aren't showing errors
* change route from `apps/onboarding` to `apps/installation`
* fix: flow not correctly working for teams
* should only allow team ADMIN or OWER to install an app to team
* Prevent two payment apps to be enabled
* removed loading state
* Fix type error
* undo new-app-flow from OmniInstallAppButton
* remove OAuth Step, handle step numbering
* fix: redirect url
* getAppOnboardingRedirectUrl refactor
* for debugging
* Revert "for debugging"
This reverts commit b9362c1a8f47f2280e684c213d7ec08d04a8ac4c.
* fix: added toaster
* feat: added support to select multiple events (almost)
* hide button
* Move inner form outside outer form using portal
Due to limitations with nested forms in React Hook Form, moved the inner form outside the outer form using a portal to ensure proper form handling.
* submit buttons refs madness
* removed configure step
we had to use query params to manage selected event-types, between routes which was causing 2 issues:
* each time we selected or unselected an event the whole page was reloaded including getserversideprops being called again and again
* the form was reloaded causing more issues
* removed extra unwanted code
* small fix
* fix: type error
* fix: types
* implemented suggested changes
* removed step footer
* fixed error.message
* removed commented styles
* removed step footer
* fix: Display team event types instead of user's on event types step when team selected
* fix: typo
* removed shouldLockDisableProps
* refactor setUpdatedEventTypesStatus, fix type
* removed extra code
* can't delete while saving
* added translations
* fix: loading in select account step, fix handle onSelect params type
* Fix typo
---------
Co-authored-by: Joe Au-Yeung <j.auyeung419@gmail.com>
* fix: type errors
* fix: failing tests
---------
Co-authored-by: sean-brydon <sean@cal.com>
Co-authored-by: Keith Williams <keithwillcode@gmail.com>
Co-authored-by: Joe Au-Yeung <j.auyeung419@gmail.com>
Co-authored-by: Somay Chauhan <somaychauhan98@gmail.com>
* WIP
Adds the capability to add SSO setup in orgs
if you are an Admin or an Owner of the org
* remove sso setup from teams
* allows account creation on first login
* auto-add on login and dsync fixes
* allow SP & idP initiated login for SAML
* revert change to checkIfUserShouldbelongToOrg
* fixes SP initiated Login for first time
* removed stale comment
* code improvement
* --
* minor fixes
* more fix
* add description for non-admin sso settings page
* Set unique tenant
* Rely on current DB for dsync data
* Fix rendering dsync config
* Remove console.log
* Address feedback
* Add relationship between dsync data and team group mapping
* Fix `dsyncData` and `organizationSetting` relationship