get profile details with scripts and tables columns is now working
This commit is contained in:
32
Cargo.lock
generated
32
Cargo.lock
generated
@@ -493,7 +493,7 @@ checksum = "d71b6127be86fdcfddb610f7182ac57211d4b18a3e9c82eb2d17662f2227ad6a"
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "canvas"
|
name = "canvas"
|
||||||
version = "0.6.0"
|
version = "0.6.2"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"anyhow",
|
"anyhow",
|
||||||
"async-trait",
|
"async-trait",
|
||||||
@@ -585,7 +585,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "client"
|
name = "client"
|
||||||
version = "0.6.0"
|
version = "0.6.2"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"anyhow",
|
"anyhow",
|
||||||
"async-trait",
|
"async-trait",
|
||||||
@@ -596,6 +596,7 @@ dependencies = [
|
|||||||
"dotenvy",
|
"dotenvy",
|
||||||
"futures",
|
"futures",
|
||||||
"lazy_static",
|
"lazy_static",
|
||||||
|
"nucleo",
|
||||||
"prost 0.13.5",
|
"prost 0.13.5",
|
||||||
"prost-types 0.13.5",
|
"prost-types 0.13.5",
|
||||||
"ratatui",
|
"ratatui",
|
||||||
@@ -640,7 +641,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "common"
|
name = "common"
|
||||||
version = "0.6.0"
|
version = "0.6.2"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"prost 0.13.5",
|
"prost 0.13.5",
|
||||||
"prost-build 0.14.1",
|
"prost-build 0.14.1",
|
||||||
@@ -2103,6 +2104,27 @@ dependencies = [
|
|||||||
"windows-sys 0.60.2",
|
"windows-sys 0.60.2",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "nucleo"
|
||||||
|
version = "0.5.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "5262af4c94921c2646c5ac6ff7900c2af9cbb08dc26a797e18130a7019c039d4"
|
||||||
|
dependencies = [
|
||||||
|
"nucleo-matcher",
|
||||||
|
"parking_lot",
|
||||||
|
"rayon",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "nucleo-matcher"
|
||||||
|
version = "0.3.1"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "bf33f538733d1a5a3494b836ba913207f14d9d4a1d3cd67030c5061bdd2cac85"
|
||||||
|
dependencies = [
|
||||||
|
"memchr",
|
||||||
|
"unicode-segmentation",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "num-bigint"
|
name = "num-bigint"
|
||||||
version = "0.4.6"
|
version = "0.4.6"
|
||||||
@@ -3094,7 +3116,7 @@ checksum = "1c107b6f4780854c8b126e228ea8869f4d7b71260f962fefb57b996b8959ba6b"
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "search"
|
name = "search"
|
||||||
version = "0.6.0"
|
version = "0.6.2"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"anyhow",
|
"anyhow",
|
||||||
"common",
|
"common",
|
||||||
@@ -3193,7 +3215,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "server"
|
name = "server"
|
||||||
version = "0.6.0"
|
version = "0.6.2"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"anyhow",
|
"anyhow",
|
||||||
"bcrypt",
|
"bcrypt",
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ resolver = "2"
|
|||||||
[workspace.package]
|
[workspace.package]
|
||||||
# TODO: idk how to do the name, fix later
|
# TODO: idk how to do the name, fix later
|
||||||
# name = "komp_ac"
|
# name = "komp_ac"
|
||||||
version = "0.6.2"
|
version = "0.6.3"
|
||||||
edition = "2021"
|
edition = "2021"
|
||||||
license = "GPL-3.0-or-later"
|
license = "GPL-3.0-or-later"
|
||||||
authors = ["Filip Priečinský <filippriec@gmail.com>"]
|
authors = ["Filip Priečinský <filippriec@gmail.com>"]
|
||||||
|
|||||||
2
canvas
2
canvas
Submodule canvas updated: 812ac2a428...abbda5b7a9
2
client
2
client
Submodule client updated: 2494066140...6a32d8cb3a
@@ -18,6 +18,10 @@ service TableDefinition {
|
|||||||
// This provides a tree-like overview of table relationships.
|
// This provides a tree-like overview of table relationships.
|
||||||
rpc GetProfileTree(komp_ac.common.Empty) returns (ProfileTreeResponse);
|
rpc GetProfileTree(komp_ac.common.Empty) returns (ProfileTreeResponse);
|
||||||
|
|
||||||
|
// Fetches all tables with their columns and scripts for a specific profile.
|
||||||
|
// Pure data retrieval - no business logic.
|
||||||
|
rpc GetProfileDetails(GetProfileDetailsRequest) returns (GetProfileDetailsResponse);
|
||||||
|
|
||||||
// Drops a table and its metadata, then deletes the profile if it becomes empty.
|
// Drops a table and its metadata, then deletes the profile if it becomes empty.
|
||||||
rpc DeleteTable(DeleteTableRequest) returns (DeleteTableResponse);
|
rpc DeleteTable(DeleteTableRequest) returns (DeleteTableResponse);
|
||||||
}
|
}
|
||||||
@@ -119,6 +123,35 @@ message ProfileTreeResponse {
|
|||||||
repeated Profile profiles = 1;
|
repeated Profile profiles = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Request to fetch all tables, columns and scripts for a profile.
|
||||||
|
message GetProfileDetailsRequest {
|
||||||
|
// Profile (schema) name to fetch details for.
|
||||||
|
string profile_name = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Response with all tables, columns and scripts for a profile.
|
||||||
|
message GetProfileDetailsResponse {
|
||||||
|
string profile_name = 1;
|
||||||
|
repeated TableDetail tables = 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Describes a table with its columns and associated scripts.
|
||||||
|
message TableDetail {
|
||||||
|
string name = 1;
|
||||||
|
int64 id = 2;
|
||||||
|
repeated ColumnDefinition columns = 3;
|
||||||
|
repeated ScriptInfo scripts = 4;
|
||||||
|
}
|
||||||
|
|
||||||
|
// A script that targets a specific column in a table.
|
||||||
|
message ScriptInfo {
|
||||||
|
int64 script_id = 1;
|
||||||
|
string target_column = 2;
|
||||||
|
string target_column_type = 3;
|
||||||
|
string script = 4;
|
||||||
|
string description = 5;
|
||||||
|
}
|
||||||
|
|
||||||
// Request to delete one table definition entirely.
|
// Request to delete one table definition entirely.
|
||||||
message DeleteTableRequest {
|
message DeleteTableRequest {
|
||||||
// Profile (schema) name owning the table (must exist).
|
// Profile (schema) name owning the table (must exist).
|
||||||
|
|||||||
Binary file not shown.
@@ -110,6 +110,47 @@ pub mod profile_tree_response {
|
|||||||
pub tables: ::prost::alloc::vec::Vec<Table>,
|
pub tables: ::prost::alloc::vec::Vec<Table>,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
/// Request to fetch all tables, columns and scripts for a profile.
|
||||||
|
#[derive(Clone, PartialEq, ::prost::Message)]
|
||||||
|
pub struct GetProfileDetailsRequest {
|
||||||
|
/// Profile (schema) name to fetch details for.
|
||||||
|
#[prost(string, tag = "1")]
|
||||||
|
pub profile_name: ::prost::alloc::string::String,
|
||||||
|
}
|
||||||
|
/// Response with all tables, columns and scripts for a profile.
|
||||||
|
#[derive(Clone, PartialEq, ::prost::Message)]
|
||||||
|
pub struct GetProfileDetailsResponse {
|
||||||
|
#[prost(string, tag = "1")]
|
||||||
|
pub profile_name: ::prost::alloc::string::String,
|
||||||
|
#[prost(message, repeated, tag = "2")]
|
||||||
|
pub tables: ::prost::alloc::vec::Vec<TableDetail>,
|
||||||
|
}
|
||||||
|
/// Describes a table with its columns and associated scripts.
|
||||||
|
#[derive(Clone, PartialEq, ::prost::Message)]
|
||||||
|
pub struct TableDetail {
|
||||||
|
#[prost(string, tag = "1")]
|
||||||
|
pub name: ::prost::alloc::string::String,
|
||||||
|
#[prost(int64, tag = "2")]
|
||||||
|
pub id: i64,
|
||||||
|
#[prost(message, repeated, tag = "3")]
|
||||||
|
pub columns: ::prost::alloc::vec::Vec<ColumnDefinition>,
|
||||||
|
#[prost(message, repeated, tag = "4")]
|
||||||
|
pub scripts: ::prost::alloc::vec::Vec<ScriptInfo>,
|
||||||
|
}
|
||||||
|
/// A script that targets a specific column in a table.
|
||||||
|
#[derive(Clone, PartialEq, ::prost::Message)]
|
||||||
|
pub struct ScriptInfo {
|
||||||
|
#[prost(int64, tag = "1")]
|
||||||
|
pub script_id: i64,
|
||||||
|
#[prost(string, tag = "2")]
|
||||||
|
pub target_column: ::prost::alloc::string::String,
|
||||||
|
#[prost(string, tag = "3")]
|
||||||
|
pub target_column_type: ::prost::alloc::string::String,
|
||||||
|
#[prost(string, tag = "4")]
|
||||||
|
pub script: ::prost::alloc::string::String,
|
||||||
|
#[prost(string, tag = "5")]
|
||||||
|
pub description: ::prost::alloc::string::String,
|
||||||
|
}
|
||||||
/// Request to delete one table definition entirely.
|
/// Request to delete one table definition entirely.
|
||||||
#[derive(Clone, PartialEq, ::prost::Message)]
|
#[derive(Clone, PartialEq, ::prost::Message)]
|
||||||
pub struct DeleteTableRequest {
|
pub struct DeleteTableRequest {
|
||||||
@@ -289,6 +330,37 @@ pub mod table_definition_client {
|
|||||||
);
|
);
|
||||||
self.inner.unary(req, path, codec).await
|
self.inner.unary(req, path, codec).await
|
||||||
}
|
}
|
||||||
|
/// Fetches all tables with their columns and scripts for a specific profile.
|
||||||
|
/// Pure data retrieval - no business logic.
|
||||||
|
pub async fn get_profile_details(
|
||||||
|
&mut self,
|
||||||
|
request: impl tonic::IntoRequest<super::GetProfileDetailsRequest>,
|
||||||
|
) -> std::result::Result<
|
||||||
|
tonic::Response<super::GetProfileDetailsResponse>,
|
||||||
|
tonic::Status,
|
||||||
|
> {
|
||||||
|
self.inner
|
||||||
|
.ready()
|
||||||
|
.await
|
||||||
|
.map_err(|e| {
|
||||||
|
tonic::Status::unknown(
|
||||||
|
format!("Service was not ready: {}", e.into()),
|
||||||
|
)
|
||||||
|
})?;
|
||||||
|
let codec = tonic::codec::ProstCodec::default();
|
||||||
|
let path = http::uri::PathAndQuery::from_static(
|
||||||
|
"/komp_ac.table_definition.TableDefinition/GetProfileDetails",
|
||||||
|
);
|
||||||
|
let mut req = request.into_request();
|
||||||
|
req.extensions_mut()
|
||||||
|
.insert(
|
||||||
|
GrpcMethod::new(
|
||||||
|
"komp_ac.table_definition.TableDefinition",
|
||||||
|
"GetProfileDetails",
|
||||||
|
),
|
||||||
|
);
|
||||||
|
self.inner.unary(req, path, codec).await
|
||||||
|
}
|
||||||
/// Drops a table and its metadata, then deletes the profile if it becomes empty.
|
/// Drops a table and its metadata, then deletes the profile if it becomes empty.
|
||||||
pub async fn delete_table(
|
pub async fn delete_table(
|
||||||
&mut self,
|
&mut self,
|
||||||
@@ -353,6 +425,15 @@ pub mod table_definition_server {
|
|||||||
tonic::Response<super::ProfileTreeResponse>,
|
tonic::Response<super::ProfileTreeResponse>,
|
||||||
tonic::Status,
|
tonic::Status,
|
||||||
>;
|
>;
|
||||||
|
/// Fetches all tables with their columns and scripts for a specific profile.
|
||||||
|
/// Pure data retrieval - no business logic.
|
||||||
|
async fn get_profile_details(
|
||||||
|
&self,
|
||||||
|
request: tonic::Request<super::GetProfileDetailsRequest>,
|
||||||
|
) -> std::result::Result<
|
||||||
|
tonic::Response<super::GetProfileDetailsResponse>,
|
||||||
|
tonic::Status,
|
||||||
|
>;
|
||||||
/// Drops a table and its metadata, then deletes the profile if it becomes empty.
|
/// Drops a table and its metadata, then deletes the profile if it becomes empty.
|
||||||
async fn delete_table(
|
async fn delete_table(
|
||||||
&self,
|
&self,
|
||||||
@@ -537,6 +618,52 @@ pub mod table_definition_server {
|
|||||||
};
|
};
|
||||||
Box::pin(fut)
|
Box::pin(fut)
|
||||||
}
|
}
|
||||||
|
"/komp_ac.table_definition.TableDefinition/GetProfileDetails" => {
|
||||||
|
#[allow(non_camel_case_types)]
|
||||||
|
struct GetProfileDetailsSvc<T: TableDefinition>(pub Arc<T>);
|
||||||
|
impl<
|
||||||
|
T: TableDefinition,
|
||||||
|
> tonic::server::UnaryService<super::GetProfileDetailsRequest>
|
||||||
|
for GetProfileDetailsSvc<T> {
|
||||||
|
type Response = super::GetProfileDetailsResponse;
|
||||||
|
type Future = BoxFuture<
|
||||||
|
tonic::Response<Self::Response>,
|
||||||
|
tonic::Status,
|
||||||
|
>;
|
||||||
|
fn call(
|
||||||
|
&mut self,
|
||||||
|
request: tonic::Request<super::GetProfileDetailsRequest>,
|
||||||
|
) -> Self::Future {
|
||||||
|
let inner = Arc::clone(&self.0);
|
||||||
|
let fut = async move {
|
||||||
|
<T as TableDefinition>::get_profile_details(&inner, request)
|
||||||
|
.await
|
||||||
|
};
|
||||||
|
Box::pin(fut)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
let accept_compression_encodings = self.accept_compression_encodings;
|
||||||
|
let send_compression_encodings = self.send_compression_encodings;
|
||||||
|
let max_decoding_message_size = self.max_decoding_message_size;
|
||||||
|
let max_encoding_message_size = self.max_encoding_message_size;
|
||||||
|
let inner = self.inner.clone();
|
||||||
|
let fut = async move {
|
||||||
|
let method = GetProfileDetailsSvc(inner);
|
||||||
|
let codec = tonic::codec::ProstCodec::default();
|
||||||
|
let mut grpc = tonic::server::Grpc::new(codec)
|
||||||
|
.apply_compression_config(
|
||||||
|
accept_compression_encodings,
|
||||||
|
send_compression_encodings,
|
||||||
|
)
|
||||||
|
.apply_max_message_size_config(
|
||||||
|
max_decoding_message_size,
|
||||||
|
max_encoding_message_size,
|
||||||
|
);
|
||||||
|
let res = grpc.unary(method, req).await;
|
||||||
|
Ok(res)
|
||||||
|
};
|
||||||
|
Box::pin(fut)
|
||||||
|
}
|
||||||
"/komp_ac.table_definition.TableDefinition/DeleteTable" => {
|
"/komp_ac.table_definition.TableDefinition/DeleteTable" => {
|
||||||
#[allow(non_camel_case_types)]
|
#[allow(non_camel_case_types)]
|
||||||
struct DeleteTableSvc<T: TableDefinition>(pub Arc<T>);
|
struct DeleteTableSvc<T: TableDefinition>(pub Arc<T>);
|
||||||
|
|||||||
2
server
2
server
Submodule server updated: 6b0c3e63b4...db54c07358
Reference in New Issue
Block a user