aethex-forge/api/ethos/artist-services.ts
Builder.io c0d0e86f58 completionId: cgen-e8d5ef83b3b04e58af567ea411f26026
cgen-e8d5ef83b3b04e58af567ea411f26026
2025-11-13 07:06:42 +00:00

73 lines
2 KiB
TypeScript

import { createClient } from "@supabase/supabase-js";
const supabase = createClient(
process.env.VITE_SUPABASE_URL || "",
process.env.SUPABASE_SERVICE_ROLE || "",
);
export default async function handler(req: any, res: any) {
const { method, query } = req;
try {
if (method === "GET") {
const artistId = query.artist_id;
if (!artistId) {
return res
.status(400)
.json({ error: "artist_id query parameter is required" });
}
const { data: artist, error: artistError } = await supabase
.from("ethos_artist_profiles")
.select(
`
user_id,
for_hire,
verified,
skills,
bio,
turnaround_days,
price_list,
sample_price_track,
sample_price_sfx,
sample_price_score,
user_profiles(id, full_name, avatar_url, email)
`,
)
.eq("user_id", artistId)
.single();
if (artistError && artistError.code !== "PGRST116") throw artistError;
if (!artist || !artist.for_hire) {
return res
.status(404)
.json({ error: "Artist not found or not available for hire" });
}
return res.json({
user_id: artist.user_id,
name: artist.user_profiles?.[0]?.full_name,
avatar_url: artist.user_profiles?.[0]?.avatar_url,
email: artist.user_profiles?.[0]?.email,
bio: artist.bio,
verified: artist.verified,
skills: artist.skills,
turnaround_days: artist.turnaround_days,
services: {
price_list: artist.price_list || {
track_custom: artist.sample_price_track,
sfx_pack: artist.sample_price_sfx,
full_score: artist.sample_price_score,
},
},
});
} else {
return res.status(405).json({ error: "Method not allowed" });
}
} catch (err: any) {
console.error("[Ethos Artist Services]", err);
res.status(500).json({ error: err.message });
}
}