Para Desenvolvedores

Documentação técnica, API pública, importação em lote e como contribuir com o projeto.

Importar em Lote

Cole JSON ou faça upload de arquivo .json

Como funciona

  • 1. Cole o JSON na área abaixo ou faça upload de um arquivo .json
  • 2. O sistema interpreta automaticamente a estrutura (aceita vários formatos)
  • 3. Visualize o preview dos dados antes de importar
  • 4. Confirme a importação e acompanhe o resultado

Campos aceitos: title/titulo/nome, content/conteudo/descricao/texto, categoryId/categoryName/categoria, estado/uf, municipio/cidade, bairro, tags/hashtags, authorNickname/autor

Formatos aceitos: { "posts": [...] }, array direto [...], { "data": [...] }, { "items": [...] }, ou objeto único

Stack Técnica

⚛️

Frontend

React 19 + TypeScript + Tailwind CSS 4

🖥️

Backend

Express 4 + tRPC 11 + Node.js

🗄️

Banco de Dados

MySQL/TiDB + Drizzle ORM

☁️

Storage

S3 para upload de imagens

🔐

Auth

Opcional - OAuth para admin

📦

Código Aberto

Licença MIT - use como quiser

API Pública REST

A Zueira Pública oferece uma API REST pública para que desenvolvedores possam integrar, automatizar e alimentar o banco de dados programaticamente. Não é necessário autenticação.

MétodoEndpointDescrição
GET/api/v1/postsListar posts (filtros: categoryId, estado, municipio, bairro, search, tagSlug, limit, offset, orderBy)
GET/api/v1/posts/:idObter post por ID com tags
POST/api/v1/postsCriar um post
POST/api/v1/posts/batchCriar posts em lote (máx 10 por requisição via REST, 50 via tRPC)
GET/api/v1/categoriesListar todas as categorias com subcategorias
GET/api/v1/tags/popularTags mais populares
GET/api/v1/schemaJSON Schema para importação em lote

Rate Limiting

30

Requisições por minuto

50

Posts por batch (tRPC)

100

Posts por listagem

Headers de resposta: X-RateLimit-Limit, X-RateLimit-Remaining, Retry-After (em caso de 429).

JSON Schema para Importação

Schema JSON - POST /api/v1/posts/batch ou Importador Visual
{
  "posts": [
    {
      "title": "string (3-500 chars, obrigatório)",
      "content": "string (min 10 chars, obrigatório)",
      "categoryId": "number (ID da categoria)",
      "categoryName": "string (nome da categoria - alternativa ao ID)",
      "categorySlug": "string (slug da categoria - alternativa ao ID)",
      "authorNickname": "string (max 100, default: 'Anônimo')",
      "estado": "string (2 chars, ex: 'RJ', 'SP')",
      "municipio": "string (max 255)",
      "bairro": "string (max 255)",
      "tags": ["string (max 50 chars)", "máx 10 tags"]
    }
  ]
}

Exemplos de Uso

Criar um post (JavaScript/fetch)
// POST https://zueirapub-nfstcgfg.manus.space/api/v1/posts
fetch("https://zueirapub-nfstcgfg.manus.space/api/v1/posts", {
  method: "POST",
  headers: { "Content-Type": "application/json" },
  body: JSON.stringify({
    title: "Bar do Zé - Melhor chopp da Lapa",
    content: "O Bar do Zé na Lapa tem o melhor chopp gelado do Rio. Preço honesto e ambiente top.",
    categoryId: 1,
    authorNickname: "Carioca Raiz",
    estado: "RJ",
    municipio: "Rio de Janeiro",
    bairro: "Lapa",
    tags: ["bar", "chopp", "lapa"]
  })
})
Criar posts em lote (JavaScript/fetch)
// POST https://zueirapub-nfstcgfg.manus.space/api/v1/posts/batch
fetch("https://zueirapub-nfstcgfg.manus.space/api/v1/posts/batch", {
  method: "POST",
  headers: { "Content-Type": "application/json" },
  body: JSON.stringify({
    posts: [
      {
        title: "Bar do Zé - Melhor chopp",
        content: "Chopp gelado e preço honesto na Lapa.",
        categoryId: 1,
        estado: "RJ",
        municipio: "Rio de Janeiro",
        bairro: "Lapa",
        tags: ["bar", "chopp"]
      },
      {
        title: "Pizzaria do Mano",
        content: "Pizza artesanal no Méier. Rodízio R$39,90.",
        categoryId: 2,
        estado: "RJ",
        municipio: "Rio de Janeiro",
        bairro: "Méier",
        tags: ["pizza", "rodizio"]
      }
    ]
  })
})

Estrutura do Banco

TabelaDescriçãoCampos Principais
categoriesCategorias hierárquicasid, name, slug, icon, parentId
postsPosts públicosid, title, content, categoryId, estado, municipio, bairro, imageUrl, voteScore
commentsComentários aninhadosid, postId, parentId, content, authorNickname
votesVotos positivos/negativosid, postId, value (+1/-1), fingerprint
ratingsAvaliações 1-5 estrelasid, postId, value, fingerprint
tagsHashtags de nichoid, name, slug, usageCount
post_tagsRelação posts ↔ tagsid, postId, tagId
post_photosFotos colaborativasid, postId, imageUrl, caption, authorNickname
reopen_votesVotos de reaberturaid, postId, value, fingerprint
suggestionsSugestões de melhoriasid, name, email, type, subject, message

Quer contribuir com o projeto ou tem sugestões de melhorias?