From c7e303c2d6b83d494e3b3688f141c4b8a966d1c3 Mon Sep 17 00:00:00 2001 From: Priec Date: Tue, 15 Sep 2026 00:13:30 +0200 Subject: [PATCH] removing legacy --- client | 2 +- client-gui2 | 2 +- common/build.rs | 6 +----- common/proto/backup.proto | 1 - common/proto/table_definition.proto | 10 +--------- common/proto/table_validation.proto | 2 +- common/proto/tables_data.proto | 3 +-- common/src/proto/descriptor.bin | Bin 280776 -> 279998 bytes common/src/proto/komp_ac.table_definition.rs | 9 ++------- common/src/proto/komp_ac.table_validation.rs | 2 +- common/src/proto/komp_ac.tables_data.rs | 3 +-- komp-app/src/grpc.rs | 2 +- server | 2 +- web/src/pages/add_validation/state.rs | 2 +- web/src/pages/admin/ecb/mod.rs | 1 - web/src/pages/admin/ecb/workspace_logic.rs | 4 ---- 16 files changed, 13 insertions(+), 38 deletions(-) diff --git a/client b/client index 88b2e7a4..606afc53 160000 --- a/client +++ b/client @@ -1 +1 @@ -Subproject commit 88b2e7a4aa53b70a0257135e9091406bf4efd3f6 +Subproject commit 606afc534132f92d23f6701f6e9c9d06461b1dce diff --git a/client-gui2 b/client-gui2 index b3a3bdf5..aa8381d7 160000 --- a/client-gui2 +++ b/client-gui2 @@ -1 +1 @@ -Subproject commit b3a3bdf59bd5dce22e108608da1d5539c261d4cd +Subproject commit aa8381d7ed57ddfedf628f607aa48d991c663957 diff --git a/common/build.rs b/common/build.rs index 48f9ef4c..be1b9b59 100644 --- a/common/build.rs +++ b/common/build.rs @@ -43,10 +43,6 @@ fn main() -> Result<(), Box> { .type_attribute(".komp_ac.tables_data.GetAdjacentTableDataResponse", serde) .type_attribute(".komp_ac.tables_data.ResolvedTableLinkStatus", serde) .type_attribute(".komp_ac.tables_data.RowNavigationMode", serde) - .field_attribute( - ".komp_ac.table_definition.TableDetail.catalog_features", - "#[serde(default)]", - ) .field_attribute( ".komp_ac.table_validation.FieldValidation.locked", "#[serde(default)]", @@ -57,7 +53,7 @@ fn main() -> Result<(), Box> { ) .field_attribute( ".komp_ac.table_definition.ColumnDefinition.boolean_ledger", - "#[serde(default, alias = \"boolean_ledger_operator\")]", + "#[serde(default)]", ) .type_attribute( ".komp_ac.table_validation.CountMode", diff --git a/common/proto/backup.proto b/common/proto/backup.proto index d5408441..66633fad 100644 --- a/common/proto/backup.proto +++ b/common/proto/backup.proto @@ -104,7 +104,6 @@ message BackupOperationResponse { } message BackupInfoResponse { - reserved 6, 22, 23, 24; bool success = 1; string output = 2; string server_version = 3; diff --git a/common/proto/table_definition.proto b/common/proto/table_definition.proto index 9a37e53e..68513738 100644 --- a/common/proto/table_definition.proto +++ b/common/proto/table_definition.proto @@ -172,14 +172,12 @@ enum ModuleDataAccessDecision { message ModuleDataAccessRequest { string requesting_module = 1; - reserved 2, 3; ModuleDataExport data_export = 5; bool granted = 4; } message ModuleDataAccessUpdate { string requesting_module = 1; - reserved 2; ModuleDataExportId export_id = 4; ModuleDataAccessDecision decision = 3; } @@ -387,8 +385,7 @@ message PutTableDefinitionRequest { // overwriting a newer structural or presentation change. int64 expected_row_version = 7; - // New physical/catalog name. Empty, or equal to table_name, keeps the - // current name for backwards-compatible callers. + // Required physical/catalog name. Use table_name to keep the current name. string new_table_name = 8; } @@ -704,9 +701,6 @@ message TableDetail { // User-managed single-column indexes. Backend-managed indexes are omitted. repeated string indexes = 13; - // True when module-owned storage supports catalog-managed rows and settings. - bool catalog_managed = 14; - // Supported catalog operations, not user permissions or a guarantee that a // particular request is valid. Column restrictions, locks, existing data and // optimistic concurrency checks still apply. Unknown values must be ignored. @@ -938,8 +932,6 @@ enum ColumnTypeSpelling { // The name is the whole spelling: "text", "money", "gtin_13". COLUMN_TYPE_SPELLING_BARE = 0; - reserved 1; - // The name takes the name of another table in the same profile: // "link(adresar)". The column holds that table's id, and the server creates // the foreign key and its index. A picker offers the profile's other tables diff --git a/common/proto/table_validation.proto b/common/proto/table_validation.proto index d449f1e0..f46f1f2d 100644 --- a/common/proto/table_validation.proto +++ b/common/proto/table_validation.proto @@ -192,7 +192,7 @@ message UpdateFieldValidationRequest { string dataKey = 3; FieldValidation validation = 4; - // Omitted keeps the legacy full-replacement behavior. Otherwise, only the + // Required. Only the // selected FieldValidation properties are changed; selecting an absent // message property deliberately removes it. google.protobuf.FieldMask update_mask = 5; diff --git a/common/proto/tables_data.proto b/common/proto/tables_data.proto index bd8c6613..90b48381 100644 --- a/common/proto/tables_data.proto +++ b/common/proto/tables_data.proto @@ -199,8 +199,7 @@ message StageTableDataImportRequest { string import_id = 1; string table_name = 2; repeated TableDataImportRow rows = 3; - // Import-contract revision returned by GetTableImportDescriptor. A zero - // value is accepted for older clients and snapshots the current revision. + // Required positive import-contract revision returned by GetTableImportDescriptor. int64 expected_table_revision = 4; } diff --git a/common/src/proto/descriptor.bin b/common/src/proto/descriptor.bin index 589dddf9d089f0614fda26af82ec323a1f83a944..6df3fe9ae049f17a6591576c03dfb0c2b8b2c6d3 100644 GIT binary patch delta 27292 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 WFOrYE_R3Mbn>M21vw_j-s{ar0f!Ue> diff --git a/common/src/proto/komp_ac.table_definition.rs b/common/src/proto/komp_ac.table_definition.rs index 04528ac2..68076449 100644 --- a/common/src/proto/komp_ac.table_definition.rs +++ b/common/src/proto/komp_ac.table_definition.rs @@ -349,8 +349,7 @@ pub struct PutTableDefinitionRequest { /// overwriting a newer structural or presentation change. #[prost(int64, tag = "7")] pub expected_row_version: i64, - /// New physical/catalog name. Empty, or equal to table_name, keeps the - /// current name for backwards-compatible callers. + /// Required physical/catalog name. Use table_name to keep the current name. #[prost(string, tag = "8")] pub new_table_name: ::prost::alloc::string::String, } @@ -425,7 +424,7 @@ pub struct ColumnDefinition { /// Enables a Boolean ledger on Boolean columns. ANY means /// one true contribution wins; ALL means one false contribution wins. #[prost(enumeration = "BooleanLedgerOperator", tag = "7")] - #[serde(default, alias = "boolean_ledger_operator")] + #[serde(default)] pub boolean_ledger: i32, /// Defines this named column as a stored, read-only value copied through an /// existing LINK column. field_type and money metadata are inferred from the @@ -758,14 +757,10 @@ pub struct TableDetail { /// User-managed single-column indexes. Backend-managed indexes are omitted. #[prost(string, repeated, tag = "13")] pub indexes: ::prost::alloc::vec::Vec<::prost::alloc::string::String>, - /// True when module-owned storage supports catalog-managed rows and settings. - #[prost(bool, tag = "14")] - pub catalog_managed: bool, /// Supported catalog operations, not user permissions or a guarantee that a /// particular request is valid. Column restrictions, locks, existing data and /// optimistic concurrency checks still apply. Unknown values must be ignored. #[prost(enumeration = "CatalogFeature", repeated, tag = "15")] - #[serde(default)] pub catalog_features: ::prost::alloc::vec::Vec, } #[derive(serde::Serialize, serde::Deserialize)] diff --git a/common/src/proto/komp_ac.table_validation.rs b/common/src/proto/komp_ac.table_validation.rs index 5401c5a5..ef9eb999 100644 --- a/common/src/proto/komp_ac.table_validation.rs +++ b/common/src/proto/komp_ac.table_validation.rs @@ -159,7 +159,7 @@ pub struct UpdateFieldValidationRequest { pub data_key: ::prost::alloc::string::String, #[prost(message, optional, tag = "4")] pub validation: ::core::option::Option, - /// Omitted keeps the legacy full-replacement behavior. Otherwise, only the + /// Required. Only the /// selected FieldValidation properties are changed; selecting an absent /// message property deliberately removes it. #[prost(message, optional, tag = "5")] diff --git a/common/src/proto/komp_ac.tables_data.rs b/common/src/proto/komp_ac.tables_data.rs index 6a190133..58c17342 100644 --- a/common/src/proto/komp_ac.tables_data.rs +++ b/common/src/proto/komp_ac.tables_data.rs @@ -96,8 +96,7 @@ pub struct StageTableDataImportRequest { pub table_name: ::prost::alloc::string::String, #[prost(message, repeated, tag = "3")] pub rows: ::prost::alloc::vec::Vec, - /// Import-contract revision returned by GetTableImportDescriptor. A zero - /// value is accepted for older clients and snapshots the current revision. + /// Required positive import-contract revision returned by GetTableImportDescriptor. #[prost(int64, tag = "4")] pub expected_table_revision: i64, } diff --git a/komp-app/src/grpc.rs b/komp-app/src/grpc.rs index 05690c8d..9d21b26f 100644 --- a/komp-app/src/grpc.rs +++ b/komp-app/src/grpc.rs @@ -378,7 +378,7 @@ impl GrpcClient { table_name, data_key, validation: Some(validation), - update_mask: None, + update_mask: Some(prost_types::FieldMask { paths: ["limits", "pattern", "allowed_values", "external_validation_enabled", "mask", "required", "locked"].into_iter().map(String::from).collect() }), }; let request = self.authenticated_request(req)?; let resp = self diff --git a/server b/server index a4f361eb..3ed76c29 160000 --- a/server +++ b/server @@ -1 +1 @@ -Subproject commit a4f361ebad8a70de020e51b9741ae11f284b7b8b +Subproject commit 3ed76c2905dde17a398eba9fd4ac1d9e93a7f36b diff --git a/web/src/pages/add_validation/state.rs b/web/src/pages/add_validation/state.rs index d3c770a1..65e8cdfc 100644 --- a/web/src/pages/add_validation/state.rs +++ b/web/src/pages/add_validation/state.rs @@ -109,7 +109,7 @@ impl ValidationForm { table_name, data_key: data_key.clone(), validation: Some(self.validation(locale, data_key)?), - update_mask: None, + update_mask: Some(prost_types::FieldMask { paths: ["limits", "pattern", "allowed_values", "external_validation_enabled", "mask", "required", "locked"].into_iter().map(String::from).collect() }), }) } diff --git a/web/src/pages/admin/ecb/mod.rs b/web/src/pages/admin/ecb/mod.rs index b691d2bb..a56fd7d2 100644 --- a/web/src/pages/admin/ecb/mod.rs +++ b/web/src/pages/admin/ecb/mod.rs @@ -28,7 +28,6 @@ pub(crate) fn router() -> Router { "/admin/exchange-rates/evidence", post(workspace_logic::evidence), ) - .route("/admin/ecb", get(workspace_logic::legacy_ecb)) .route("/admin/ecb/provider", get(logic::page)) // The status card on its own, for the poll that keeps it live while a // batch is running. diff --git a/web/src/pages/admin/ecb/workspace_logic.rs b/web/src/pages/admin/ecb/workspace_logic.rs index 55d71ede..e6bcf50e 100644 --- a/web/src/pages/admin/ecb/workspace_logic.rs +++ b/web/src/pages/admin/ecb/workspace_logic.rs @@ -22,10 +22,6 @@ use super::{ workspace_ui, }; -pub(crate) async fn legacy_ecb() -> Redirect { - Redirect::permanent("/admin/exchange-rates#providers") -} - pub(crate) async fn page( State(state): State, headers: HeaderMap,