feat: Custom host location (#25916)

* chore: save progress

* chore:

* feat: add input dialog

* fix: type error

* feat: mass apply dialog

* test: per host location

* test: fix test

* fix: address Cubic AI review feedback (confidence >= 9/10)

- Remove PII (address, phone number) from tracing logs in RegularBookingService.ts
- Constrain HostLocation.type to EventLocationType["type"] for compile-time validation

Co-Authored-By: unknown <>

* fix: translation

* refactor: improvements

* fix: correct grammar in custom host locations tooltip

Change 'custom host locations is enabled' to 'custom host locations are enabled' (plural subject requires plural verb).

Addresses Cubic AI review feedback (confidence 9/10).

Co-Authored-By: unknown <>

* refactor: improvements

* fix: auth

* fix: check

* refactor: improvements

* fix: address Cubic AI review feedback (confidence >= 9/10)

- Add scheduleId to newly created hosts in update.handler.ts to persist
  host-specific schedules during create operations
- Change host location deletion filter from !host.location to
  host.location === null to only delete when explicitly set to null
- Fix static-link per-host locations to use actual link instead of type
  in locationBodyString for bookingLocationService.ts

Co-Authored-By: unknown <>

* fix: preserve existing host scheduleId when not explicitly provided

Change scheduleId handling for existing hosts from 'host.scheduleId ?? null'
to 'host.scheduleId === undefined ? undefined : host.scheduleId' so that
when the client doesn't provide a scheduleId, the existing value is preserved
instead of being cleared to null.

Co-Authored-By: unknown <>

* fix; type erro

* fix; type erro

* fix; type erro

* refactor: move repository

* refactor: move repository

* fix: add singular/plural translations for location_applied_to_hosts

Addresses Cubic AI review feedback (confidence 9/10) to fix '1 hosts' rendering as '1 host' by using i18next plural format with _one and _other suffixes.

Co-Authored-By: unknown <>

* refactor: feedback

* fix: type err

* fix: use uuid in schema and remove attendee locaiton

* fix: type err

* fix: type err

* fix: validate eventTypeId as integer in massApplyHostLocation schema

Co-Authored-By: unknown <>

---------

Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
This commit is contained in:
Udit Takkar
2026-01-23 11:18:43 -03:00
committed by GitHub
co-authored by unknown <> unknown <> unknown <> Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
parent b9b7e50f5a
commit 0ad4367005
33 changed files with 2625 additions and 68 deletions
@@ -140,11 +140,20 @@ type InputWorkflowReminder = {
workflowId: number;
};
type InputHostLocation = {
type: string;
credentialId?: number | null;
link?: string | null;
address?: string | null;
phoneNumber?: string | null;
};
type InputHost = {
userId: number;
isFixed?: boolean;
scheduleId?: number | null;
groupId?: string | null;
location?: InputHostLocation | null;
};
type InputSelectedSlot = {
@@ -362,6 +371,20 @@ async function addHostsToDb(eventTypes: InputEventType[]) {
await prismock.host.create({
data,
});
if (host.location) {
await prismock.hostLocation.create({
data: {
userId: host.userId,
eventTypeId: eventType.id,
type: host.location.type,
credentialId: host.location.credentialId ?? null,
link: host.location.link ?? null,
address: host.location.address ?? null,
phoneNumber: host.location.phoneNumber ?? null,
},
});
}
}
}
}