Skip to content

Conversation

@FaelN1
Copy link
Contributor

@FaelN1 FaelN1 commented Oct 23, 2025

📋 Description

Corrige o endpoint /chat/findContacts que estava ignorando os filtros da cláusula where, retornando sempre todos os contatos da instância. A implementação anterior processava apenas o campo remoteJid, ignorando id e pushName.

Agora o método fetchContacts processa corretamente todos os campos suportados do where:

  • id - CUID do contato no banco de dados
  • remoteJid - Número do WhatsApp (ex: 5511999999999@s.whatsapp.net)
  • pushName - Nome de exibição do contato

🔗 Related Issue

Closes #(2099)

🧪 Type of Change

  • 🐛 Bug fix (non-breaking change which fixes an issue)
  • ✨ New feature (non-breaking change which adds functionality)
  • 💥 Breaking change (fix or feature that would cause existing functionality to not work as expected)
  • 📚 Documentation update
  • 🔧 Refactoring (no functional changes)
  • ⚡ Performance improvement
  • 🧹 Code cleanup
  • 🔒 Security fix

🧪 Testing

  • Manual testing completed
  • Functionality verified in development environment
  • No breaking changes introduced
  • Tested with different connection types (if applicable)

Cenários testados:

# Filtrar por ID
curl -X POST http://localhost:8080/chat/findContacts/instanceName \
  -H "apikey: API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"where": {"id": "clx123abc456..."}}'

# Filtrar por remoteJid
curl -X POST http://localhost:8080/chat/findContacts/instanceName \
  -H "apikey: API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"where": {"remoteJid": "5511999999999@s.whatsapp.net"}}'

# Filtrar por pushName
curl -X POST http://localhost:8080/chat/findContacts/instanceName \
  -H "apikey: API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"where": {"pushName": "João Silva"}}'

📸 Screenshots (if applicable)

N/A - Correção de backend sem alterações visuais

✅ Checklist

  • My code follows the project's style guidelines
  • I have performed a self-review of my code
  • I have commented my code, particularly in hard-to-understand areas
  • I have made corresponding changes to the documentation
  • My changes generate no new warnings
  • I have manually tested my changes thoroughly
  • I have verified the changes work with different scenarios
  • Any dependent changes have been merged and published

📝 Additional Notes

Arquivos alterados:

  • src/api/services/channel.service.ts - Atualizado método fetchContacts para processar todos os campos do where
  • src/validate/chat.schema.ts - Adicionado campo remoteJid ao schema de validação

Compatibilidade:

  • ✅ Sem breaking changes
  • ✅ Mantém isolamento multi-tenant (filtro por instanceId preservado)
  • ✅ Retrocompatível com integrações existentes
  • ✅ Funciona com PostgreSQL e MySQL

Summary by Sourcery

Fix the chat/findContacts endpoint to correctly apply all supported where filters and update the request validation schema

Bug Fixes:

  • Apply id and pushName filters alongside remoteJid in fetchContacts
  • Correct remoteJid parsing logic in the findContacts implementation

Enhancements:

  • Add remoteJid to the chat.findContacts JSON schema and enforce at least one filter field

Anteriormente, o endpoint findContacts processava apenas o campo remoteJid da cláusula where, ignorando outros campos como id e pushName.

Alterações:

- Atualiza método fetchContacts para processar todos os campos do where (id, remoteJid, pushName)

- Adiciona campo remoteJid ao contactValidateSchema para validação adequada

- Garante isolamento multi-tenant mantendo filtro por instanceId

Esta correção permite que usuários filtrem contatos por qualquer um dos campos suportados ao invés de sempre retornar todos os contatos da instância.
@sourcery-ai
Copy link
Contributor

sourcery-ai bot commented Oct 23, 2025

Reviewer's guide (collapsed on small PRs)

Reviewer's Guide

Fixes the chat findContacts endpoint by correctly applying all supported where filters (id, remoteJid, pushName) and updating validation to include remoteJid.

Sequence diagram for findContacts endpoint with improved filtering

sequenceDiagram
actor User
participant API
participant "ChannelStartupService"
participant Database
User->>API: POST /chat/findContacts (with where filters)
API->>"ChannelStartupService": fetchContacts(query)
"ChannelStartupService"->>Database: Query contacts with filters (id, remoteJid, pushName)
Database-->>"ChannelStartupService": Filtered contacts
"ChannelStartupService"-->>API: Return contacts
API-->>User: Respond with filtered contacts
Loading

Class diagram for updated Contact query and validation

classDiagram
class Contact {
  +String id
  +String remoteJid
  +String pushName
  +String _id
}
class ChannelStartupService {
  +fetchContacts(query: Query<Contact>)
}
class contactValidateSchema {
  +_id: String
  +id: String
  +pushName: String
  +remoteJid: String
}
ChannelStartupService --> Contact : queries
contactValidateSchema --> Contact : validates
Loading

File-Level Changes

Change Details Files
Apply full set of where filters in fetchContacts
  • Initialize base where with instanceId
  • Conditionally add remoteJid filter with JID normalization
  • Add id filter when provided
  • Add pushName filter when provided
src/api/services/channel.service.ts
Extend contact validation schema with remoteJid
  • Define remoteJid property in schema
  • Include remoteJid in required fields check
src/validate/chat.schema.ts

Possibly linked issues


Tips and commands

Interacting with Sourcery

  • Trigger a new review: Comment @sourcery-ai review on the pull request.
  • Continue discussions: Reply directly to Sourcery's review comments.
  • Generate a GitHub issue from a review comment: Ask Sourcery to create an
    issue from a review comment by replying to it. You can also reply to a
    review comment with @sourcery-ai issue to create an issue from it.
  • Generate a pull request title: Write @sourcery-ai anywhere in the pull
    request title to generate a title at any time. You can also comment
    @sourcery-ai title on the pull request to (re-)generate the title at any time.
  • Generate a pull request summary: Write @sourcery-ai summary anywhere in
    the pull request body to generate a PR summary at any time exactly where you
    want it. You can also comment @sourcery-ai summary on the pull request to
    (re-)generate the summary at any time.
  • Generate reviewer's guide: Comment @sourcery-ai guide on the pull
    request to (re-)generate the reviewer's guide at any time.
  • Resolve all Sourcery comments: Comment @sourcery-ai resolve on the
    pull request to resolve all Sourcery comments. Useful if you've already
    addressed all the comments and don't want to see them anymore.
  • Dismiss all Sourcery reviews: Comment @sourcery-ai dismiss on the pull
    request to dismiss all existing Sourcery reviews. Especially useful if you
    want to start fresh with a new review - don't forget to comment
    @sourcery-ai review to trigger a new review!

Customizing Your Experience

Access your dashboard to:

  • Enable or disable review features such as the Sourcery-generated pull request
    summary, the reviewer's guide, and others.
  • Change the review language.
  • Add, remove or edit custom review instructions.
  • Adjust other review settings.

Getting Help

Copy link
Contributor

@sourcery-ai sourcery-ai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hey there - I've reviewed your changes and they look great!


Sourcery is free for open source - if you like our reviews please consider sharing them ✨
Help me be more useful! Please click 👍 or 👎 on each comment and I'll use the feedback to improve your reviews.

@DavidsonGomes DavidsonGomes merged commit d5f5b83 into EvolutionAPI:develop Oct 23, 2025
5 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants