aethex-forge/api/foundation/mentorships.ts
Builder.io fd8ae89af5 Update imports batch 15
cgen-08c6a0301e1a4862a149e49c643a28d2
2025-11-16 05:03:22 +00:00

115 lines
3.3 KiB
TypeScript

import type { VercelRequest, VercelResponse } from "@vercel/node";
import { getAdminClient } from "../_supabase.js";
export default async function handler(req: VercelRequest, res: VercelResponse) {
const admin = getAdminClient();
// Only authenticated requests
const authHeader = req.headers.authorization;
if (!authHeader) {
return res.status(401).json({ error: "Unauthorized" });
}
const token = authHeader.replace("Bearer ", "");
const {
data: { user },
error: authError,
} = await admin.auth.getUser(token);
if (authError || !user) {
return res.status(401).json({ error: "Invalid token" });
}
try {
if (req.method === "GET") {
// Get user's mentorships (as mentee or mentor)
const role = req.query.role as string | undefined; // 'mentor' or 'mentee'
let mentorships;
if (role === "mentor") {
const { data: m } = await admin
.from("foundation_mentorships")
.select(
`
*,
mentee:user_profiles!mentee_id(id, full_name, avatar_url, email)
`,
)
.eq("mentor_id", user.id)
.order("created_at", { ascending: false });
mentorships = m;
} else if (role === "mentee") {
const { data: m } = await admin
.from("foundation_mentorships")
.select(
`
*,
mentor:user_profiles!mentor_id(id, full_name, avatar_url, email)
`,
)
.eq("mentee_id", user.id)
.order("created_at", { ascending: false });
mentorships = m;
} else {
// Get both roles
const { data: asMentor } = await admin
.from("foundation_mentorships")
.select(
`*,
mentee:user_profiles!mentee_id(id, full_name, avatar_url, email)`,
)
.eq("mentor_id", user.id);
const { data: asMentee } = await admin
.from("foundation_mentorships")
.select(
`*,
mentor:user_profiles!mentor_id(id, full_name, avatar_url, email)`,
)
.eq("mentee_id", user.id);
return res.status(200).json({
as_mentor: asMentor || [],
as_mentee: asMentee || [],
});
}
return res.status(200).json({
mentorships: mentorships || [],
});
}
if (req.method === "POST") {
// Request a mentor
const { mentor_id } = req.body;
if (!mentor_id) {
return res.status(400).json({ error: "mentor_id required" });
}
const { data: mentorship, error: createError } = await admin
.from("foundation_mentorships")
.insert({
mentor_id,
mentee_id: user.id,
status: "pending",
requested_at: new Date().toISOString(),
})
.select()
.single();
if (createError) {
if (createError.code === "23505") {
return res.status(400).json({ error: "Mentorship already exists" });
}
return res.status(500).json({ error: createError.message });
}
return res.status(201).json(mentorship);
}
return res.status(405).json({ error: "Method not allowed" });
} catch (error: any) {
return res.status(500).json({ error: error?.message || "Server error" });
}
}