[TECH-007] Universal Search Architecture Specification

Architecture Overview

The Universal Cross-Domain Search module (src/cmd_search.cpp) routes query requests to specific TDLib endpoints based on domain selection.

TDLib API Endpoints

1. Chat Search (searchChats & searchPublicChats)

  • Request: {“query”: “<text>”, “limit”: <count>}

  • Returns chats object containing chat_ids vector.

2. Message Search (searchMessages & searchChatMessages)

  • Global: searchMessages ({“query”: “<text>”, “limit”: <count>})

  • Per-Chat: searchChatMessages ({“chat_id”: <id>, “query”: “<text>”, “limit”: <count>})

  • Returns messages object containing messages array.

3. User Search (searchContacts & searchUserByUsername)

  • searchContacts ({“query”: “<text>”, “limit”: <count>})

  • searchUserByUsername ({“username”: “<handle>”})

  • Returns users or user object.

4. Universal Multi-Domain Aggregator

Executing grm search “<query>” triggers parallel or sequential TDLib requests across chat, user, and message domains, aggregating top matches into a SearchSummary structure.

Data Structures

struct SearchSummary {
  std::vector<ChatSummary> chats;
  std::vector<UserSummary> users;
  std::vector<MessageSummary> messages;
};