Jelajahi Sumber

feat(proto): add view management RPCs with filters+sort (v1.5.0)

- CreateView/DropView/ListViews/GetViewInfo RPCs
- ViewDefinition with include, exclude, where (Filter[]), default_sort (Sort)
- Reuses existing Filter message — all operators (EQ/NE/GT/.../REGEX/SEARCH)
  are supported in baked-in where clauses
fszontagh 3 bulan lalu
induk
melakukan
1b3fdd9396
2 mengubah file dengan 58 tambahan dan 1 penghapusan
  1. 1 1
      VERSION
  2. 57 0
      proto/database.proto

+ 1 - 1
VERSION

@@ -1 +1 @@
-1.4.2
+1.5.0

+ 57 - 0
proto/database.proto

@@ -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;
+}