diff --git a/apps/desktop/src/index.css b/apps/desktop/src/index.css
index 879898e..244ef4d 100644
--- a/apps/desktop/src/index.css
+++ b/apps/desktop/src/index.css
@@ -21,7 +21,7 @@ body {
}
.btn {
- @apply inline-flex items-center justify-center rounded-lg border px-3 py-2 text-sm font-semibold transition;
+ @apply inline-flex items-center justify-center rounded-md border px-3 py-2 text-sm font-semibold transition;
}
.btn-primary {
@@ -49,7 +49,7 @@ body {
}
.tab-btn {
- @apply rounded-lg border border-transparent bg-transparent px-3 py-1.5 text-sm font-medium text-slate-700 hover:bg-slate-100;
+ @apply rounded-md border border-transparent bg-transparent px-3 py-1.5 text-sm font-medium text-slate-700 hover:bg-slate-100;
}
.tab-btn.active {
diff --git a/src/app/api/machines/session/route.ts b/src/app/api/machines/session/route.ts
index a6412d0..790f70f 100644
--- a/src/app/api/machines/session/route.ts
+++ b/src/app/api/machines/session/route.ts
@@ -6,6 +6,7 @@ import { api } from "@/convex/_generated/api"
import type { Id } from "@/convex/_generated/dataModel"
import { env } from "@/lib/env"
import { assertAuthenticatedSession } from "@/lib/auth-server"
+import { DEFAULT_TENANT_ID } from "@/lib/constants"
const MACHINE_CTX_COOKIE = "machine_ctx"
@@ -88,17 +89,56 @@ export async function GET(request: NextRequest) {
authEmail: string | null
}
+ let ensuredAssignedUserId = context.assignedUserId
+ let ensuredAssignedUserName = context.assignedUserName
+ let ensuredAssignedUserRole = context.assignedUserRole
+
+ if (!ensuredAssignedUserId && context.persona && context.assignedUserEmail) {
+ try {
+ const ensuredUser = (await client.mutation(api.users.ensureUser, {
+ tenantId: context.tenantId ?? DEFAULT_TENANT_ID,
+ email: context.assignedUserEmail,
+ name: context.assignedUserName ?? context.assignedUserEmail,
+ avatarUrl: undefined,
+ role: (context.assignedUserRole ?? context.persona ?? "collaborator").toUpperCase(),
+ companyId: context.companyId ?? undefined,
+ })) as { _id?: Id<"users">; name?: string | null; role?: string | null } | null
+
+ if (ensuredUser?._id) {
+ ensuredAssignedUserId = ensuredUser._id as string
+ ensuredAssignedUserName = ensuredUser.name ?? context.assignedUserName
+ ensuredAssignedUserRole = ensuredUser.role ?? context.assignedUserRole
+
+ await client.mutation(api.machines.updatePersona, {
+ machineId: machineId as Id<"machines">,
+ persona: context.persona ?? undefined,
+ assignedUserId: ensuredUser._id as Id<"users">,
+ assignedUserEmail: context.assignedUserEmail,
+ assignedUserName: ensuredAssignedUserName ?? undefined,
+ assignedUserRole: (ensuredAssignedUserRole ?? context.persona ?? "collaborator").toUpperCase(),
+ })
+ }
+ } catch (error) {
+ console.error("[machines.session] Falha ao garantir usuário vinculado", error)
+ }
+ }
+
const responsePayload = {
machineId: context.id,
persona: context.persona,
- assignedUserId: context.assignedUserId,
+ assignedUserId: ensuredAssignedUserId,
assignedUserEmail: context.assignedUserEmail,
- assignedUserName: context.assignedUserName,
- assignedUserRole: context.assignedUserRole,
+ assignedUserName: ensuredAssignedUserName,
+ assignedUserRole: ensuredAssignedUserRole,
}
const response = NextResponse.json({
- machine: context,
+ machine: {
+ ...context,
+ assignedUserId: ensuredAssignedUserId ?? null,
+ assignedUserName: ensuredAssignedUserName ?? null,
+ assignedUserRole: ensuredAssignedUserRole ?? null,
+ },
cookie: responsePayload,
})
diff --git a/src/components/portal/portal-shell.tsx b/src/components/portal/portal-shell.tsx
index 2b937e1..07462a3 100644
--- a/src/components/portal/portal-shell.tsx
+++ b/src/components/portal/portal-shell.tsx
@@ -79,7 +79,7 @@ export function PortalShell({ children }: PortalShellProps) {