diff --git a/frontend/tauri/src/utils.rs b/frontend/tauri/src/utils.rs index 3edc5cb..160ae08 100644 --- a/frontend/tauri/src/utils.rs +++ b/frontend/tauri/src/utils.rs @@ -86,11 +86,33 @@ pub struct DiffRequestDto { pub indexes: Vec, #[serde(default)] pub deleted_indexes: Vec, + #[serde(default)] + pub foreign_keys: Vec, + #[serde(default)] + pub deleted_foreign_keys: Vec, + #[serde(default)] + pub check_constraints: Vec, + #[serde(default)] + pub deleted_checks: Vec, + #[serde(default)] + pub views: Vec, + #[serde(default)] + pub deleted_views: Vec, + #[serde(default)] + pub triggers: Vec, + #[serde(default)] + pub deleted_triggers: Vec, + #[serde(default)] + pub routines: Vec, + #[serde(default)] + pub deleted_routines: Vec, } #[derive(Deserialize, Debug)] #[serde(rename_all = "camelCase")] pub struct ColumnDefinitionDto { + #[serde(default)] + pub id: String, #[serde(default)] pub name: String, #[serde(default)] @@ -103,12 +125,16 @@ pub struct ColumnDefinitionDto { #[serde(default)] pub is_auto_increment: bool, #[serde(default)] + pub is_identity: bool, + #[serde(default)] pub comment: String, pub length: Option, pub precision: Option, pub scale: Option, #[serde(default = "default_original_index")] pub original_index: i32, + #[serde(rename = "_original")] + pub original: Option>, } fn default_true() -> bool { true } @@ -117,12 +143,99 @@ fn default_original_index() -> i32 { -1 } #[derive(Deserialize, Debug)] #[serde(rename_all = "camelCase")] pub struct IndexDefinitionDto { + #[serde(default)] + pub id: String, #[serde(default)] pub name: String, #[serde(default)] pub columns: Vec, #[serde(default)] pub is_unique: bool, + #[serde(rename = "_original")] + pub original: Option>, +} + +#[derive(Deserialize, Debug)] +#[serde(rename_all = "camelCase")] +pub struct ForeignKeyDefinitionDto { + #[serde(default)] + pub id: String, + #[serde(default)] + pub name: String, + #[serde(default)] + pub columns: Vec, + #[serde(default)] + pub referenced_table: String, + #[serde(default)] + pub referenced_columns: Vec, + #[serde(default)] + pub on_delete: String, + #[serde(default)] + pub on_update: String, + #[serde(rename = "_original")] + pub original: Option>, +} + +#[derive(Deserialize, Debug)] +#[serde(rename_all = "camelCase")] +pub struct CheckConstraintDefinitionDto { + #[serde(default)] + pub id: String, + #[serde(default)] + pub name: String, + #[serde(default)] + pub expression: String, + #[serde(rename = "_original")] + pub original: Option>, +} + +#[derive(Deserialize, Debug)] +#[serde(rename_all = "camelCase")] +pub struct ViewDefinitionDto { + #[serde(default)] + pub id: String, + #[serde(default)] + pub name: String, + #[serde(default)] + pub definition: String, + #[serde(rename = "_original")] + pub original: Option>, +} + +#[derive(Deserialize, Debug)] +#[serde(rename_all = "camelCase")] +pub struct TriggerDefinitionDto { + #[serde(default)] + pub id: String, + #[serde(default)] + pub name: String, + #[serde(default)] + pub timing: String, + #[serde(default)] + pub event: String, + #[serde(default)] + pub table_name: String, + #[serde(default)] + pub definition: String, + #[serde(default = "default_true")] + pub enabled: bool, + #[serde(rename = "_original")] + pub original: Option>, +} + +#[derive(Deserialize, Debug)] +#[serde(rename_all = "camelCase")] +pub struct RoutineDefinitionDto { + #[serde(default)] + pub id: String, + #[serde(default)] + pub name: String, + #[serde(default)] + pub r#type: String, + #[serde(default)] + pub definition: String, + #[serde(rename = "_original")] + pub original: Option>, } impl From for ColumnDefinition { @@ -139,10 +252,10 @@ impl From for ColumnDefinition { precision: dto.precision.map(|i| json_to_prost_value(serde_json::Value::Number(i.into()))), scale: dto.scale.map(|i| json_to_prost_value(serde_json::Value::Number(i.into()))), enum_values: vec![], - id: "".to_string(), + id: dto.id, is_default_expression: false, - is_identity: false, - original: None, + is_identity: dto.is_identity, + original: dto.original.map(|o| Box::new(ColumnDefinition::from(*o))), original_index: dto.original_index, pk_constraint_name: "".to_string(), } @@ -155,8 +268,77 @@ impl From for IndexDefinition { name: dto.name, columns: dto.columns, is_unique: dto.is_unique, - id: "".to_string(), - original: None, + id: dto.id, + original: dto.original.map(|o| Box::new(IndexDefinition::from(*o))), + } + } +} + +use crate::vstable::{ + CheckConstraintDefinition, ForeignKeyDefinition, RoutineDefinition, TriggerDefinition, + ViewDefinition, +}; + +impl From for ForeignKeyDefinition { + fn from(dto: ForeignKeyDefinitionDto) -> Self { + ForeignKeyDefinition { + id: dto.id, + name: dto.name, + columns: dto.columns, + referenced_table: dto.referenced_table, + referenced_columns: dto.referenced_columns, + on_delete: dto.on_delete, + on_update: dto.on_update, + original: dto.original.map(|o| Box::new(ForeignKeyDefinition::from(*o))), + } + } +} + +impl From for CheckConstraintDefinition { + fn from(dto: CheckConstraintDefinitionDto) -> Self { + CheckConstraintDefinition { + id: dto.id, + name: dto.name, + expression: dto.expression, + original: dto.original.map(|o| Box::new(CheckConstraintDefinition::from(*o))), + } + } +} + +impl From for ViewDefinition { + fn from(dto: ViewDefinitionDto) -> Self { + ViewDefinition { + id: dto.id, + name: dto.name, + definition: dto.definition, + original: dto.original.map(|o| Box::new(ViewDefinition::from(*o))), + } + } +} + +impl From for TriggerDefinition { + fn from(dto: TriggerDefinitionDto) -> Self { + TriggerDefinition { + id: dto.id, + name: dto.name, + timing: dto.timing, + event: dto.event, + table_name: dto.table_name, + definition: dto.definition, + enabled: dto.enabled, + original: dto.original.map(|o| Box::new(TriggerDefinition::from(*o))), + } + } +} + +impl From for RoutineDefinition { + fn from(dto: RoutineDefinitionDto) -> Self { + RoutineDefinition { + id: dto.id, + name: dto.name, + r#type: dto.r#type, + definition: dto.definition, + original: dto.original.map(|o| Box::new(RoutineDefinition::from(*o))), } } } @@ -172,16 +354,24 @@ impl From for DiffRequest { deleted_columns: dto.deleted_columns.into_iter().map(|c| c.into()).collect(), indexes: dto.indexes.into_iter().map(|i| i.into()).collect(), deleted_indexes: dto.deleted_indexes.into_iter().map(|i| i.into()).collect(), - foreign_keys: vec![], - deleted_foreign_keys: vec![], - check_constraints: vec![], - deleted_checks: vec![], - views: vec![], - deleted_views: vec![], - triggers: vec![], - deleted_triggers: vec![], - routines: vec![], - deleted_routines: vec![], + foreign_keys: dto.foreign_keys.into_iter().map(|f| f.into()).collect(), + deleted_foreign_keys: dto + .deleted_foreign_keys + .into_iter() + .map(|f| f.into()) + .collect(), + check_constraints: dto + .check_constraints + .into_iter() + .map(|c| c.into()) + .collect(), + deleted_checks: dto.deleted_checks.into_iter().map(|c| c.into()).collect(), + views: dto.views.into_iter().map(|v| v.into()).collect(), + deleted_views: dto.deleted_views.into_iter().map(|v| v.into()).collect(), + triggers: dto.triggers.into_iter().map(|t| t.into()).collect(), + deleted_triggers: dto.deleted_triggers.into_iter().map(|t| t.into()).collect(), + routines: dto.routines.into_iter().map(|r| r.into()).collect(), + deleted_routines: dto.deleted_routines.into_iter().map(|r| r.into()).collect(), config: None, } }