feat: sync convex companies and dashboard metrics
This commit is contained in:
parent
4f52114b48
commit
7a3eca9361
10 changed files with 356 additions and 19 deletions
|
|
@ -4,6 +4,7 @@ import { prisma } from "@/lib/prisma"
|
|||
import { assertStaffSession } from "@/lib/auth-server"
|
||||
import { isAdmin } from "@/lib/authz"
|
||||
import { PrismaClientKnownRequestError } from "@prisma/client/runtime/library"
|
||||
import { removeConvexCompany, syncConvexCompany } from "@/server/companies-sync"
|
||||
|
||||
export const runtime = "nodejs"
|
||||
|
||||
|
|
@ -45,6 +46,19 @@ export async function PATCH(request: Request, { params }: { params: Promise<{ id
|
|||
// Atualize o client quando possível; por ora liberamos o shape dinamicamente.
|
||||
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
||||
const company = await prisma.company.update({ where: { id }, data: updates as any })
|
||||
|
||||
if (company.provisioningCode) {
|
||||
const synced = await syncConvexCompany({
|
||||
tenantId: company.tenantId,
|
||||
slug: company.slug,
|
||||
name: company.name,
|
||||
provisioningCode: company.provisioningCode,
|
||||
})
|
||||
if (!synced) {
|
||||
console.warn("[admin.companies] Convex não configurado; atualização aplicada apenas no Prisma.")
|
||||
}
|
||||
}
|
||||
|
||||
return NextResponse.json({ company })
|
||||
} catch (error) {
|
||||
console.error("Failed to update company", error)
|
||||
|
|
@ -65,7 +79,7 @@ export async function DELETE(_: Request, { params }: { params: Promise<{ id: str
|
|||
|
||||
const company = await prisma.company.findUnique({
|
||||
where: { id },
|
||||
select: { id: true, tenantId: true, name: true },
|
||||
select: { id: true, tenantId: true, name: true, slug: true },
|
||||
})
|
||||
|
||||
if (!company) {
|
||||
|
|
@ -90,6 +104,16 @@ export async function DELETE(_: Request, { params }: { params: Promise<{ id: str
|
|||
return { detachedUsers: users.count, detachedTickets: tickets.count }
|
||||
})
|
||||
|
||||
if (company.slug) {
|
||||
const removed = await removeConvexCompany({
|
||||
tenantId: company.tenantId,
|
||||
slug: company.slug,
|
||||
})
|
||||
if (!removed) {
|
||||
console.warn("[admin.companies] Convex não configurado; empresa removida apenas no Prisma.")
|
||||
}
|
||||
}
|
||||
|
||||
return NextResponse.json({ ok: true, ...result })
|
||||
} catch (error) {
|
||||
if (error instanceof PrismaClientKnownRequestError && error.code === "P2003") {
|
||||
|
|
|
|||
|
|
@ -5,6 +5,7 @@ import { prisma } from "@/lib/prisma"
|
|||
import { assertStaffSession } from "@/lib/auth-server"
|
||||
import { isAdmin } from "@/lib/authz"
|
||||
import { PrismaClientKnownRequestError } from "@prisma/client/runtime/library"
|
||||
import { syncConvexCompany } from "@/server/companies-sync"
|
||||
|
||||
export const runtime = "nodejs"
|
||||
|
||||
|
|
@ -64,6 +65,19 @@ export async function POST(request: Request) {
|
|||
address: address ? String(address) : null,
|
||||
},
|
||||
})
|
||||
|
||||
if (company.provisioningCode) {
|
||||
const synced = await syncConvexCompany({
|
||||
tenantId: company.tenantId,
|
||||
slug: company.slug,
|
||||
name: company.name,
|
||||
provisioningCode: company.provisioningCode,
|
||||
})
|
||||
if (!synced) {
|
||||
console.warn("[admin.companies] Convex não configurado; empresa criada apenas no Prisma.")
|
||||
}
|
||||
}
|
||||
|
||||
return NextResponse.json({ company })
|
||||
} catch (error) {
|
||||
console.error("Failed to create company", error)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue