callbacks: {
async createOrUpdateUser(ctx, args) {
let userId: Id<"users">;
const profile = args.profile as ExtendedProfile;
const provider = args.provider;
const existingUser = await ctx.db.query("users")
.filter((q) => q.eq(q.field("email"), args.profile.email))
.first();
if (existingUser) {
userId = existingUser._id as Id<"users">;
await ctx.db.patch<Id<"users">>(existingUser._id, {
providers: [...existingUser.providers, provider.id],
});
} else {
const newUser = await ctx.db.insert("users", {
email: profile?.email,
emailVerified: true,
emailVerificationTime: new Date().getTime(),
name: profile?.name,
firstName: profile?.given_name,
lastName: profile?.family_name,
image: profile?.image,
isOnboardingComplete: false,
orgIds: [],
providers: [provider.id],
tokenIdentifier: "",
});
userId = newUser as Id<"users">;
}
return userId;
},
},
callbacks: {
async createOrUpdateUser(ctx, args) {
let userId: Id<"users">;
const profile = args.profile as ExtendedProfile;
const provider = args.provider;
const existingUser = await ctx.db.query("users")
.filter((q) => q.eq(q.field("email"), args.profile.email))
.first();
if (existingUser) {
userId = existingUser._id as Id<"users">;
await ctx.db.patch<Id<"users">>(existingUser._id, {
providers: [...existingUser.providers, provider.id],
});
} else {
const newUser = await ctx.db.insert("users", {
email: profile?.email,
emailVerified: true,
emailVerificationTime: new Date().getTime(),
name: profile?.name,
firstName: profile?.given_name,
lastName: profile?.family_name,
image: profile?.image,
isOnboardingComplete: false,
orgIds: [],
providers: [provider.id],
tokenIdentifier: "",
});
userId = newUser as Id<"users">;
}
return userId;
},
},