From b73105dbda3414323f81c508f9628cd3018d6d07 Mon Sep 17 00:00:00 2001 From: Priec Date: Sun, 12 Jul 2026 22:08:51 +0200 Subject: [PATCH] money --- Cargo.lock | 10 + client | 2 +- common/build.rs | 12 + common/proto/table_definition.proto | 43 +++- common/src/proto/descriptor.bin | Bin 88455 -> 90623 bytes common/src/proto/komp_ac.table_definition.rs | 246 ++++++++++++++++++- server | 2 +- 7 files changed, 303 insertions(+), 12 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 8ae516c..b5957a2 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4148,6 +4148,15 @@ version = "1.0.22" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d" +[[package]] +name = "rusty-money" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e8ac0a3274868e5d2615e749ad3b944d93cf846deefd46ea918a225e5d53856d" +dependencies = [ + "rust_decimal", +] + [[package]] name = "ryu" version = "1.0.23" @@ -4294,6 +4303,7 @@ dependencies = [ "rust-stemmers", "rust_decimal", "rust_decimal_macros", + "rusty-money", "search", "serde", "serde_json", diff --git a/client b/client index 8954ca8..4fb2df8 160000 --- a/client +++ b/client @@ -1 +1 @@ -Subproject commit 8954ca848390ece033c1ad316fa39c1dce93abd4 +Subproject commit 4fb2df8b0251667fba0976e465266f9b9856d703 diff --git a/common/build.rs b/common/build.rs index 1d71c08..02cc87c 100644 --- a/common/build.rs +++ b/common/build.rs @@ -169,6 +169,18 @@ fn main() -> Result<(), Box> { ".komp_ac.table_definition.AddTableColumnsRequest", "#[derive(serde::Serialize, serde::Deserialize)]", ) + .type_attribute( + ".komp_ac.table_definition.MoneyColumnOptions", + "#[derive(serde::Serialize, serde::Deserialize)]", + ) + .type_attribute( + ".komp_ac.table_definition.PostMoneyTableDefinitionRequest", + "#[derive(serde::Serialize, serde::Deserialize)]", + ) + .type_attribute( + ".komp_ac.table_definition.AddMoneyTableColumnsRequest", + "#[derive(serde::Serialize, serde::Deserialize)]", + ) .type_attribute( ".komp_ac.table_definition.TableDefinitionResponse", "#[derive(serde::Serialize, serde::Deserialize)]" diff --git a/common/proto/table_definition.proto b/common/proto/table_definition.proto index bcf966b..5995529 100644 --- a/common/proto/table_definition.proto +++ b/common/proto/table_definition.proto @@ -14,10 +14,16 @@ service TableDefinition { // Also inserts metadata and default validation rules. Entirely transactional. rpc PostTableDefinition(PostTableDefinitionRequest) returns (TableDefinitionResponse); + // Creates a table using the money-aware definition contract. + rpc PostMoneyTableDefinition(PostMoneyTableDefinitionRequest) returns (TableDefinitionResponse); + // Appends new user-defined columns to an existing table. // Existing columns, links, and table logic are never changed by this call. rpc AddTableColumns(AddTableColumnsRequest) returns (TableDefinitionResponse); + // Adds columns using the money-aware definition contract. + rpc AddMoneyTableColumns(AddMoneyTableColumnsRequest) returns (TableDefinitionResponse); + // Lists all profiles (schemas) and their tables with declared dependencies. // This provides a tree-like overview of table relationships. rpc GetProfileTree(komp_ac.common.Empty) returns (ProfileTreeResponse); @@ -77,6 +83,13 @@ message PostTableDefinitionRequest { // Same naming rules as table_name; cannot collide with reserved schemas // like "public", "information_schema", or ones starting with "pg_". string profile_name = 5; + +} + +message PostMoneyTableDefinitionRequest { + PostTableDefinitionRequest definition = 1; + string base_currency = 2; + repeated MoneyColumnOptions money_columns = 3; } // Defines append-only column additions for an existing table. @@ -92,6 +105,24 @@ message AddTableColumnsRequest { // Optional indexes for the new columns only. repeated string indexes = 4; + +} + +message AddMoneyTableColumnsRequest { + AddTableColumnsRequest definition = 1; + repeated MoneyColumnOptions money_columns = 2; + string base_currency = 3; +} + +enum MoneyRounding { + MONEY_ROUNDING_NONE = 0; + MONEY_ROUNDING_HALF_UP = 1; +} + +message MoneyColumnOptions { + string column_name = 1; + bool immutable = 2; + MoneyRounding rounding = 3; } // Describes one user-defined column for a table. @@ -102,12 +133,12 @@ message ColumnDefinition { string name = 1; // Logical column type. Supported values (case-insensitive): - // TEXT / STRING + // TEXT // BOOLEAN - // TIMESTAMP / TIMESTAMPTZ / TIME - // MONEY (= NUMERIC(14,4)) - // INTEGER / INT - // BIGINTEGER / BIGINT + // TIMESTAMPTZ + // MONEY (= unconstrained NUMERIC; currency comes from the table) + // INT + // BIGINT // DATE // DECIMAL(p,s) → NUMERIC(p,s) // DECIMAL args must be integers (no sign, no dot, no leading zeros); @@ -209,6 +240,8 @@ message TableDetail { int64 id = 2; repeated ColumnDefinition columns = 3; repeated ScriptInfo scripts = 4; + string base_currency = 5; + repeated MoneyColumnOptions money_columns = 6; } // A script that targets a specific column in a table. diff --git a/common/src/proto/descriptor.bin b/common/src/proto/descriptor.bin index b99ee321fadc3c3f99c53fe1332e80cb9735e30c..79df9f5e605136348aabe559671610b9fe9ad8d7 100644 GIT binary patch delta 6602 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 AxBvhE delta 4861 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 EKV2>^Q2+n{ diff --git a/common/src/proto/komp_ac.table_definition.rs b/common/src/proto/komp_ac.table_definition.rs index 482afe5..3649e2b 100644 --- a/common/src/proto/komp_ac.table_definition.rs +++ b/common/src/proto/komp_ac.table_definition.rs @@ -43,6 +43,16 @@ pub struct PostTableDefinitionRequest { #[prost(string, tag = "5")] pub profile_name: ::prost::alloc::string::String, } +#[derive(serde::Serialize, serde::Deserialize)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct PostMoneyTableDefinitionRequest { + #[prost(message, optional, tag = "1")] + pub definition: ::core::option::Option, + #[prost(string, tag = "2")] + pub base_currency: ::prost::alloc::string::String, + #[prost(message, repeated, tag = "3")] + pub money_columns: ::prost::alloc::vec::Vec, +} /// Defines append-only column additions for an existing table. #[derive(serde::Serialize, serde::Deserialize)] #[derive(Clone, PartialEq, ::prost::Message)] @@ -60,6 +70,26 @@ pub struct AddTableColumnsRequest { #[prost(string, repeated, tag = "4")] pub indexes: ::prost::alloc::vec::Vec<::prost::alloc::string::String>, } +#[derive(serde::Serialize, serde::Deserialize)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct AddMoneyTableColumnsRequest { + #[prost(message, optional, tag = "1")] + pub definition: ::core::option::Option, + #[prost(message, repeated, tag = "2")] + pub money_columns: ::prost::alloc::vec::Vec, + #[prost(string, tag = "3")] + pub base_currency: ::prost::alloc::string::String, +} +#[derive(serde::Serialize, serde::Deserialize)] +#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)] +pub struct MoneyColumnOptions { + #[prost(string, tag = "1")] + pub column_name: ::prost::alloc::string::String, + #[prost(bool, tag = "2")] + pub immutable: bool, + #[prost(enumeration = "MoneyRounding", tag = "3")] + pub rounding: i32, +} /// Describes one user-defined column for a table. #[derive(serde::Serialize, serde::Deserialize)] #[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)] @@ -70,12 +100,12 @@ pub struct ColumnDefinition { #[prost(string, tag = "1")] pub name: ::prost::alloc::string::String, /// Logical column type. Supported values (case-insensitive): - /// TEXT / STRING + /// TEXT /// BOOLEAN - /// TIMESTAMP / TIMESTAMPTZ / TIME - /// MONEY (= NUMERIC(14,4)) - /// INTEGER / INT - /// BIGINTEGER / BIGINT + /// TIMESTAMPTZ + /// MONEY (= unconstrained NUMERIC; currency comes from the table) + /// INT + /// BIGINT /// DATE /// DECIMAL(p,s) → NUMERIC(p,s) /// DECIMAL args must be integers (no sign, no dot, no leading zeros); @@ -215,6 +245,10 @@ pub struct TableDetail { pub columns: ::prost::alloc::vec::Vec, #[prost(message, repeated, tag = "4")] pub scripts: ::prost::alloc::vec::Vec, + #[prost(string, tag = "5")] + pub base_currency: ::prost::alloc::string::String, + #[prost(message, repeated, tag = "6")] + pub money_columns: ::prost::alloc::vec::Vec, } /// A script that targets a specific column in a table. #[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)] @@ -273,6 +307,32 @@ pub struct DeleteTableResponse { #[prost(string, tag = "2")] pub message: ::prost::alloc::string::String, } +#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)] +#[repr(i32)] +pub enum MoneyRounding { + None = 0, + HalfUp = 1, +} +impl MoneyRounding { + /// String value of the enum field names used in the ProtoBuf definition. + /// + /// The values are not transformed in any way and thus are considered stable + /// (if the ProtoBuf definition does not change) and safe for programmatic use. + pub fn as_str_name(&self) -> &'static str { + match self { + Self::None => "MONEY_ROUNDING_NONE", + Self::HalfUp => "MONEY_ROUNDING_HALF_UP", + } + } + /// Creates an enum from field names used in the ProtoBuf definition. + pub fn from_str_name(value: &str) -> ::core::option::Option { + match value { + "MONEY_ROUNDING_NONE" => Some(Self::None), + "MONEY_ROUNDING_HALF_UP" => Some(Self::HalfUp), + _ => None, + } + } +} /// Generated client implementations. pub mod table_definition_client { #![allow( @@ -400,6 +460,36 @@ pub mod table_definition_client { ); self.inner.unary(req, path, codec).await } + /// Creates a table using the money-aware definition contract. + pub async fn post_money_table_definition( + &mut self, + request: impl tonic::IntoRequest, + ) -> std::result::Result< + tonic::Response, + tonic::Status, + > { + self.inner + .ready() + .await + .map_err(|e| { + tonic::Status::unknown( + format!("Service was not ready: {}", e.into()), + ) + })?; + let codec = tonic_prost::ProstCodec::default(); + let path = http::uri::PathAndQuery::from_static( + "/komp_ac.table_definition.TableDefinition/PostMoneyTableDefinition", + ); + let mut req = request.into_request(); + req.extensions_mut() + .insert( + GrpcMethod::new( + "komp_ac.table_definition.TableDefinition", + "PostMoneyTableDefinition", + ), + ); + self.inner.unary(req, path, codec).await + } /// Appends new user-defined columns to an existing table. /// Existing columns, links, and table logic are never changed by this call. pub async fn add_table_columns( @@ -431,6 +521,36 @@ pub mod table_definition_client { ); self.inner.unary(req, path, codec).await } + /// Adds columns using the money-aware definition contract. + pub async fn add_money_table_columns( + &mut self, + request: impl tonic::IntoRequest, + ) -> std::result::Result< + tonic::Response, + tonic::Status, + > { + self.inner + .ready() + .await + .map_err(|e| { + tonic::Status::unknown( + format!("Service was not ready: {}", e.into()), + ) + })?; + let codec = tonic_prost::ProstCodec::default(); + let path = http::uri::PathAndQuery::from_static( + "/komp_ac.table_definition.TableDefinition/AddMoneyTableColumns", + ); + let mut req = request.into_request(); + req.extensions_mut() + .insert( + GrpcMethod::new( + "komp_ac.table_definition.TableDefinition", + "AddMoneyTableColumns", + ), + ); + self.inner.unary(req, path, codec).await + } /// Lists all profiles (schemas) and their tables with declared dependencies. /// This provides a tree-like overview of table relationships. pub async fn get_profile_tree( @@ -638,6 +758,14 @@ pub mod table_definition_server { tonic::Response, tonic::Status, >; + /// Creates a table using the money-aware definition contract. + async fn post_money_table_definition( + &self, + request: tonic::Request, + ) -> std::result::Result< + tonic::Response, + tonic::Status, + >; /// Appends new user-defined columns to an existing table. /// Existing columns, links, and table logic are never changed by this call. async fn add_table_columns( @@ -647,6 +775,14 @@ pub mod table_definition_server { tonic::Response, tonic::Status, >; + /// Adds columns using the money-aware definition contract. + async fn add_money_table_columns( + &self, + request: tonic::Request, + ) -> std::result::Result< + tonic::Response, + tonic::Status, + >; /// Lists all profiles (schemas) and their tables with declared dependencies. /// This provides a tree-like overview of table relationships. async fn get_profile_tree( @@ -827,6 +963,57 @@ pub mod table_definition_server { }; Box::pin(fut) } + "/komp_ac.table_definition.TableDefinition/PostMoneyTableDefinition" => { + #[allow(non_camel_case_types)] + struct PostMoneyTableDefinitionSvc(pub Arc); + impl< + T: TableDefinition, + > tonic::server::UnaryService + for PostMoneyTableDefinitionSvc { + type Response = super::TableDefinitionResponse; + type Future = BoxFuture< + tonic::Response, + tonic::Status, + >; + fn call( + &mut self, + request: tonic::Request< + super::PostMoneyTableDefinitionRequest, + >, + ) -> Self::Future { + let inner = Arc::clone(&self.0); + let fut = async move { + ::post_money_table_definition( + &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 = PostMoneyTableDefinitionSvc(inner); + let codec = tonic_prost::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/AddTableColumns" => { #[allow(non_camel_case_types)] struct AddTableColumnsSvc(pub Arc); @@ -873,6 +1060,55 @@ pub mod table_definition_server { }; Box::pin(fut) } + "/komp_ac.table_definition.TableDefinition/AddMoneyTableColumns" => { + #[allow(non_camel_case_types)] + struct AddMoneyTableColumnsSvc(pub Arc); + impl< + T: TableDefinition, + > tonic::server::UnaryService + for AddMoneyTableColumnsSvc { + type Response = super::TableDefinitionResponse; + type Future = BoxFuture< + tonic::Response, + tonic::Status, + >; + fn call( + &mut self, + request: tonic::Request, + ) -> Self::Future { + let inner = Arc::clone(&self.0); + let fut = async move { + ::add_money_table_columns( + &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 = AddMoneyTableColumnsSvc(inner); + let codec = tonic_prost::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/GetProfileTree" => { #[allow(non_camel_case_types)] struct GetProfileTreeSvc(pub Arc); diff --git a/server b/server index d97b28f..de3235a 160000 --- a/server +++ b/server @@ -1 +1 @@ -Subproject commit d97b28ff62579b9547d020f1e9a1da245c59db62 +Subproject commit de3235a13c2966c2c4ffab356d7d9a3aaa5ce05a