Zoha/agent-skills

Use ao adicionar ou manter a busca de texto completo com Elasticsearch em um backend NestJS — configuração do cliente e módulo, sincronização e reindexação de MongoDB para Elasticsearch, mapeamentos de índices e a projeção de busca, consultas apenas por ID com hidratação do MongoDB, paginação por cursor, campos derivados entre entidades, tornando a busca opcional por meio de uma camada de backend configurável, e testando a busca com uma camada simulada ou um cluster descartável real.

O que é agent-skills?

Esta skill oferece um guia completo de integração para adicionar busca baseada em Elasticsearch a uma aplicação NestJS GraphQL + MongoDB. Ela estabelece um contrato arquitetural claro, onde o Elasticsearch é usado exclusivamente como um índice de busca que retorna identificadores, enquanto o MongoDB, como fonte da verdade, é responsável por hidratar as entidades completas. O guia cobre todo o ciclo de vida da funcionalidade: projeto da projeção de busca, definição de mapeamentos, sincronização bidirecional de dados, reindexação com alias, consultas otimizadas (apenas IDs), paginação por cursor, campos derivados entre entidades e estratégias para tornar a busca opcional. A skill também aborda práticas operacionais como scripts CLI, health checks, logging, e como testar a busca usando uma camada de backend simulada ou um cluster real descartável, garantindo que a integração seja robusta, testável e de fácil manutenção.

Funciona com~Claude Code~Codex CLI✓Cursor
npx skills add https://github.com/Zoha/agent-skills/tree/HEAD/skills/nestjs-elasticsearch

Installed? Explore more Programação e Desenvolvimento skills: steipete/bluebubbles, steipete/eightctl, steipete/blucli · View all 6 →

Perguntar na sua IA favorita

Abre um novo chat com esta habilidade de agente já pré-carregada.

Documentação

NestJS Elasticsearch

Guia de integração para adicionar busca baseada em Elasticsearch a uma aplicação NestJS GraphQL + MongoDB. Ele define o limite arquitetural (infraestrutura genérica, uma camada de busca compartilhada, um índice por funcionalidade) e cobre todo o ciclo de vida: a projeção de busca, indexação e sincronização, consultas apenas por ID com hidratação do MongoDB, paginação por cursor, campos derivados entre entidades, execução com busca opcional por meio de uma camada de backend configurável, testes sem um cluster ativo e as operações/experiência do desenvolvedor relacionadas.

O contrato orientador é Elasticsearch encontra, MongoDB serve: o Elasticsearch é um índice de busca puro que retorna identificadores, e as entidades solicitadas são sempre hidratadas a partir do MongoDB, a fonte da verdade.

Quando Aplicar

Consulte estas diretrizes ao:

  • Adicionar busca a uma aplicação NestJS GraphQL + MongoDB existente
  • Configurar o cliente @nestjs/elasticsearch e a camada de busca compartilhada
  • Definir ou alterar um mapeamento de índice ou a projeção de busca
  • Implementar sincronização MongoDB-para-Elasticsearch, reindexação ou migrações de índice
  • Escrever uma consulta de busca, paginação por cursor ou hidratação de resultados
  • Manter um valor derivado (contagens, classificações) pesquisável entre entidades
  • Tornar a busca opcional ou trocar o backend a partir da configuração sem um cluster
  • Testar a busca com uma camada de backend simulada ou contra um cluster descartável real
  • Depurar resultados de busca desatualizados ou tempestades de indexação

Categorias de Regras por Prioridade

PrioridadeCategoriaImpactoPrefixo
1ArquiteturaCRÍTICOarch-
2Indexação e SincronizaçãoCRÍTICOsync-
3Esquema e MapeamentoALTOmap-
4ConsultasALTOquery-
5Entre EntidadesMÉDIO-ALTOrel-
6Operações e DXMÉDIOops-
7Configuração e AmbientesALTOcfg-
8TestesMÉDIO-ALTOtest-

Referência Rápida

1. Arquitetura (CRÍTICO)

  • arch-base-search-repository - Coloque Índice e Lógica de Consulta Compartilhados em um Repositório Base
  • arch-entity-vs-search-document - Mantenha Campos do Elasticsearch Fora da Entidade
  • arch-feature-owned-index - Deixe Cada Funcionalidade Possuir e Registrar Seu Índice
  • arch-infra-module - Isole o Cliente Elasticsearch em um Módulo de Infraestrutura Genérico

2. Indexação e Sincronização (CRÍTICO)

  • sync-bulk-index - Indexe em Lotes com a Bulk API
  • sync-debounce-same-id - Deboule as Rajadas do Mesmo ID
  • sync-delete-immediately - Exclua do Índice Imediatamente
  • sync-enqueue-index - Enfileire a Indexação; Nunca Escreva no Elasticsearch em Linha
  • sync-full-reindex-alias-swap - Reindexe Através de um Índice Versionado e Troque o Alias
  • sync-idempotent-index-creation - Crie Índices de Forma Idempotente com Nomes Determinísticos

