mirror of
https://github.com/hanzoai/calendar.git
synced 2026-10-30 14:46:43 +00:00
* feat: Cal.diy — community-driven MIT-licensed fork of Cal.com This squashed commit contains all Cal.diy changes applied on top of calcom/cal.com main: - Rebrand Cal.com to Cal.diy across the entire codebase - Remove Enterprise Edition (EE) features, license checks, and AGPL restrictions - Switch license from AGPL-3.0 to MIT - Remove docs/ directory (migrated to Nextra at cal.diy) - Remove dead code: org tests, EE tips, platform nav, premium username, SAML/SSO, etc. - Clean up .env.example for self-hosted Cal.diy - Update Docker image references to calcom/cal.diy - Update README, CONTRIBUTING.md, and issue templates for Cal.diy community fork - Add PR welcome bot for Cal.diy contributors - Fix API v2 breaking changes oasdiff ignore entries - Replace Blacksmith CI runners with default GitHub Actions 3893 files changed, 20789 insertions(+), 411020 deletions(-) Co-Authored-By: [email protected] <[email protected]> * refactor: remove org-specific /organizations/:orgId endpoints from API v2 atoms controllers (#1701) Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> * fix: revert Cal.diy Inc to Cal.com, Inc. in license files, copyright notices, and package metadata (#1702) Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> * rip out org related comments in api v2 --------- Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
79 lines
2.7 KiB
TypeScript
79 lines
2.7 KiB
TypeScript
import { createModule } from "../di";
|
|
import { DI_TOKENS } from "../tokens";
|
|
|
|
type Host = {
|
|
isFixed: boolean;
|
|
user: Record<string, unknown>;
|
|
groupId?: string | null;
|
|
};
|
|
|
|
type User = Record<string, unknown>;
|
|
|
|
type QualifiedHost = { user: Record<string, unknown>; isFixed?: boolean; groupId?: string | null };
|
|
|
|
export const qualifiedHostsModule = createModule();
|
|
qualifiedHostsModule.bind(DI_TOKENS.QUALIFIED_HOSTS_SERVICE).toValue({
|
|
findQualifiedHostsWithDelegationCredentials: async (...args: unknown[]) => {
|
|
const input = (args[0] ?? {}) as Record<string, unknown>;
|
|
const eventType = (input.eventType ?? {}) as Record<string, unknown>;
|
|
const contactOwnerEmail = input.contactOwnerEmail as string | null | undefined;
|
|
const routedTeamMemberIds = (input.routedTeamMemberIds ?? []) as number[];
|
|
|
|
const hosts = (eventType.hosts ?? []) as Host[];
|
|
const users = (eventType.users ?? []) as User[];
|
|
const schedulingType = eventType.schedulingType as string | null | undefined;
|
|
|
|
// For team events with hosts array
|
|
if (hosts.length > 0) {
|
|
const fixedHosts: QualifiedHost[] = [];
|
|
const allRRHosts: QualifiedHost[] = [];
|
|
|
|
for (const host of hosts) {
|
|
const qualifiedHost: QualifiedHost = {
|
|
user: host.user,
|
|
isFixed: host.isFixed,
|
|
groupId: host.groupId ?? null,
|
|
};
|
|
|
|
if (host.isFixed || schedulingType !== "ROUND_ROBIN") {
|
|
fixedHosts.push(qualifiedHost);
|
|
} else {
|
|
allRRHosts.push(qualifiedHost);
|
|
}
|
|
}
|
|
|
|
// Filter qualifiedRRHosts based on contactOwnerEmail or routedTeamMemberIds
|
|
let qualifiedRRHosts = allRRHosts;
|
|
|
|
if (contactOwnerEmail) {
|
|
const contactOwnerHost = allRRHosts.filter(
|
|
(h) => (h.user as { email?: string }).email === contactOwnerEmail
|
|
);
|
|
if (contactOwnerHost.length > 0) {
|
|
qualifiedRRHosts = contactOwnerHost;
|
|
}
|
|
} else if (routedTeamMemberIds.length > 0) {
|
|
const routedMemberIdSet = new Set(routedTeamMemberIds);
|
|
const routedHosts = allRRHosts.filter((h) => routedMemberIdSet.has((h.user as { id: number }).id));
|
|
if (routedHosts.length > 0) {
|
|
qualifiedRRHosts = routedHosts;
|
|
}
|
|
}
|
|
|
|
return { qualifiedRRHosts, allFallbackRRHosts: allRRHosts, fixedHosts };
|
|
}
|
|
|
|
// For user events (no hosts, just users array)
|
|
if (users.length > 0) {
|
|
const fixedHosts = users.map((user) => ({
|
|
user,
|
|
isFixed: true as const,
|
|
groupId: null,
|
|
}));
|
|
return { qualifiedRRHosts: [], allFallbackRRHosts: [], fixedHosts };
|
|
}
|
|
|
|
return { qualifiedRRHosts: [], allFallbackRRHosts: [], fixedHosts: [] };
|
|
},
|
|
});
|