aethex-forge/api/staff/members.ts
Builder.io 5fd2bf5890 Fix incorrect import path in award.ts
cgen-b4dd690966fb4893b659ba59f8788e35
2025-11-16 03:31:26 +00:00

108 lines
2.7 KiB
TypeScript

import { createClient } from "@supabase/supabase-js";
const supabase = createClient(
process.env.SUPABASE_URL || "",
process.env.SUPABASE_SERVICE_ROLE || "",
);
interface StaffMember {
id: string;
user_id: string;
email: string;
full_name: string;
position: string;
department: string;
phone: string;
avatar_url?: string;
role: "owner" | "admin" | "founder" | "staff" | "employee";
is_active: boolean;
hired_date?: string;
created_at: string;
updated_at: string;
}
export default async function handler(req: any, res: any) {
res.setHeader("Access-Control-Allow-Origin", "*");
res.setHeader("Access-Control-Allow-Methods", "GET, POST, OPTIONS");
res.setHeader("Access-Control-Allow-Headers", "Content-Type, Authorization");
if (req.method === "OPTIONS") {
return res.status(200).end();
}
try {
// GET /api/staff/members - List all staff members
if (req.method === "GET") {
const { data, error } = await supabase
.from("staff_members")
.select("*")
.order("full_name", { ascending: true });
if (error) {
console.error("Error fetching staff members:", error);
return res.status(500).json({
error: "Failed to fetch staff members",
details: error.message,
});
}
return res.status(200).json(data || []);
}
// POST /api/staff/members - Create new staff member
if (req.method === "POST") {
const {
user_id,
email,
full_name,
position,
department,
phone,
avatar_url,
role,
hired_date,
} = req.body;
if (!email || !full_name) {
return res.status(400).json({
error: "Missing required fields: email, full_name",
});
}
const { data, error } = await supabase
.from("staff_members")
.insert([
{
user_id: user_id || null,
email,
full_name,
position: position || null,
department: department || null,
phone: phone || null,
avatar_url: avatar_url || null,
role: role || "employee",
hired_date: hired_date || null,
},
])
.select();
if (error) {
console.error("Error creating staff member:", error);
return res.status(500).json({
error: "Failed to create staff member",
details: error.message,
});
}
return res.status(201).json(data[0]);
}
return res.status(405).json({ error: "Method not allowed" });
} catch (error: any) {
console.error("Server error:", error);
return res.status(500).json({
error: "Internal server error",
details: error.message,
});
}
}