Skip to content

Commit caf1841

Browse files
fix: Credentials cron for DelegationCredential not working (calcom#21239)
* Remove unused return statement * Fix return from fn instead of continuing the loop * Ensure userId is set for existing records on update
1 parent 22e3338 commit caf1841

4 files changed

Lines changed: 23 additions & 11 deletions

File tree

apps/web/app/api/cron/credentials/route.ts

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import { NextResponse } from "next/server";
88

99
import { HttpError } from "@calcom/lib/http-error";
1010
import logger from "@calcom/lib/logger";
11+
import { safeStringify } from "@calcom/lib/safeStringify";
1112
import { CredentialRepository } from "@calcom/lib/server/repository/credential";
1213
import { DelegationCredentialRepository } from "@calcom/lib/server/repository/delegationCredential";
1314

@@ -42,7 +43,7 @@ async function handleCreateCredentials() {
4243
log.info(
4344
`Skipping credential creation for workspace platform ${workspacePlatform.slug} - only google is supported`
4445
);
45-
return;
46+
continue;
4647
}
4748

4849
// We can't know by looking at a Credential record in DB, if it has access to the `user.email` calendar in Google Calendar.
@@ -55,15 +56,15 @@ async function handleCreateCredentials() {
5556
});
5657

5758
const existingCredentialUserIds = new Set(existingCredentials.map((cred) => cred.userId));
58-
59-
const membersNeedingCredentials = organization.delegatedMembers.filter(
59+
const delegatedMembers = organization.delegatedMembers;
60+
const membersNeedingCredentials = delegatedMembers.filter(
6061
(member) => !existingCredentialUserIds.has(member.userId)
6162
);
6263

6364
const toProcessMembers = membersNeedingCredentials.slice(0, batchSizeToCreateCredentials);
6465

6566
log.info(
66-
`Creating credentials for ${toProcessMembers.length} members in organization ${organization.id}`
67+
`Creating credentials for ${toProcessMembers.length} members out of ${delegatedMembers.length} delegated members in organization ${organization.id}`
6768
);
6869

6970
const credentialCreationPromises = toProcessMembers.map(async (member) => {
@@ -80,18 +81,24 @@ async function handleCreateCredentials() {
8081
});
8182
log.info(`Created credential for member ${member.userId}`);
8283
} catch (error) {
83-
log.error(`Error creating credential for member ${member.userId}:`, error);
84+
log.error(`Error creating credential for member ${member.userId}:`, safeStringify(error));
8485
throw error;
8586
}
8687
});
8788
const results = await Promise.allSettled(credentialCreationPromises);
8889
const successCount = results.filter((r) => r.status === "fulfilled").length;
8990
const failureCount = results.filter((r) => r.status === "rejected").length;
90-
91+
log.info(
92+
`Created ${successCount} credentials for delegationCredentialId: ${delegationCredential.id} and ${failureCount} failures`
93+
);
9194
totalSuccess += successCount;
9295
totalFailures += failureCount;
9396
}
9497

98+
log.info(
99+
`Completed creating credentials for all delegation credentials. Total Success: ${totalSuccess}, Total Failures: ${totalFailures}`
100+
);
101+
95102
return {
96103
executedAt: new Date().toISOString(),
97104
success: totalSuccess,

apps/web/app/api/cron/selected-calendars/route.ts

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -36,8 +36,10 @@ async function handleCreateSelectedCalendars() {
3636
});
3737

3838
if (!allDelegationUserCredentials.length) {
39+
const message = "No delegation credentials found";
40+
log.info(message);
3941
return {
40-
message: "No delegation credentials found",
42+
message,
4143
success: 0,
4244
failures: 0,
4345
};
@@ -158,17 +160,19 @@ async function handleCreateSelectedCalendars() {
158160
);
159161
const successCount = results.filter((r) => r.status === "fulfilled").length;
160162
const failureCount = results.filter((r) => r.status === "rejected").length;
161-
163+
log.info(
164+
`Processed ${successCount} selected calendars for delegationCredentialId: ${delegationCredentialId} and ${failureCount} failures`
165+
);
162166
totalSuccess += successCount;
163167
totalFailures += failureCount;
164168
}
165169

166170
log.info(
167-
`Completed processing all selected calendars. Total Success: ${totalSuccess}, Total Failures: ${totalFailures}`
171+
`Completed creating selected calendars for all delegation credentials. Total Success: ${totalSuccess}, Total Failures: ${totalFailures}`
168172
);
169173

170174
return {
171-
message: "All selected calendars processed",
175+
message: "All selected calendars created",
172176
executedAt: new Date().toISOString(),
173177
success: totalSuccess,
174178
failures: totalFailures,

packages/app-store/googlecalendar/lib/CalendarService.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -826,7 +826,6 @@ export default class GoogleCalendarService implements Calendar {
826826
const primaryCalendar = this.filterPrimaryCalendar(cals);
827827
if (!primaryCalendar) return [];
828828
return [primaryCalendar.id];
829-
return cals.reduce((c, cal) => (cal.id ? [...c, cal.id] : c), [] as string[]);
830829
};
831830

832831
try {

packages/features/calendar-cache/calendar-cache.repository.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -145,6 +145,8 @@ export class CalendarCacheRepository implements ICalendarCacheRepository {
145145
},
146146
},
147147
update: {
148+
// Ensure that on update userId is also set(It handles the case where userId is not set for legacy records)
149+
userId,
148150
value,
149151
expiresAt: new Date(Date.now() + CACHING_TIME),
150152
},

0 commit comments

Comments
 (0)