- Introduced "Minhas Intenções" tab visible only to logged-in users. - Integrated MyPurchaseIntentionsPanel and useMyPurchaseIntentions hook. - Added tab badge showing count of pending intentions. - Extended session API to include user’s main character for downstream features.
4.8 KiB
🔍 Análise dos Erros Encontrados
📋 Problemas Identificados
1. ❌ Erro: "Decimal objects are not supported" (Linha 77-78)
Causa:
- O Prisma retorna campos
Decimal(PostgreSQL) como objetosPrisma.Decimal, não como números JavaScript - O Next.js não consegue serializar objetos
Decimalao passar dados de Server Components para Client Components - Apenas objetos "plain" (números, strings, arrays, objetos simples) podem ser serializados
Campos afetados:
price_pix(Decimal)current_bid_amount(Decimal)min_bid_increment(Decimal)initial_price_pix(Decimal)
Solução aplicada:
✅ Converter todos os campos Decimal para number usando Number() antes de retornar os dados
2. ⚠️ Warning: "Package postcss can't be external" (Linhas 15-20, 85-90, etc.)
Causa:
- Dependência transitiva (
sanitize-html→postcss) não está instalada diretamente - Next.js/Turbopack tenta externalizar o pacote mas não consegue resolvê-lo
Impacto:
- ⚠️ Apenas um warning, não quebra a aplicação
- Pode causar problemas em builds de produção
Soluções possíveis:
-
Instalar postcss diretamente (recomendado):
pnpm add postcss -
Adicionar ao package.json explicitamente:
"dependencies": { "postcss": "^8.4.0" }
3. ✅ Erro resolvido: "column does not exist" (Linha 45)
Status: ✅ RESOLVIDO
- A migração 014 foi executada com sucesso
- As colunas
min_bid_increment,initial_price_pix, etc. foram adicionadas - O erro não aparece mais nos logs recentes (linhas 75-76, 115-116 mostram queries funcionando)
🔧 Correções Implementadas
Arquivo: lib/prisma/queries/listings.ts
Antes:
return {
...listing,
price_gold_coins: listing.price_gold_coins ? Number(listing.price_gold_coins) : null,
// ❌ Campos Decimal não eram convertidos
};
Depois:
// Converter todos os campos Decimal e BigInt para números JavaScript
return {
...listing,
price_pix: listing.price_pix ? Number(listing.price_pix) : null,
current_bid_amount: listing.current_bid_amount ? Number(listing.current_bid_amount) : null,
min_bid_increment: listing.min_bid_increment ? Number(listing.min_bid_increment) : null,
initial_price_pix: listing.initial_price_pix ? Number(listing.initial_price_pix) : null,
price_gold_coins: listing.price_gold_coins ? Number(listing.price_gold_coins) : null,
initial_price_gold_coins: listing.initial_price_gold_coins ? Number(listing.initial_price_gold_coins) : null,
seller_character_name: character?.character_name || null,
} as Listing;
Funções corrigidas:
- ✅
createListing() - ✅
getListingById() - ✅
getListings() - ✅
updateListing() - ✅
placeBid()
📊 Resultado
✅ Resolvido:
- Erro de coluna não existente (migração executada)
- Erro de serialização Decimal (conversão implementada)
⚠️ Pendente (não crítico):
- Warning do postcss (pode ser ignorado ou resolvido instalando postcss)
🎯 Próximos Passos Recomendados
-
Instalar postcss (opcional, resolve warning):
pnpm add postcss -
Testar a aplicação:
- Verificar se a página do marketplace carrega corretamente
- Verificar se os preços são exibidos corretamente
- Testar criação de anúncios
- Testar leilões e lances
-
Monitorar logs:
- Verificar se o erro "Decimal objects are not supported" não aparece mais
- Verificar se as queries estão funcionando corretamente
🔍 Por que isso acontece?
Prisma + PostgreSQL + Decimal
O Prisma usa o tipo Decimal do Prisma para representar valores DECIMAL do PostgreSQL. Isso garante precisão decimal, mas cria objetos que não são serializáveis pelo React/Next.js.
Fluxo do problema:
PostgreSQL DECIMAL → Prisma.Decimal → ❌ Não serializável → Erro no React
Solução:
PostgreSQL DECIMAL → Prisma.Decimal → Number() → ✅ number (serializável)
Serialização no Next.js
O Next.js precisa serializar dados ao passar de Server Components para Client Components. Ele usa JSON serialization, que não suporta:
- Classes customizadas
- Objetos
Decimaldo Prisma - Funções
- Símbolos
- etc.
Apenas tipos primitivos JSON são suportados:
- ✅
string,number,boolean - ✅
null,undefined - ✅ Arrays e objetos simples