// Style guide for Protocol Buffer 3. // Use CamelCase (with an initial capital) for message names – for example, // SongServerRequest. Use underscore_separated_names for field names – for // example, song_name.

syntax = “proto3”;

package api;

/* import “gogoproto/gogo.proto”; */

/* option (gogoproto.marshaler_all) = true; */ /* option (gogoproto.sizer_all) = true; */ /* option (gogoproto.unmarshaler_all) = true; */ /* option (gogoproto.goproto_getters_all) = true; */

option java_package = “io.dgraph”; option java_outer_classname = “DgraphProto”;

// Graph response. service Dgraph {

rpc Login (LoginRequest)       returns (Response) {}
rpc Query (Request)            returns (Response) {}
rpc Alter (Operation)          returns (Payload) {}
rpc CommitOrAbort (TxnContext) returns (TxnContext) {}
rpc CheckVersion(Check)        returns (Version) {}

}

message Request {

uint64 start_ts = 1;

string query = 4;
map<string, string> vars = 5; // Support for GraphQL like variables.
bool read_only = 6;
bool best_effort = 7;

repeated Mutation mutations = 12;
bool commit_now = 13;

}

message Uids {

repeated string uids = 1;

}

message Response {

bytes json = 1;
TxnContext txn = 2;
Latency latency = 3;
// Metrics contains all metrics related to the query.
Metrics metrics = 4;
// uids contains a mapping of blank_node => uid for the node. It only returns uids
// that were created as part of a mutation.
map<string, string> uids = 12;

}

message Mutation {

bytes set_json = 1;
bytes delete_json = 2;
bytes set_nquads = 3;
bytes del_nquads = 4;
repeated NQuad set = 5;
repeated NQuad del = 6;

// This is being used for upserts.
string cond = 9;

// This field is a duplicate of the one in Request and placed here for convenience.
bool commit_now = 14;

}

message Operation {

string schema = 1;
string drop_attr = 2;
bool drop_all = 3;

enum DropOp {
        NONE = 0;
        ALL = 1;
        DATA = 2;
        ATTR = 3;
        TYPE = 4;
}
DropOp drop_op = 4;

// If drop_op is ATTR or TYPE, drop_value holds the name of the predicate or
// type to delete.
string drop_value = 5;

// run indexes in background.
bool run_in_background = 6;

}

// Worker services. message Payload {

bytes Data = 1;

}

message TxnContext {

uint64 start_ts = 1;
uint64 commit_ts = 2;
bool aborted = 3;
repeated string keys = 4;  // List of keys to be used for conflict detection.
repeated string preds = 5; // List of predicates involved in this transaction.

}

message Check {}

message Version {

string tag = 1;

}

message Latency {

uint64 parsing_ns = 1;
uint64 processing_ns = 2;
uint64 encoding_ns = 3;
uint64 assign_timestamp_ns = 4;
uint64 total_ns = 5;

}

message Metrics {

// num_uids is the map of number of uids processed by each attribute.
map<string, uint64> num_uids = 1;

}

message NQuad {

string subject = 1;
string predicate = 2;
string object_id = 3;
Value object_value = 4;
string label = 5;
string lang = 6;
repeated Facet facets = 7;

}

message Value {

oneof val {
        string default_val = 1;
        bytes bytes_val = 2;
        int64 int_val = 3;
        bool bool_val = 4;
        string str_val = 5;
        double double_val = 6;
        bytes geo_val = 7;  // Geo data in WKB format
        bytes date_val = 8;
        bytes datetime_val = 9;
        string password_val = 10;
        uint64 uid_val=11;
}

}

message Facet {

enum ValType {
        STRING = 0;
        INT = 1;
        FLOAT = 2;
        BOOL = 3;
        DATETIME = 4;
}

string key = 1;
bytes value = 2;
ValType val_type = 3;
repeated string tokens = 4; // tokens of value.
string alias = 5; // not stored, only used for query.

}

message LoginRequest {

string userid = 1;
string password = 2;
string refresh_token = 3;

}

message Jwt {

string access_jwt = 1;
string refresh_jwt = 2;

}