-
Notifications
You must be signed in to change notification settings - Fork 0
fix: handle collective multiple host on destinationCalendar #2
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: enhance-collective-scheduling-foundation
Are you sure you want to change the base?
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change | ||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
|
@@ -84,7 +84,7 @@ export default class GoogleCalendarService implements Calendar { | |||||||||||||
| }; | ||||||||||||||
| }; | ||||||||||||||
|
|
||||||||||||||
| async createEvent(calEventRaw: CalendarEvent): Promise<NewCalendarEventType> { | ||||||||||||||
| async createEvent(calEventRaw: CalendarEvent, credentialId: number): Promise<NewCalendarEventType> { | ||||||||||||||
| const eventAttendees = calEventRaw.attendees.map(({ id: _id, ...rest }) => ({ | ||||||||||||||
| ...rest, | ||||||||||||||
| responseStatus: "accepted", | ||||||||||||||
|
|
@@ -97,6 +97,10 @@ export default class GoogleCalendarService implements Calendar { | |||||||||||||
| responseStatus: "accepted", | ||||||||||||||
| })) || []; | ||||||||||||||
| return new Promise(async (resolve, reject) => { | ||||||||||||||
| const [mainHostDestinationCalendar] = | ||||||||||||||
| calEventRaw?.destinationCalendar && calEventRaw?.destinationCalendar.length > 0 | ||||||||||||||
| ? calEventRaw.destinationCalendar | ||||||||||||||
| : []; | ||||||||||||||
| const myGoogleAuth = await this.auth.getToken(); | ||||||||||||||
| const payload: calendar_v3.Schema$Event = { | ||||||||||||||
| summary: calEventRaw.title, | ||||||||||||||
|
|
@@ -115,8 +119,8 @@ export default class GoogleCalendarService implements Calendar { | |||||||||||||
| id: String(calEventRaw.organizer.id), | ||||||||||||||
| responseStatus: "accepted", | ||||||||||||||
| organizer: true, | ||||||||||||||
| email: calEventRaw.destinationCalendar?.externalId | ||||||||||||||
| ? calEventRaw.destinationCalendar.externalId | ||||||||||||||
| email: mainHostDestinationCalendar?.externalId | ||||||||||||||
| ? mainHostDestinationCalendar.externalId | ||||||||||||||
| : calEventRaw.organizer.email, | ||||||||||||||
| }, | ||||||||||||||
| ...eventAttendees, | ||||||||||||||
|
|
@@ -138,13 +142,16 @@ export default class GoogleCalendarService implements Calendar { | |||||||||||||
| const calendar = google.calendar({ | ||||||||||||||
| version: "v3", | ||||||||||||||
| }); | ||||||||||||||
| const selectedCalendar = calEventRaw.destinationCalendar?.externalId | ||||||||||||||
| ? calEventRaw.destinationCalendar.externalId | ||||||||||||||
| : "primary"; | ||||||||||||||
| // Find in calEventRaw.destinationCalendar the one with the same credentialId | ||||||||||||||
|
|
||||||||||||||
| const selectedCalendar = calEventRaw.destinationCalendar?.find( | ||||||||||||||
| (cal) => cal.credentialId === credentialId | ||||||||||||||
| )?.externalId; | ||||||||||||||
|
|
||||||||||||||
| calendar.events.insert( | ||||||||||||||
| { | ||||||||||||||
| auth: myGoogleAuth, | ||||||||||||||
| calendarId: selectedCalendar, | ||||||||||||||
| calendarId: selectedCalendar || "primary", | ||||||||||||||
| requestBody: payload, | ||||||||||||||
| conferenceDataVersion: 1, | ||||||||||||||
| sendUpdates: "none", | ||||||||||||||
|
|
@@ -188,6 +195,8 @@ export default class GoogleCalendarService implements Calendar { | |||||||||||||
|
|
||||||||||||||
| async updateEvent(uid: string, event: CalendarEvent, externalCalendarId: string): Promise<any> { | ||||||||||||||
| return new Promise(async (resolve, reject) => { | ||||||||||||||
| const [mainHostDestinationCalendar] = | ||||||||||||||
| event?.destinationCalendar && event?.destinationCalendar.length > 0 ? event.destinationCalendar : []; | ||||||||||||||
| const myGoogleAuth = await this.auth.getToken(); | ||||||||||||||
| const eventAttendees = event.attendees.map(({ ...rest }) => ({ | ||||||||||||||
| ...rest, | ||||||||||||||
|
|
@@ -216,8 +225,8 @@ export default class GoogleCalendarService implements Calendar { | |||||||||||||
| id: String(event.organizer.id), | ||||||||||||||
| organizer: true, | ||||||||||||||
| responseStatus: "accepted", | ||||||||||||||
| email: event.destinationCalendar?.externalId | ||||||||||||||
| ? event.destinationCalendar.externalId | ||||||||||||||
| email: mainHostDestinationCalendar?.externalId | ||||||||||||||
| ? mainHostDestinationCalendar.externalId | ||||||||||||||
| : event.organizer.email, | ||||||||||||||
| }, | ||||||||||||||
| ...(eventAttendees as any), | ||||||||||||||
|
|
@@ -244,7 +253,7 @@ export default class GoogleCalendarService implements Calendar { | |||||||||||||
|
|
||||||||||||||
| const selectedCalendar = externalCalendarId | ||||||||||||||
| ? externalCalendarId | ||||||||||||||
| : event.destinationCalendar?.externalId; | ||||||||||||||
| : event.destinationCalendar?.find((cal) => cal.externalId === externalCalendarId)?.externalId; | ||||||||||||||
|
|
||||||||||||||
| calendar.events.update( | ||||||||||||||
| { | ||||||||||||||
|
|
@@ -303,7 +312,9 @@ export default class GoogleCalendarService implements Calendar { | |||||||||||||
| }); | ||||||||||||||
|
|
||||||||||||||
| const defaultCalendarId = "primary"; | ||||||||||||||
| const calendarId = externalCalendarId ? externalCalendarId : event.destinationCalendar?.externalId; | ||||||||||||||
| const calendarId = externalCalendarId | ||||||||||||||
| ? externalCalendarId | ||||||||||||||
| : event.destinationCalendar?.find((cal) => cal.externalId === externalCalendarId)?.externalId; | ||||||||||||||
|
Comment on lines
+315
to
+317
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Same logic bug as in updateEvent. The 🔎 Proposed fix const calendarId = externalCalendarId
- ? externalCalendarId
- : event.destinationCalendar?.find((cal) => cal.externalId === externalCalendarId)?.externalId;
+ ? externalCalendarId
+ : undefined;📝 Committable suggestion
Suggested change
🤖 Prompt for AI Agents |
||||||||||||||
|
|
||||||||||||||
| calendar.events.delete( | ||||||||||||||
| { | ||||||||||||||
|
|
||||||||||||||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Logic bug: calendar lookup is ineffective.
When
externalCalendarIdis truthy, it's returned directly (correct). But when it's falsy, the.find()comparescal.externalId === externalCalendarIdwhereexternalCalendarIdis falsy (e.g.,nullorundefined), which won't match any calendar with a validexternalId. This makes the fallback branch ineffective.If the intent is to find a calendar by some other criteria when
externalCalendarIdis not provided, the logic needs to be revised. If the intent is to just useexternalCalendarIdwhen provided and otherwise leave it undefined, then the.find()clause is dead code.🔎 Proposed fix (assuming you want undefined when not provided)
Or if you need to resolve from destinationCalendar by credentialId (similar to createEvent), you'd need to pass
credentialIdtoupdateEventas well.📝 Committable suggestion
🤖 Prompt for AI Agents