validation2 I dont know if its correct???

This commit is contained in:
Priec
2025-10-26 16:44:15 +01:00
parent 11185282c4
commit 8ec1fa1761
5 changed files with 45 additions and 13 deletions

View File

@@ -12,6 +12,10 @@ fn main() -> Result<(), Box<dyn std::error::Error>> {
".komp_ac.table_validation.CharacterLimits", ".komp_ac.table_validation.CharacterLimits",
"#[derive(serde::Serialize, serde::Deserialize)]", "#[derive(serde::Serialize, serde::Deserialize)]",
) )
.type_attribute(
".komp_ac.table_validation.DisplayMask",
"#[derive(serde::Serialize, serde::Deserialize)]",
)
.type_attribute( .type_attribute(
".komp_ac.table_validation.TableValidationResponse", ".komp_ac.table_validation.TableValidationResponse",
"#[derive(serde::Serialize, serde::Deserialize)]", "#[derive(serde::Serialize, serde::Deserialize)]",

View File

@@ -23,9 +23,10 @@ message FieldValidation {
CharacterLimits limits = 10; CharacterLimits limits = 10;
// Future expansion: // Future expansion:
// PatternRules pattern = 11; // PatternRules pattern = 11;
// DisplayMask mask = 12; DisplayMask mask = 3;
// ExternalValidation external = 13; // ExternalValidation external = 13;
// CustomFormatter formatter = 14; // CustomFormatter formatter = 14;
bool required = 4;
} }
// Character length counting mode // Character length counting mode
@@ -49,6 +50,13 @@ message CharacterLimits {
CountMode countMode = 4; // defaults to CHARS if unspecified CountMode countMode = 4; // defaults to CHARS if unspecified
} }
// Mask for pretty display
message DisplayMask {
string pattern = 1; // e.g., "(###) ###-####" or "####-##-##"
string input_char = 2; // e.g., "#"
optional string template_char = 3; // e.g., "_"
}
// Service to fetch validations for a table // Service to fetch validations for a table
service TableValidationService { service TableValidationService {
rpc GetTableValidation(GetTableValidationRequest) rpc GetTableValidation(GetTableValidationRequest)

Binary file not shown.

View File

@@ -23,14 +23,16 @@ pub struct FieldValidation {
#[prost(string, tag = "1")] #[prost(string, tag = "1")]
pub data_key: ::prost::alloc::string::String, pub data_key: ::prost::alloc::string::String,
/// Current: only CharacterLimits. More rules can be added later. /// Current: only CharacterLimits. More rules can be added later.
///
/// Future expansion:
/// PatternRules pattern = 11;
/// DisplayMask mask = 12;
/// ExternalValidation external = 13;
/// CustomFormatter formatter = 14;
#[prost(message, optional, tag = "10")] #[prost(message, optional, tag = "10")]
pub limits: ::core::option::Option<CharacterLimits>, pub limits: ::core::option::Option<CharacterLimits>,
/// Future expansion:
/// PatternRules pattern = 11;
#[prost(message, optional, tag = "3")]
pub mask: ::core::option::Option<DisplayMask>,
/// ExternalValidation external = 13;
/// CustomFormatter formatter = 14;
#[prost(bool, tag = "4")]
pub required: bool,
} }
/// Character limit validation (Validation 1) /// Character limit validation (Validation 1)
#[derive(serde::Serialize, serde::Deserialize)] #[derive(serde::Serialize, serde::Deserialize)]
@@ -49,6 +51,20 @@ pub struct CharacterLimits {
#[prost(enumeration = "CountMode", tag = "4")] #[prost(enumeration = "CountMode", tag = "4")]
pub count_mode: i32, pub count_mode: i32,
} }
/// Mask for pretty display
#[derive(serde::Serialize, serde::Deserialize)]
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct DisplayMask {
/// e.g., "(###) ###-####" or "####-##-##"
#[prost(string, tag = "1")]
pub pattern: ::prost::alloc::string::String,
/// e.g., "#"
#[prost(string, tag = "2")]
pub input_char: ::prost::alloc::string::String,
/// e.g., "_"
#[prost(string, optional, tag = "3")]
pub template_char: ::core::option::Option<::prost::alloc::string::String>,
}
#[derive(serde::Serialize, serde::Deserialize)] #[derive(serde::Serialize, serde::Deserialize)]
#[derive(Clone, PartialEq, ::prost::Message)] #[derive(Clone, PartialEq, ::prost::Message)]
pub struct UpdateFieldValidationRequest { pub struct UpdateFieldValidationRequest {

View File

@@ -40,12 +40,16 @@ impl TableValidationService for TableValidationSvc {
// Set the data_key from the database row // Set the data_key from the database row
fv.data_key = r.data_key; fv.data_key = r.data_key;
// Skip if limits are all zero // Keep entries that have either meaningful limits or a mask
if let Some(lims) = &fv.limits { let has_meaningful_limits = fv
if lims.min == 0 && lims.max == 0 && lims.warn_at.is_none() { .limits
continue; .as_ref()
} .map_or(false, |l| l.min > 0 || l.max > 0 || l.warn_at.is_some());
} let has_mask = fv.mask.is_some();
if !has_meaningful_limits && !has_mask {
continue;
}
fields_out.push(fv); fields_out.push(fv);
} }
Err(e) => { Err(e) => {