fix(profile): corrige persistencia da remocao de avatar

O Better Auth usa cookie cache de 5 minutos para a sessao.
Quando o avatar era removido via Prisma, o cache ainda tinha
o avatar antigo. Agora usamos auth.api.updateUser para
atualizar o usuario e invalidar o cache da sessao.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
esdrasrenan 2025-12-15 22:40:06 -03:00
parent 92954b45c7
commit a6af4aa580

View file

@ -5,8 +5,10 @@
*/ */
import { NextRequest, NextResponse } from "next/server" import { NextRequest, NextResponse } from "next/server"
import { headers } from "next/headers"
import { getServerSession } from "@/lib/auth-server" import { getServerSession } from "@/lib/auth-server"
import { auth } from "@/lib/auth"
import { prisma } from "@/lib/prisma" import { prisma } from "@/lib/prisma"
import { DEFAULT_TENANT_ID } from "@/lib/constants" import { DEFAULT_TENANT_ID } from "@/lib/constants"
import { createConvexClient } from "@/server/convex-client" import { createConvexClient } from "@/server/convex-client"
@ -73,12 +75,21 @@ export async function POST(request: NextRequest) {
return NextResponse.json({ error: "Erro ao obter URL do avatar" }, { status: 500 }) return NextResponse.json({ error: "Erro ao obter URL do avatar" }, { status: 500 })
} }
// Atualiza o usuário no banco // Usa updateUser do Better Auth para invalidar o cache da sessao
await prisma.authUser.update({ const headerList = await headers()
where: { id: session.user.id }, const updateResult = await auth.api.updateUser({
data: { avatarUrl }, headers: headerList,
body: { avatarUrl },
}) })
if (!updateResult) {
// Fallback: atualiza diretamente no Prisma
await prisma.authUser.update({
where: { id: session.user.id },
data: { avatarUrl },
})
}
// Sincroniza com o Convex // Sincroniza com o Convex
try { try {
const tenantId = session.user.tenantId ?? DEFAULT_TENANT_ID const tenantId = session.user.tenantId ?? DEFAULT_TENANT_ID
@ -109,12 +120,21 @@ export async function DELETE() {
return NextResponse.json({ error: "Não autorizado" }, { status: 401 }) return NextResponse.json({ error: "Não autorizado" }, { status: 401 })
} }
// Remove a imagem do usuário (volta ao padrão) // Usa updateUser do Better Auth para invalidar o cache da sessao
await prisma.authUser.update({ const headerList = await headers()
where: { id: session.user.id }, const updateResult = await auth.api.updateUser({
data: { avatarUrl: null }, headers: headerList,
body: { avatarUrl: null },
}) })
if (!updateResult) {
// Fallback: atualiza diretamente no Prisma
await prisma.authUser.update({
where: { id: session.user.id },
data: { avatarUrl: null },
})
}
// Sincroniza com o Convex // Sincroniza com o Convex
try { try {
const convex = createConvexClient() const convex = createConvexClient()