// convex/admin.ts
export const storeUser = mutation({
args: {
user: v.object({
email: v.string(),
name: v.optional(v.string()),
image: v.optional(v.string()),
role: v.optional(v.string()),
password: v.optional(v.string()), // Include password for students
}),
},
handler: async ({ db }, { user }) => {
const name = user.name || "Default Name"; // Provide a default value if name is undefined
if (user.role === "admin") {
await db.insert("admin", {
email: user.email,
name: name,
tokenIdentifier: "", // Initialize with an empty string or generate a token
});
} else if (user.role === "student") {
await db.insert("students", {
email: user.email,
role: user.role,
password: user.password || "", // Ensure password is provided for students
});
} else {
await db.insert("users", user);
}
},
});
// Define a common user type
export const signUpAdmin = mutation({
args: {
email: v.string(),
name: v.string(),
password: v.string(),
},
handler: async ({ db }, { email, name, password }) => {
// Hash the password
const hashedPassword = await bcrypt.hash(password, 10);
// Insert the admin user into the admin table
await db.insert("admin", {
email,
name,
password: hashedPassword,
tokenIdentifier: "", // Initialize with an empty string or generate a token
} as { email: string; name: string; password: string; tokenIdentifier: string });
},
});