syntax = "proto3";

package nexuscrm.runtime.v1;

import "common/v1/common.proto";
import "runtime/v1/records.proto";

option go_package = "github.com/pingcap-inc/nexuscrm-contract/wire-go/gen/runtime/v1;runtimev1";

service RecordSearchService {
  rpc SearchRecords(SearchRecordsRequest) returns (SearchRecordsResponse);
  rpc ReadSearchScopeOrder(ReadSearchScopeOrderRequest) returns (ReadSearchScopeOrderResponse);
}

message SearchRecordsRequest {
  repeated string object_ids = 1;
  string term = 2;
  repeated string selected_fields = 3;
  uint32 limit = 4;
  optional uint64 min_catalog_revision = 5;
  repeated string search_fields = 6;
  repeated SearchObjectPlan object_plans = 7;
}

message SearchObjectPlan {
  string object_id = 1;
  repeated string search_fields = 2;
  repeated string selected_fields = 3;
  uint32 limit = 4;
}

message SearchRecord {
  string object_id = 1;
  string record_id = 2;
  repeated SelectedRootField fields = 3;
  optional double score = 4;
}

message SearchRecordsResponse {
  repeated SearchRecord records = 1;
  nexuscrm.common.v1.ConsistencyReceipts receipts = 2;
}

message ReadSearchScopeOrderRequest {
  repeated string object_ids = 1;
  optional uint64 min_catalog_revision = 2;
}

message ReadSearchScopeOrderResponse {
  repeated string object_ids = 1;
  nexuscrm.common.v1.ConsistencyReceipts receipts = 2;
}
