* refactor: convert handleNotificationWhenNoSlots to service class with DI - Convert standalone handleNotificationWhenNoSlots function to NoSlotsNotificationService class - Add INoSlotsNotificationService interface following existing patterns - Create NoSlotsNotification DI module and add to container - Add NO_SLOTS_NOTIFICATION_SERVICE tokens to DI_TOKENS - Inject service into AvailableSlotsService dependencies - Update AvailableSlotsService to use injected service instead of direct function call - Update all test cases to use service class pattern - Follows existing DI patterns used by other services like BusyTimesService and CheckBookingLimitsService Co-Authored-By: morgan@cal.com <morgan@cal.com> * refactor: move Prisma calls to repositories and create dedicated DI container - Add findOrganizationSettingsBySlug and findTeamSlugById methods to TeamRepository - Add findTeamAdminsByTeamId method to MembershipRepository - Create MembershipRepository DI module and tokens - Update NoSlotsNotificationService to inject TeamRepository, MembershipRepository, and Redis client - Create dedicated DI container for NoSlotsNotificationService - Update AvailableSlots DI container to include MembershipRepository - Replace direct Prisma and Redis calls with repository methods and injected client - Update tests to use DI container instead of direct service instantiation - Fix Redis interface import path Co-Authored-By: morgan@cal.com <morgan@cal.com> * chore: DI noSlotsNotification service * chore: bump library --------- 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>
27 lines
1.3 KiB
TypeScript
27 lines
1.3 KiB
TypeScript
import { createModule } from "@evyweb/ioctopus";
|
|
|
|
import type { IAvailableSlotsService } from "@calcom/trpc/server/routers/viewer/slots/util";
|
|
import { AvailableSlotsService } from "@calcom/trpc/server/routers/viewer/slots/util";
|
|
|
|
import { DI_TOKENS } from "../tokens";
|
|
|
|
export const availableSlotsModule = createModule();
|
|
availableSlotsModule.bind(DI_TOKENS.AVAILABLE_SLOTS_SERVICE).toClass(AvailableSlotsService, {
|
|
oooRepo: DI_TOKENS.OOO_REPOSITORY,
|
|
scheduleRepo: DI_TOKENS.SCHEDULE_REPOSITORY,
|
|
selectedSlotRepo: DI_TOKENS.SELECTED_SLOT_REPOSITORY,
|
|
teamRepo: DI_TOKENS.TEAM_REPOSITORY,
|
|
userRepo: DI_TOKENS.USER_REPOSITORY,
|
|
bookingRepo: DI_TOKENS.BOOKING_REPOSITORY,
|
|
eventTypeRepo: DI_TOKENS.EVENT_TYPE_REPOSITORY,
|
|
routingFormResponseRepo: DI_TOKENS.ROUTING_FORM_RESPONSE_REPOSITORY,
|
|
redisClient: DI_TOKENS.REDIS_CLIENT,
|
|
cacheService: DI_TOKENS.CACHE_SERVICE,
|
|
checkBookingLimitsService: DI_TOKENS.CHECK_BOOKING_LIMITS_SERVICE,
|
|
userAvailabilityService: DI_TOKENS.GET_USER_AVAILABILITY_SERVICE,
|
|
busyTimesService: DI_TOKENS.BUSY_TIMES_SERVICE,
|
|
featuresRepo: DI_TOKENS.FEATURES_REPOSITORY,
|
|
qualifiedHostsService: DI_TOKENS.QUALIFIED_HOSTS_SERVICE,
|
|
noSlotsNotificationService: DI_TOKENS.NO_SLOTS_NOTIFICATION_SERVICE,
|
|
} satisfies Record<keyof IAvailableSlotsService, symbol>);
|