MCPcopy Create free account
hub / github.com/WebDevSimplified/calendly-clone / createCalendarEvent

Function createCalendarEvent

src/server/googleCalendar.ts:43–91  ·  view source on GitHub ↗
({
  clerkUserId,
  guestName,
  guestEmail,
  startTime,
  guestNotes,
  durationInMinutes,
  eventName,
}: {
  clerkUserId: string
  guestName: string
  guestEmail: string
  startTime: Date
  guestNotes?: string | null
  durationInMinutes: number
  eventName: string
})

Source from the content-addressed store, hash-verified

41}
42
43export async function createCalendarEvent({
44 clerkUserId,
45 guestName,
46 guestEmail,
47 startTime,
48 guestNotes,
49 durationInMinutes,
50 eventName,
51}: {
52 clerkUserId: string
53 guestName: string
54 guestEmail: string
55 startTime: Date
56 guestNotes?: string | null
57 durationInMinutes: number
58 eventName: string
59}) {
60 const oAuthClient = await getOAuthClient(clerkUserId)
61 const calendarUser = await clerkClient().users.getUser(clerkUserId)
62 if (calendarUser.primaryEmailAddress == null) {
63 throw new Error("Clerk user has no email")
64 }
65
66 const calendarEvent = await google.calendar("v3").events.insert({
67 calendarId: "primary",
68 auth: oAuthClient,
69 sendUpdates: "all",
70 requestBody: {
71 attendees: [
72 { email: guestEmail, displayName: guestName },
73 {
74 email: calendarUser.primaryEmailAddress.emailAddress,
75 displayName: calendarUser.fullName,
76 responseStatus: "accepted",
77 },
78 ],
79 description: guestNotes ? `Additional Details: ${guestNotes}` : undefined,
80 start: {
81 dateTime: startTime.toISOString(),
82 },
83 end: {
84 dateTime: addMinutes(startTime, durationInMinutes).toISOString(),
85 },
86 summary: `${guestName} + ${calendarUser.fullName}: ${eventName}`,
87 },
88 })
89
90 return calendarEvent.data
91}
92
93async function getOAuthClient(clerkUserId: string) {
94 const token = await clerkClient().users.getUserOauthAccessToken(

Callers 1

createMeetingFunction · 0.90

Calls 1

getOAuthClientFunction · 0.85

Tested by

no test coverage detected