3. Esquema e Mapeamento (ALTO)

  • map-analyzers - Escolha Analisadores de Texto Deliberadamente
  • map-derived-fields - Calcule Campos Derivados e de Relacionamento em um Mapeador em Lote
  • map-exclude-non-search-fields - Indexe Apenas Campos com Propósito de Busca
  • map-mapping-object - Declare o Mapeamento como um Objeto Tipado
  • map-typed-search-document - Tipifique o Documento de Busca Contra a Entidade

4. Consultas (ALTO)

  • query-cursor-pagination - Pagine com search_after
  • query-hydrate-restore-order - Hidrate a partir do MongoDB e Restaure a Ordem de Relevância
  • query-ids-only-search - Busca Retorna Apenas IDs
  • query-sort-tiebreaker - Inclua Sempre um Desempate de Ordenação Único

5. Entre Entidades (MÉDIO-ALTO)

  • rel-derived-counter-cache - Armazene em Cache Contadores Derivados no Documento Proprietário
  • rel-owning-module-subscribes - O Módulo Proprietário se Inscreve; Outros Emitem Seus Próprios Eventos

6. Operações e DX (MÉDIO)

  • ops-cli-scripts - Forneça Comandos CLI de Migração e Reindexação
  • ops-explain-debug - Forneça um Gancho de Explicação
  • ops-health-check - Inclua Elasticsearch nas Verificações de Saúde
  • ops-log-es-requests - Registre em Log as Requisições e Respostas do Elasticsearch
  • ops-no-cron-for-indexing - Nunca Agende Indexação com um Timer em Processo

7. Configuração e Ambientes (ALTO)

  • cfg-mongo-fallback-backend - Recorra a um Localizador MongoDB Determinístico
  • cfg-search-backend-seam - Coloque a Busca por Trás de uma Camada de Backend

8. Testes (MÉDIO-ALTO)

  • test-mock-elasticsearch-seam - Simule a Camada de Backend de Busca em Testes Unitários
  • test-real-es-for-query-semantics - Teste Semântica de Consulta Contra um Elasticsearch Real

Como Usar

Leia os arquivos de regra individuais para explicações detalhadas e exemplos de código:

rules/arch-entity-vs-search-document.md
rules/sync-full-reindex-alias-swap.md
rules/query-ids-only-search.md

Cada arquivo de regra contém:

  • Breve explicação de por que é importante e a qual camada se aplica
  • Exemplo de código incorreto com explicação
  • Exemplo de código correto com explicação
  • Contexto adicional e referências

Relação com Outras Skills

  • nestjs-graphql-structure — posicionamento de arquivos. Esta skill adiciona a pasta search/ a uma funcionalidade e as camadas common/search/ + infra/elasticsearch/; ela segue as regras de módulo de funcionalidade, repositório e eventos daquela skill.
  • nestjs-best-practices — regras comportamentais para serviços, eventos, filas, configuração e verificações de saúde nas quais os exemplos desta skill se baseiam.
  • Uma exceção deliberada — a regra service-background-jobs da nestjs-graphql-structure mantém processadores na funcionalidade proprietária. O pipeline de busca é executado uma vez em common/search/ e resolve o repositório de cada funcionalidade através do registro de índices, porque o pipeline é idêntico para todas as funcionalidades; veja arch-base-search-repository.

Documento Compilado Completo

Para o guia completo com todas as regras expandidas em um único documento, veja AGENTS.md.

Individual skills in this repo

This repo contains 2 individual skills — each has its own dedicated page.

Zoha/agent-skills

Application structure and file-placement guide for NestJS GraphQL (code-first) applications. Use when deciding where a file belongs, designing or reviewing a feature-first directory layout, scaffolding a new feature module, or working out how modules connect to resolve GraphQL fields and relations. Covers the base structure map plus per-file rules for modules, services, resolvers (query, mutation, subscription, field), inputs and args, pagination, entities (Mongoose schema best practices for shared types), repository-only model injection, models/mappers, repositories, Mongoose discriminators, derived fields, providers, loaders, events, background jobs, auth, exceptions, custom scalars, config, common building blocks, infra setup, and the naming/testing/lint conventions — and module-resolution concerns such as circular dependencies. For behavioral rules (DI depth, security, performance, error handling) use the nestjs-best-practices skill instead.

Zoha/agent-skills

Use when caching GraphQL reads in a NestJS (code-first) app — wiring a stale-while-revalidate (SWR) cache module once, deciding what to cache and where to mount it (service, field, operation, or CDN), and keeping it leak-safe. Triggers when you need SWR, single-flight dedupe, tag invalidation, per-user vs public scoping, cache observability, a stampede or blocking-miss at TTL expiry, a shared-key data leak, a dev/ops switch that disables caching entirely, or a one-time setup reference (module, file placement, storage, referencesTTL/GC, caller identity, decorator runtime, fail-open).

Habilidades Relacionadas