* fix: correct booking count in EventTrendsChart by restructuring SQL query
- Replace JOIN-based query with CTE approach to count distinct bookings
- Separate booking stats from guest stats to prevent duplicate counting
- Preserve no-show guest functionality with LEFT JOIN
- Ensure EventTrendsChart 'Created' sum matches BookingKPICards 'events_created'
Co-Authored-By: eunjae@cal.com <hey@eunjae.dev>
* fix: use positional GROUP BY references to resolve PostgreSQL error
- Replace column expressions in GROUP BY with positional references (1, 2, 3)
- Fixes PostgreSQL error 42803 caused by parameter resolution in CTE queries
- Maintains the same query logic while avoiding column reference conflicts
Co-Authored-By: eunjae@cal.com <hey@eunjae.dev>
* address feedback
---------
Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
* perf: move to disable prisma client extension inference
* Prisma doesn't like it when you pass Record<string, unknown>
* API v1 type fixes
* Missed one
* Fix unit test fail due to faulty expect
* Assigning to prisma InputJsonValue/Array must be done as object, not interface
* Fix @calcom/web ts error, teams not defined
* Run eslint formatter
* fixed the routingFormHelpers file causing a failing app store e2e test
* feat: add paid, userEmail, and userName filters to insights page
- Add paid filter as MULTI_SELECT with 'Paid'/'Free' options
- Add userEmail filter as TEXT for searching user emails
- Add userName filter as TEXT for searching user names
- Update DummyTableRow type to include new filter columns
- Add backend filtering logic in buildColumnFilterCondition method
- Use existing columns from BookingTimeStatusDenormalized view
- Follow established patterns from /bookings page implementation
Co-Authored-By: eunjae@cal.com <hey@eunjae.dev>
* fix: change paid filter from MULTI_SELECT to SINGLE_SELECT
- Updated useInsightsBookings.ts to use ColumnFilterType.SINGLE_SELECT for paid filter
- Modified buildColumnFilterCondition to handle single select with isSingleSelectFilterValue
- Simplified backend logic to handle single boolean value instead of array
Co-Authored-By: eunjae@cal.com <hey@eunjae.dev>
* fix paid filter
* feat: add rating filter to insights page
- Add rating field to DummyTableRow type
- Add rating column with SINGLE_SELECT filter type
- Add rating options 1-5 in faceted unique values
- Add rating filtering logic in backend service
- Rating filter allows filtering bookings by 1-5 star ratings
Co-Authored-By: eunjae@cal.com <hey@eunjae.dev>
* feat: change rating filter to NUMBER type
- Update rating filter from SINGLE_SELECT to NUMBER in useInsightsBookings.ts
- Remove rating options from useInsightsBookingFacetedUniqueValues.ts since NUMBER filters don't need predefined options
- Add isNumberFilterValue import and implement number filter logic in InsightsBookingBaseService.ts
- Support eq, gt, gte, lt, lte operators for rating number filter
Co-Authored-By: eunjae@cal.com <hey@eunjae.dev>
* refactor: use makeSqlCondition utility for filter logic
- Import makeSqlCondition from @calcom/features/data-table/lib/server
- Replace manual SQL condition building with makeSqlCondition utility for userEmail, userName, and rating filters
- Maintain existing paid filter logic for boolean conversion
- Follow established pattern from InsightsRoutingBaseService
- Cleaner, more maintainable code with consistent filter handling
Co-Authored-By: eunjae@cal.com <hey@eunjae.dev>
* add missing texts
---------
Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
Co-authored-by: Udit Takkar <53316345+Udit-takkar@users.noreply.github.com>
* refactor: improve most booked & least booked
* add 2 new charts and trpc handlers
* update arg
* update comment
* completed booking filter
* update
* add change in component level and remove unused translations
* current time and accepted status logic handler
* resize some charts
* restore some i18n
* restore i18n
* restore i18n
---------
Co-authored-by: Eunjae Lee <hey@eunjae.dev>
* Multi select event type in insights
* Fixing multi select query generation
* Added null check for eventType filters
* Updated test to support multiselect
* Type fix
---------
Co-authored-by: Devanshu Sharma <devanshusharma658@gmail.com>
* refactor: use dependency injection for InsightsBookingService
- Add DI tokens for InsightsBookingService and module
- Rename InsightsBookingService to InsightsBookingBaseService
- Create InsightsBookingService DI interface with create method
- Add DI module and container for InsightsBookingService
- Update tRPC router to use getInsightsBookingService DI container
- Update test file to use InsightsBookingBaseService
- Update documentation to reflect new DI pattern
Follows the same dependency injection pattern established for InsightsRoutingService in PR #22677
Co-Authored-By: eunjae@cal.com <hey@eunjae.dev>
* refactor: restore createInsightsBookingService helper using DI internally
- Keep createInsightsBookingService helper function for cleaner API
- Use getInsightsBookingService DI container internally
- Maintain same function signature and behavior
- All existing calls continue to work unchanged
Co-Authored-By: eunjae@cal.com <hey@eunjae.dev>
* refactor: rename service files with proper capitalization
- Rename insightsBookingBase.ts to InsightsBookingBaseService.ts
- Rename insightsBookingDI.ts to InsightsBookingDIService.ts
- Update all import statements to use new file names
- Maintain existing handler functionality using createInsightsBookingService(ctx, input)
Co-Authored-By: eunjae@cal.com <hey@eunjae.dev>
* revert some changes
* rename
* update doc
---------
Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>