- 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.
166 lines
4.8 KiB
Markdown
166 lines
4.8 KiB
Markdown
# 🔍 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 objetos `Prisma.Decimal`, não como números JavaScript
|
|
- O Next.js não consegue serializar objetos `Decimal` ao 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:**
|
|
1. **Instalar postcss diretamente** (recomendado):
|
|
```bash
|
|
pnpm add postcss
|
|
```
|
|
|
|
2. **Adicionar ao package.json** explicitamente:
|
|
```json
|
|
"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:**
|
|
```typescript
|
|
return {
|
|
...listing,
|
|
price_gold_coins: listing.price_gold_coins ? Number(listing.price_gold_coins) : null,
|
|
// ❌ Campos Decimal não eram convertidos
|
|
};
|
|
```
|
|
|
|
**Depois:**
|
|
```typescript
|
|
// 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:
|
|
1. Erro de coluna não existente (migração executada)
|
|
2. Erro de serialização Decimal (conversão implementada)
|
|
|
|
### ⚠️ Pendente (não crítico):
|
|
1. Warning do postcss (pode ser ignorado ou resolvido instalando postcss)
|
|
|
|
---
|
|
|
|
## 🎯 Próximos Passos Recomendados
|
|
|
|
1. **Instalar postcss** (opcional, resolve warning):
|
|
```bash
|
|
pnpm add postcss
|
|
```
|
|
|
|
2. **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
|
|
|
|
3. **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 `Decimal` do Prisma
|
|
- Funções
|
|
- Símbolos
|
|
- etc.
|
|
|
|
Apenas tipos primitivos JSON são suportados:
|
|
- ✅ `string`, `number`, `boolean`
|
|
- ✅ `null`, `undefined`
|
|
- ✅ Arrays e objetos simples
|
|
|
|
---
|
|
|
|
## 📚 Referências
|
|
|
|
- [Prisma Decimal Type](https://www.prisma.io/docs/concepts/components/prisma-client/working-with-fields/working-with-decimal-numbers)
|
|
- [Next.js Serialization](https://nextjs.org/docs/app/building-your-application/data-fetching/patterns#async-server-components)
|
|
- [React Server Components](https://react.dev/reference/rsc/server-components)
|
|
|
|
|
|
|
|
|
|
|