|
|
@@ -58,6 +58,12 @@ service DatabaseService {
|
|
|
rpc ListCollections(ListCollectionsRequest) returns (ListCollectionsResponse);
|
|
|
rpc GetCollectionInfo(GetCollectionInfoRequest) returns (GetCollectionInfoResponse);
|
|
|
|
|
|
+ // View management
|
|
|
+ rpc CreateView(CreateViewRequest) returns (CreateViewResponse);
|
|
|
+ rpc DropView(DropViewRequest) returns (DropViewResponse);
|
|
|
+ rpc ListViews(ListViewsRequest) returns (ListViewsResponse);
|
|
|
+ rpc GetViewInfo(GetViewInfoRequest) returns (GetViewInfoResponse);
|
|
|
+
|
|
|
// File operations
|
|
|
rpc UploadFile(stream FileChunk) returns (UploadFileResponse);
|
|
|
rpc DownloadFile(DownloadFileRequest) returns (stream FileChunk);
|
|
|
@@ -681,3 +687,54 @@ message GetStatsResponse {
|
|
|
uint64 query_total_micros = 25;
|
|
|
uint64 query_max_micros = 26;
|
|
|
}
|
|
|
+
|
|
|
+// ===== View Operations =====
|
|
|
+
|
|
|
+message ViewDefinition {
|
|
|
+ string name = 1; // view name (globally unique, cannot start with _)
|
|
|
+ string collection = 2; // target real collection (must NOT be another view)
|
|
|
+ repeated string include = 3; // field paths to include (dot-notation for nested)
|
|
|
+ repeated string exclude = 4; // field paths to exclude (ignored if include is non-empty)
|
|
|
+ repeated Filter where = 5; // baked-in filters (AND-merged with caller filters)
|
|
|
+ Sort default_sort = 6; // baked-in default sort (used when caller doesn't specify)
|
|
|
+ uint64 created_at = 7;
|
|
|
+ uint64 updated_at = 8;
|
|
|
+}
|
|
|
+
|
|
|
+message CreateViewRequest {
|
|
|
+ string name = 1;
|
|
|
+ string collection = 2;
|
|
|
+ repeated string include = 3;
|
|
|
+ repeated string exclude = 4;
|
|
|
+ repeated Filter where = 5;
|
|
|
+ Sort default_sort = 6;
|
|
|
+}
|
|
|
+
|
|
|
+message CreateViewResponse {
|
|
|
+ bool success = 1;
|
|
|
+ string error = 2;
|
|
|
+}
|
|
|
+
|
|
|
+message DropViewRequest {
|
|
|
+ string name = 1;
|
|
|
+}
|
|
|
+
|
|
|
+message DropViewResponse {
|
|
|
+ bool success = 1;
|
|
|
+ string error = 2;
|
|
|
+}
|
|
|
+
|
|
|
+message ListViewsRequest {}
|
|
|
+
|
|
|
+message ListViewsResponse {
|
|
|
+ repeated ViewDefinition views = 1;
|
|
|
+}
|
|
|
+
|
|
|
+message GetViewInfoRequest {
|
|
|
+ string name = 1;
|
|
|
+}
|
|
|
+
|
|
|
+message GetViewInfoResponse {
|
|
|
+ ViewDefinition view = 1;
|
|
|
+ bool found = 2;
|
|
|
+}
|