diff --git a/app/api/submit/settings/route.ts b/app/api/submit/settings/route.ts index 76ef3925..fc5e2786 100644 --- a/app/api/submit/settings/route.ts +++ b/app/api/submit/settings/route.ts @@ -128,13 +128,8 @@ export async function POST(req: Request) { if (!setting_title) return NextResponse.json({ error: "Missing required: setting_title" }, { status: 400 }); // Derive uploader from the authenticated user (ignore any spoofed value in body) - const me = await dxGET("/users/me?fields=username,display_name,first_name,last_name,email", bearer); - const uploader = - me?.display_name || - me?.username || - [me?.first_name, me?.last_name].filter(Boolean).join(" ") || - me?.email || - "user"; + const me = await dxGET("/users/me?fields=id,username", bearer); + const uploader = me?.username || "user"; // Relations & numerics const mat = body?.mat ?? null; @@ -148,7 +143,7 @@ export async function POST(req: Request) { const setting_notes = String(body?.setting_notes || "").trim(); // Fiber-only - const laser_soft = target === "settings_fiber" ? body?.laser_soft ?? null : undefined; + const laser_soft = body?.laser_soft ?? null; const repeat_all = target === "settings_fiber" ? num(body?.repeat_all, null) : undefined; // Upload / accept existing file ids @@ -162,6 +157,7 @@ export async function POST(req: Request) { const up = await uploadFile(photoFile, (photoFile as File).name, bearer, { folderNamePath: folderPathFor(target, "photo"), title: setting_title, + owner: me?.id || null, }); photo_id = up.id; } @@ -197,6 +193,7 @@ export async function POST(req: Request) { photo: photo_id, screen: screen_id ?? null, + laser_soft: laser_soft, mat, mat_coat, @@ -217,7 +214,6 @@ export async function POST(req: Request) { }; if (target === "settings_fiber") { - payload.laser_soft = laser_soft ?? null; payload.repeat_all = repeat_all ?? null; } diff --git a/app/settings/co2-galvo/page.tsx b/app/settings/co2-galvo/page.tsx index a9009834..7630ed49 100644 --- a/app/settings/co2-galvo/page.tsx +++ b/app/settings/co2-galvo/page.tsx @@ -6,6 +6,7 @@ import Link from "next/link"; import Image from "next/image"; type Owner = { + username?: string | null; id?: string | number; first_name?: string | null; last_name?: string | null; @@ -36,7 +37,7 @@ export default function CO2GalvoSettingsPage() { "submission_id", "setting_title", "uploader", - "owner.id", + "owner.id", "owner.username", "owner.first_name", "owner.last_name", "owner.email", @@ -64,8 +65,7 @@ export default function CO2GalvoSettingsPage() { const ownerLabel = (o?: Owner) => { if (!o) return "—"; - const name = [o.first_name, o.last_name].filter(Boolean).join(" ").trim(); - return name || o.email || "—"; + return o.username || "—"; }; const highlight = (text?: string) => { diff --git a/app/settings/co2-gantry/page.tsx b/app/settings/co2-gantry/page.tsx index b3517587..367f42ae 100644 --- a/app/settings/co2-gantry/page.tsx +++ b/app/settings/co2-gantry/page.tsx @@ -6,6 +6,7 @@ import Link from "next/link"; import Image from "next/image"; type Owner = { + username?: string | null; id?: string | number; first_name?: string | null; last_name?: string | null; @@ -36,7 +37,7 @@ export default function CO2GantrySettingsPage() { "submission_id", "setting_title", "uploader", - "owner.id", + "owner.id", "owner.username", "owner.first_name", "owner.last_name", "owner.email", @@ -65,8 +66,7 @@ export default function CO2GantrySettingsPage() { const ownerLabel = (o?: Owner) => { if (!o) return "—"; - const name = [o.first_name, o.last_name].filter(Boolean).join(" ").trim(); - return name || o.email || "—"; + return o.username || "—"; }; const highlight = (text?: string) => { diff --git a/app/settings/fiber/page.tsx b/app/settings/fiber/page.tsx index 260e24db..a1cae2c6 100644 --- a/app/settings/fiber/page.tsx +++ b/app/settings/fiber/page.tsx @@ -31,7 +31,7 @@ export default function FiberSettingsPage() { "submission_id", "setting_title", "uploader", - "owner.display_name", + "owner.username", "owner.first_name", "owner.last_name", "owner.email", @@ -55,6 +55,8 @@ export default function FiberSettingsPage() { const ownerName = (row: any) => { const o = row?.owner || {}; + return o.username || "—"; + }; return ( o.display_name || [o.first_name, o.last_name].filter(Boolean).join(" ") || diff --git a/app/settings/uv/page.tsx b/app/settings/uv/page.tsx index fe3d7831..cd6e5ea9 100644 --- a/app/settings/uv/page.tsx +++ b/app/settings/uv/page.tsx @@ -6,6 +6,7 @@ import Link from "next/link"; import Image from "next/image"; type Owner = { + username?: string | null; id?: string | number; first_name?: string | null; last_name?: string | null; @@ -37,7 +38,7 @@ export default function UVSettingsPage() { "setting_title", "uploader", // owner (M2O) – minimal, safe fields - "owner.id", + "owner.id", "owner.username", "owner.first_name", "owner.last_name", "owner.email", @@ -65,8 +66,7 @@ export default function UVSettingsPage() { const ownerLabel = (o?: Owner) => { if (!o) return "—"; - const name = [o.first_name, o.last_name].filter(Boolean).join(" ").trim(); - return name || o.email || "—"; + return o.username || "—"; }; const highlight = (text?: string) => { diff --git a/components/common/OwnerBadge.tsx b/components/common/OwnerBadge.tsx index 5360c04e..6fca2256 100644 --- a/components/common/OwnerBadge.tsx +++ b/components/common/OwnerBadge.tsx @@ -5,13 +5,13 @@ export default function OwnerBadge({ uploader, className = '', }: { - owner?: { id?: string | number; display_name?: string } | null; + owner?: { id?: string | number; username?: string } | null; uploader?: string | null; className?: string; }) { const hasOwner = !!owner?.id; const label = hasOwner ? 'Owner' : 'Uploader'; - const name = owner?.display_name ?? uploader ?? '—'; + const name = owner?.username ?? uploader ?? '—'; return (