From 00d166c5db02b8ca60d61e3b5ee08b9ec558bd89 Mon Sep 17 00:00:00 2001 From: "nich.morgan" Date: Fri, 22 Sep 2023 20:19:50 -0300 Subject: [PATCH 01/20] insert event draft --- lambda-events/Cargo.toml | 7 +++- .../event/documentdb/events/commom_types.rs | 31 +++++++++++++++ .../event/documentdb/events/insert_event.rs | 30 +++++++++++++++ .../src/event/documentdb/events/mod.rs | 2 + lambda-events/src/event/documentdb/mod.rs | 38 +++++++++++++++++++ lambda-events/src/event/mod.rs | 4 ++ .../example-documentdb-insert-event.json | 35 +++++++++++++++++ 7 files changed, 146 insertions(+), 1 deletion(-) create mode 100644 lambda-events/src/event/documentdb/events/commom_types.rs create mode 100644 lambda-events/src/event/documentdb/events/insert_event.rs create mode 100644 lambda-events/src/event/documentdb/events/mod.rs create mode 100644 lambda-events/src/event/documentdb/mod.rs create mode 100644 lambda-events/src/fixtures/example-documentdb-insert-event.json diff --git a/lambda-events/Cargo.toml b/lambda-events/Cargo.toml index 27b577cb..766bc08b 100644 --- a/lambda-events/Cargo.toml +++ b/lambda-events/Cargo.toml @@ -30,7 +30,10 @@ chrono = { version = "0.4.23", default-features = false, features = [ "serde", "std", ], optional = true } -query_map = { version = "^0.7", features = ["serde", "url-query"], optional = true } +query_map = { version = "^0.7", features = [ + "serde", + "url-query", +], optional = true } flate2 = { version = "1.0.24", optional = true } [features] @@ -72,6 +75,7 @@ default = [ "sns", "sqs", "streams", + "documentdb", ] activemq = [] @@ -112,3 +116,4 @@ ses = ["chrono"] sns = ["chrono", "serde_with"] sqs = ["serde_with"] streams = [] +documentdb = [] diff --git a/lambda-events/src/event/documentdb/events/commom_types.rs b/lambda-events/src/event/documentdb/events/commom_types.rs new file mode 100644 index 00000000..eb70ad8a --- /dev/null +++ b/lambda-events/src/event/documentdb/events/commom_types.rs @@ -0,0 +1,31 @@ +use serde::{Deserialize, Serialize}; + +#[derive(Clone, Debug, Default, Deserialize, Eq, PartialEq, Serialize)] +pub struct DocumentId { + #[serde(rename = "_data")] + pub data: String, +} + +#[derive(Clone, Debug, Default, Deserialize, Eq, PartialEq, Serialize)] +pub struct DocumentKeyIdOid { + #[serde(rename = "$oid")] + pub oid: String, +} + +#[derive(Clone, Debug, Default, Deserialize, Eq, PartialEq, Serialize)] +pub struct DocumentKeyId { + #[serde(rename = "_id")] + pub id: DocumentKeyIdOid, +} + +#[derive(Clone, Debug, Default, Deserialize, Eq, PartialEq, Serialize)] +pub struct InnerTimestamp { + t: usize, + i: usize, +} + +#[derive(Clone, Debug, Default, Deserialize, Eq, PartialEq, Serialize)] +pub struct Timestamp { + #[serde(rename = "$timestamp")] + pub timestamp: InnerTimestamp, +} diff --git a/lambda-events/src/event/documentdb/events/insert_event.rs b/lambda-events/src/event/documentdb/events/insert_event.rs new file mode 100644 index 00000000..377500fd --- /dev/null +++ b/lambda-events/src/event/documentdb/events/insert_event.rs @@ -0,0 +1,30 @@ +use std::collections::HashMap; + +use serde::{Deserialize, Serialize}; +use serde_json::Value; + +use super::commom_types::{DocumentId, DocumentKeyId, Timestamp}; + +#[derive(Clone, Debug, Default, Deserialize, Eq, PartialEq, Serialize)] +#[serde(rename_all = "camelCase")] +pub struct InsertNs { + db: String, + coll: String, +} + +// TODO: Campos pendentes, carece insumo de teste + +#[derive(Clone, Debug, Default, Deserialize, Eq, PartialEq, Serialize)] +#[serde(rename_all = "camelCase")] +pub struct ChangeInsertEvent { + #[serde(rename = "_id")] + id: DocumentId, + cluster_time: Timestamp, + #[serde(default)] + #[serde(rename = "collectionUUID")] + collection_uuid: Option, + document_key: DocumentKeyId, + full_document: T, + ns: InsertNs, + operation_type: String, +} diff --git a/lambda-events/src/event/documentdb/events/mod.rs b/lambda-events/src/event/documentdb/events/mod.rs new file mode 100644 index 00000000..36dc59b8 --- /dev/null +++ b/lambda-events/src/event/documentdb/events/mod.rs @@ -0,0 +1,2 @@ +pub mod commom_types; +pub mod insert_event; diff --git a/lambda-events/src/event/documentdb/mod.rs b/lambda-events/src/event/documentdb/mod.rs new file mode 100644 index 00000000..fc4c638f --- /dev/null +++ b/lambda-events/src/event/documentdb/mod.rs @@ -0,0 +1,38 @@ +pub mod events; + +use std::collections::HashMap; + +use self::events::insert_event::ChangeInsertEvent; +use serde::{Deserialize, Serialize}; +use serde_json::Value; + +#[derive(Clone, Debug, Default, Deserialize, Eq, PartialEq, Serialize)] +pub struct DocumentDbInnerEvent { + pub event: ChangeInsertEvent>, +} + +#[derive(Clone, Debug, Default, Deserialize, Eq, PartialEq, Serialize)] +#[serde(rename_all = "camelCase")] +pub struct DocumentDbEvent { + #[serde(default)] + pub event_source_arn: Option, + pub events: Vec, + #[serde(default)] + pub event_source: Option, +} + +#[cfg(test)] +mod test { + use super::*; + + #[test] + #[cfg(feature = "documentdb")] + fn example_documentdb_insert_event() { + let data = include_bytes!("../../fixtures/example-documentdb-insert-event.json"); + + let parsed: DocumentDbEvent = serde_json::from_slice(data).unwrap(); + let output: String = serde_json::to_string(&parsed).unwrap(); + let reparsed: DocumentDbEvent = serde_json::from_slice(output.as_bytes()).unwrap(); + assert_eq!(parsed, reparsed); + } +} diff --git a/lambda-events/src/event/mod.rs b/lambda-events/src/event/mod.rs index 1aa56697..cfceb614 100644 --- a/lambda-events/src/event/mod.rs +++ b/lambda-events/src/event/mod.rs @@ -136,3 +136,7 @@ pub mod sqs; /// AWS Lambda event definitions for streams. #[cfg(feature = "streams")] pub mod streams; + +// AWS Lambda event definitions for DocumentDB +#[cfg(feature = "documentdb")] +pub mod documentdb; diff --git a/lambda-events/src/fixtures/example-documentdb-insert-event.json b/lambda-events/src/fixtures/example-documentdb-insert-event.json new file mode 100644 index 00000000..039c97ef --- /dev/null +++ b/lambda-events/src/fixtures/example-documentdb-insert-event.json @@ -0,0 +1,35 @@ +{ + "eventSourceArn": "arn:aws:rds:us-east-1:123456789012:cluster:canaryclusterb2a659a2-qo5tcmqkcl03", + "events": [ + { + "event": { + "_id": { + "_data": "0163eeb6e7000000090100000009000041e1" + }, + "clusterTime": { + "$timestamp": { + "t": 1676588775, + "i": 9 + } + }, + "documentKey": { + "_id": { + "$oid": "63eeb6e7d418cd98afb1c1d7" + } + }, + "fullDocument": { + "_id": { + "$oid": "63eeb6e7d418cd98afb1c1d7" + }, + "anyField": "sampleValue" + }, + "ns": { + "db": "test_database", + "coll": "test_collection" + }, + "operationType": "insert" + } + } + ], + "eventSource": "aws:docdb" +} From fd9d60f5d5cb16e4a244ab5b0a2351cc6df664ef Mon Sep 17 00:00:00 2001 From: "nich.morgan" Date: Fri, 22 Sep 2023 21:21:41 -0300 Subject: [PATCH 02/20] abstract change event --- .../event/documentdb/events/insert_event.rs | 3 -- lambda-events/src/event/documentdb/mod.rs | 29 ++++++++++++------- 2 files changed, 19 insertions(+), 13 deletions(-) diff --git a/lambda-events/src/event/documentdb/events/insert_event.rs b/lambda-events/src/event/documentdb/events/insert_event.rs index 377500fd..03df68eb 100644 --- a/lambda-events/src/event/documentdb/events/insert_event.rs +++ b/lambda-events/src/event/documentdb/events/insert_event.rs @@ -1,7 +1,4 @@ -use std::collections::HashMap; - use serde::{Deserialize, Serialize}; -use serde_json::Value; use super::commom_types::{DocumentId, DocumentKeyId, Timestamp}; diff --git a/lambda-events/src/event/documentdb/mod.rs b/lambda-events/src/event/documentdb/mod.rs index fc4c638f..c3c25734 100644 --- a/lambda-events/src/event/documentdb/mod.rs +++ b/lambda-events/src/event/documentdb/mod.rs @@ -1,22 +1,25 @@ pub mod events; -use std::collections::HashMap; - use self::events::insert_event::ChangeInsertEvent; use serde::{Deserialize, Serialize}; -use serde_json::Value; -#[derive(Clone, Debug, Default, Deserialize, Eq, PartialEq, Serialize)] -pub struct DocumentDbInnerEvent { - pub event: ChangeInsertEvent>, +#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)] +#[serde(untagged)] +pub enum ChangeEvent { + ChangeInsertEvent(ChangeInsertEvent), +} + +#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)] +pub struct DocumentDbInnerEvent { + pub event: ChangeEvent, } #[derive(Clone, Debug, Default, Deserialize, Eq, PartialEq, Serialize)] #[serde(rename_all = "camelCase")] -pub struct DocumentDbEvent { +pub struct DocumentDbEvent { #[serde(default)] pub event_source_arn: Option, - pub events: Vec, + pub events: Vec>, #[serde(default)] pub event_source: Option, } @@ -28,11 +31,17 @@ mod test { #[test] #[cfg(feature = "documentdb")] fn example_documentdb_insert_event() { + use std::collections::HashMap; + + use serde_json::Value; + let data = include_bytes!("../../fixtures/example-documentdb-insert-event.json"); - let parsed: DocumentDbEvent = serde_json::from_slice(data).unwrap(); + type Event = DocumentDbEvent>; + + let parsed: Event = serde_json::from_slice(data).unwrap(); let output: String = serde_json::to_string(&parsed).unwrap(); - let reparsed: DocumentDbEvent = serde_json::from_slice(output.as_bytes()).unwrap(); + let reparsed: Event = serde_json::from_slice(output.as_bytes()).unwrap(); assert_eq!(parsed, reparsed); } } From c85df32079db81519b70a95cb0e1a0ec3e687d23 Mon Sep 17 00:00:00 2001 From: erso Date: Sat, 23 Sep 2023 19:24:42 -0300 Subject: [PATCH 03/20] Added documentdb delete event --- .../event/documentdb/events/commom_types.rs | 7 +++++ .../event/documentdb/events/delete_event.rs | 25 ++++++++++++++++ .../event/documentdb/events/insert_event.rs | 14 ++++----- .../src/event/documentdb/events/mod.rs | 1 + lambda-events/src/event/documentdb/mod.rs | 23 ++++++++++++-- .../example-documentdb-delete-event.json | 30 +++++++++++++++++++ 6 files changed, 91 insertions(+), 9 deletions(-) create mode 100644 lambda-events/src/event/documentdb/events/delete_event.rs create mode 100644 lambda-events/src/fixtures/example-documentdb-delete-event.json diff --git a/lambda-events/src/event/documentdb/events/commom_types.rs b/lambda-events/src/event/documentdb/events/commom_types.rs index eb70ad8a..023ea7f5 100644 --- a/lambda-events/src/event/documentdb/events/commom_types.rs +++ b/lambda-events/src/event/documentdb/events/commom_types.rs @@ -1,5 +1,12 @@ use serde::{Deserialize, Serialize}; +#[derive(Clone, Debug, Default, Deserialize, Eq, PartialEq, Serialize)] +#[serde(rename_all = "camelCase")] +pub struct InsertNs { + db: String, + coll: String, +} + #[derive(Clone, Debug, Default, Deserialize, Eq, PartialEq, Serialize)] pub struct DocumentId { #[serde(rename = "_data")] diff --git a/lambda-events/src/event/documentdb/events/delete_event.rs b/lambda-events/src/event/documentdb/events/delete_event.rs new file mode 100644 index 00000000..08c68816 --- /dev/null +++ b/lambda-events/src/event/documentdb/events/delete_event.rs @@ -0,0 +1,25 @@ +use serde::{Deserialize, Serialize}; + +use super::commom_types::{DocumentId, DocumentKeyId, Timestamp, InsertNs}; + +#[derive(Clone, Debug, Default, Deserialize, Eq, PartialEq, Serialize)] +#[serde(rename_all = "camelCase")] +pub struct ChangeDeleteEvent<> { + #[serde(rename = "_id")] + id: DocumentId, + cluster_time: Timestamp, + #[serde(default)] + #[serde(rename = "collectionUUID")] + collection_uuid: Option, + document_key: DocumentKeyId, + #[serde(default)] + lsid: Option, + ns: InsertNs, + operation_type: String, + #[serde(default)] + operation_decription: Option, + #[serde(default)] + txt_number: Option, + #[serde(default)] + wall_time: Option +} \ No newline at end of file diff --git a/lambda-events/src/event/documentdb/events/insert_event.rs b/lambda-events/src/event/documentdb/events/insert_event.rs index 03df68eb..a76c09c3 100644 --- a/lambda-events/src/event/documentdb/events/insert_event.rs +++ b/lambda-events/src/event/documentdb/events/insert_event.rs @@ -1,13 +1,7 @@ use serde::{Deserialize, Serialize}; -use super::commom_types::{DocumentId, DocumentKeyId, Timestamp}; +use super::commom_types::{DocumentId, DocumentKeyId, Timestamp, InsertNs}; -#[derive(Clone, Debug, Default, Deserialize, Eq, PartialEq, Serialize)] -#[serde(rename_all = "camelCase")] -pub struct InsertNs { - db: String, - coll: String, -} // TODO: Campos pendentes, carece insumo de teste @@ -22,6 +16,12 @@ pub struct ChangeInsertEvent { collection_uuid: Option, document_key: DocumentKeyId, full_document: T, + #[serde(default)] + lsid: Option, ns: InsertNs, operation_type: String, + #[serde(default)] + txt_number: Option, + #[serde(default)] + wall_time: Option } diff --git a/lambda-events/src/event/documentdb/events/mod.rs b/lambda-events/src/event/documentdb/events/mod.rs index 36dc59b8..e6aabef3 100644 --- a/lambda-events/src/event/documentdb/events/mod.rs +++ b/lambda-events/src/event/documentdb/events/mod.rs @@ -1,2 +1,3 @@ pub mod commom_types; pub mod insert_event; +pub mod delete_event; \ No newline at end of file diff --git a/lambda-events/src/event/documentdb/mod.rs b/lambda-events/src/event/documentdb/mod.rs index c3c25734..8b4cfe50 100644 --- a/lambda-events/src/event/documentdb/mod.rs +++ b/lambda-events/src/event/documentdb/mod.rs @@ -1,12 +1,13 @@ pub mod events; -use self::events::insert_event::ChangeInsertEvent; +use self::events::{insert_event::ChangeInsertEvent, delete_event::ChangeDeleteEvent}; use serde::{Deserialize, Serialize}; #[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)] #[serde(untagged)] pub enum ChangeEvent { ChangeInsertEvent(ChangeInsertEvent), + ChangeDeleteEvent(ChangeDeleteEvent), } #[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)] @@ -44,4 +45,22 @@ mod test { let reparsed: Event = serde_json::from_slice(output.as_bytes()).unwrap(); assert_eq!(parsed, reparsed); } -} + + + #[test] + #[cfg(feature = "documentdb")] + fn example_documentdb_delete_event() { + use std::collections::HashMap; + + use serde_json::Value; + + let data = include_bytes!("../../fixtures/example-documentdb-delete-event.json"); + + type Event = DocumentDbEvent>; + + let parsed: Event = serde_json::from_slice(data).unwrap(); + let output: String = serde_json::to_string(&parsed).unwrap(); + let reparsed: Event = serde_json::from_slice(output.as_bytes()).unwrap(); + assert_eq!(parsed, reparsed); + } +} \ No newline at end of file diff --git a/lambda-events/src/fixtures/example-documentdb-delete-event.json b/lambda-events/src/fixtures/example-documentdb-delete-event.json new file mode 100644 index 00000000..fd9259da --- /dev/null +++ b/lambda-events/src/fixtures/example-documentdb-delete-event.json @@ -0,0 +1,30 @@ +{ + "eventSourceArn": "arn:aws:rds:us-east-1:123456789012:cluster:canaryclusterb2a659a2-qo5tcmqkcl03", + "events": [ + { + "event": { + "_id": { + "_data": "0163eeb6e7000000090100000009000041e1" + }, + "clusterTime": { + "$timestamp": { + "t": 1676588775, + "i": 9 + } + }, + "documentKey": { + "_id": { + "$oid": "63eeb6e7d418cd98afb1c1d7" + } + }, + "ns": { + "db": "test_database", + "coll": "test_collection" + }, + "operationType": "delete" + } + } + ], + "eventSource": "aws:docdb" + } + \ No newline at end of file From 55bce52af308128c398eb373cd25f40f060885a5 Mon Sep 17 00:00:00 2001 From: erso Date: Tue, 26 Sep 2023 07:51:10 -0300 Subject: [PATCH 04/20] Added support to change event drop --- .../src/event/documentdb/events/drop_event.rs | 26 ++++++++++++++++ .../src/event/documentdb/events/mod.rs | 3 +- lambda-events/src/event/documentdb/mod.rs | 22 +++++++++++++- .../example-documentdb-drop-event.json | 30 +++++++++++++++++++ 4 files changed, 79 insertions(+), 2 deletions(-) create mode 100644 lambda-events/src/event/documentdb/events/drop_event.rs create mode 100644 lambda-events/src/fixtures/example-documentdb-drop-event.json diff --git a/lambda-events/src/event/documentdb/events/drop_event.rs b/lambda-events/src/event/documentdb/events/drop_event.rs new file mode 100644 index 00000000..899de1bc --- /dev/null +++ b/lambda-events/src/event/documentdb/events/drop_event.rs @@ -0,0 +1,26 @@ +use serde::{Deserialize, Serialize}; + +use super::commom_types::{DocumentId, DocumentKeyId, Timestamp, InsertNs}; + + +// TODO: Campos pendentes, carece insumo de teste + +#[derive(Clone, Debug, Default, Deserialize, Eq, PartialEq, Serialize)] +#[serde(rename_all = "camelCase")] +pub struct ChangeDropEvent<> { + #[serde(rename = "_id")] + id: DocumentId, + cluster_time: Timestamp, + #[serde(default)] + #[serde(rename = "collectionUUID")] + collection_uuid: Option, + document_key: DocumentKeyId, + #[serde(default)] + lsid: Option, + ns: InsertNs, + operation_type: String, + #[serde(default)] + txt_number: Option, + #[serde(default)] + wall_time: Option +} diff --git a/lambda-events/src/event/documentdb/events/mod.rs b/lambda-events/src/event/documentdb/events/mod.rs index e6aabef3..809fb8b7 100644 --- a/lambda-events/src/event/documentdb/events/mod.rs +++ b/lambda-events/src/event/documentdb/events/mod.rs @@ -1,3 +1,4 @@ pub mod commom_types; pub mod insert_event; -pub mod delete_event; \ No newline at end of file +pub mod delete_event; +pub mod drop_event; \ No newline at end of file diff --git a/lambda-events/src/event/documentdb/mod.rs b/lambda-events/src/event/documentdb/mod.rs index 8b4cfe50..b777240c 100644 --- a/lambda-events/src/event/documentdb/mod.rs +++ b/lambda-events/src/event/documentdb/mod.rs @@ -1,6 +1,8 @@ pub mod events; -use self::events::{insert_event::ChangeInsertEvent, delete_event::ChangeDeleteEvent}; +use self::events::{insert_event::ChangeInsertEvent, + delete_event::ChangeDeleteEvent, + drop_event::ChangeDropEvent}; use serde::{Deserialize, Serialize}; #[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)] @@ -8,6 +10,7 @@ use serde::{Deserialize, Serialize}; pub enum ChangeEvent { ChangeInsertEvent(ChangeInsertEvent), ChangeDeleteEvent(ChangeDeleteEvent), + ChangeDropEvent(ChangeDropEvent), } #[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)] @@ -63,4 +66,21 @@ mod test { let reparsed: Event = serde_json::from_slice(output.as_bytes()).unwrap(); assert_eq!(parsed, reparsed); } + + #[test] + #[cfg(feature = "documentdb")] + fn example_documentdb_drop_event(){ + use std::collections::HashMap; + + use serde_json::Value; + + let data = include_bytes!("../../fixtures/example-documentdb-drop-event.json"); + + type Event = DocumentDbEvent>; + + let parsed: Event = serde_json::from_slice(data).unwrap(); + let output: String = serde_json::to_string(&parsed).unwrap(); + let reparsed: Event = serde_json::from_slice(output.as_bytes()).unwrap(); + assert_eq!(parsed, reparsed); + } } \ No newline at end of file diff --git a/lambda-events/src/fixtures/example-documentdb-drop-event.json b/lambda-events/src/fixtures/example-documentdb-drop-event.json new file mode 100644 index 00000000..89d8cc8f --- /dev/null +++ b/lambda-events/src/fixtures/example-documentdb-drop-event.json @@ -0,0 +1,30 @@ +{ + "eventSourceArn": "arn:aws:rds:us-east-1:123456789012:cluster:canaryclusterb2a659a2-qo5tcmqkcl03", + "events": [ + { + "event": { + "_id": { + "_data": "0163eeb6e7000000090100000009000041e1" + }, + "clusterTime": { + "$timestamp": { + "t": 1676588775, + "i": 9 + } + }, + "documentKey": { + "_id": { + "$oid": "63eeb6e7d418cd98afb1c1d7" + } + }, + "ns": { + "db": "test_database", + "coll": "test_collection" + }, + "operationType": "drop" + } + } + ], + "eventSource": "aws:docdb" + } + \ No newline at end of file From 04b46b5530df639a12723ea5f648c2127fb1dcb1 Mon Sep 17 00:00:00 2001 From: erso Date: Mon, 2 Oct 2023 11:02:11 -0300 Subject: [PATCH 05/20] Added support to dropDatabase Event --- .../event/documentdb/events/commom_types.rs | 4 +++- .../documentdb/events/drop_database_event.rs | 24 +++++++++++++++++++ .../src/event/documentdb/events/mod.rs | 3 ++- lambda-events/src/event/documentdb/mod.rs | 22 ++++++++++++++++- ...xample-documentdb-drop-database-event.json | 24 +++++++++++++++++++ 5 files changed, 74 insertions(+), 3 deletions(-) create mode 100644 lambda-events/src/event/documentdb/events/drop_database_event.rs create mode 100644 lambda-events/src/fixtures/example-documentdb-drop-database-event.json diff --git a/lambda-events/src/event/documentdb/events/commom_types.rs b/lambda-events/src/event/documentdb/events/commom_types.rs index 023ea7f5..92161b51 100644 --- a/lambda-events/src/event/documentdb/events/commom_types.rs +++ b/lambda-events/src/event/documentdb/events/commom_types.rs @@ -3,7 +3,9 @@ use serde::{Deserialize, Serialize}; #[derive(Clone, Debug, Default, Deserialize, Eq, PartialEq, Serialize)] #[serde(rename_all = "camelCase")] pub struct InsertNs { + #[serde(default)] db: String, + #[serde(default)] coll: String, } @@ -35,4 +37,4 @@ pub struct InnerTimestamp { pub struct Timestamp { #[serde(rename = "$timestamp")] pub timestamp: InnerTimestamp, -} +} \ No newline at end of file diff --git a/lambda-events/src/event/documentdb/events/drop_database_event.rs b/lambda-events/src/event/documentdb/events/drop_database_event.rs new file mode 100644 index 00000000..69e1093b --- /dev/null +++ b/lambda-events/src/event/documentdb/events/drop_database_event.rs @@ -0,0 +1,24 @@ +use serde::{Deserialize, Serialize}; + +use super::commom_types::{DocumentId, Timestamp, InsertNs}; + + +// TODO: Campos pendentes, carece insumo de teste + +#[derive(Clone, Debug, Default, Deserialize, Eq, PartialEq, Serialize)] +#[serde(rename_all = "camelCase")] +pub struct ChangeDropDatabaseEvent<> { + #[serde(rename = "_id")] + id: DocumentId, + cluster_time: Timestamp, + #[serde(default)] + lsid: Option, + ns: InsertNs, + operation_type: String, + #[serde(default)] + #[serde(rename = "txnNumber")] + txn_number: Option, + #[serde(default)] + #[serde(rename = "wallTime")] + wall_time: Option +} diff --git a/lambda-events/src/event/documentdb/events/mod.rs b/lambda-events/src/event/documentdb/events/mod.rs index 809fb8b7..a4f51cbe 100644 --- a/lambda-events/src/event/documentdb/events/mod.rs +++ b/lambda-events/src/event/documentdb/events/mod.rs @@ -1,4 +1,5 @@ pub mod commom_types; pub mod insert_event; pub mod delete_event; -pub mod drop_event; \ No newline at end of file +pub mod drop_event; +pub mod drop_database_event; \ No newline at end of file diff --git a/lambda-events/src/event/documentdb/mod.rs b/lambda-events/src/event/documentdb/mod.rs index b777240c..c212a850 100644 --- a/lambda-events/src/event/documentdb/mod.rs +++ b/lambda-events/src/event/documentdb/mod.rs @@ -2,7 +2,9 @@ pub mod events; use self::events::{insert_event::ChangeInsertEvent, delete_event::ChangeDeleteEvent, - drop_event::ChangeDropEvent}; + drop_event::ChangeDropEvent, + drop_database_event::ChangeDropDatabaseEvent}; + use serde::{Deserialize, Serialize}; #[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)] @@ -11,6 +13,7 @@ pub enum ChangeEvent { ChangeInsertEvent(ChangeInsertEvent), ChangeDeleteEvent(ChangeDeleteEvent), ChangeDropEvent(ChangeDropEvent), + ChangeDropDatabaseEvent(ChangeDropDatabaseEvent), } #[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)] @@ -83,4 +86,21 @@ mod test { let reparsed: Event = serde_json::from_slice(output.as_bytes()).unwrap(); assert_eq!(parsed, reparsed); } + + #[test] + #[cfg(feature = "documentdb")] + fn example_documentdb_drop_database_event(){ + use std::collections::HashMap; + + use serde_json::Value; + + let data = include_bytes!("../../fixtures/example-documentdb-drop-database-event.json"); + + type Event = DocumentDbEvent>; + + let parsed: Event = serde_json::from_slice(data).unwrap(); + let output: String = serde_json::to_string(&parsed).unwrap(); + let reparsed: Event = serde_json::from_slice(output.as_bytes()).unwrap(); + assert_eq!(parsed, reparsed); + } } \ No newline at end of file diff --git a/lambda-events/src/fixtures/example-documentdb-drop-database-event.json b/lambda-events/src/fixtures/example-documentdb-drop-database-event.json new file mode 100644 index 00000000..77a1cb93 --- /dev/null +++ b/lambda-events/src/fixtures/example-documentdb-drop-database-event.json @@ -0,0 +1,24 @@ +{ + "eventSourceArn": "arn:aws:rds:us-east-1:123456789012:cluster:canaryclusterb2a659a2-qo5tcmqkcl03", + "events": [ + { + "event": { + "_id": { + "_data": "0163eeb6e7000000090100000009000041e1" + }, + "clusterTime": { + "$timestamp": { + "t": 1676588775, + "i": 9 + } + }, + "ns": { + "db": "test_database" + }, + "operationType": "dropDatabase" + } + } + ], + "eventSource": "aws:docdb" + } + \ No newline at end of file From 3e1a07ba9b2de2d04caf1a2d4ec6be4d5cc4aacf Mon Sep 17 00:00:00 2001 From: "nich.morgan" Date: Tue, 3 Oct 2023 01:26:39 -0300 Subject: [PATCH 06/20] - MongoDB v6.0 Change Event Fields removed - ChangeEvent enum tagged - AnyDocument common type created --- .../event/documentdb/events/commom_types.rs | 5 ++ .../event/documentdb/events/delete_event.rs | 21 +++----- .../src/event/documentdb/events/drop_event.rs | 19 +++---- .../event/documentdb/events/insert_event.rs | 21 +++----- lambda-events/src/event/documentdb/mod.rs | 54 +++++++------------ .../example-documentdb-insert-event.json | 6 --- 6 files changed, 45 insertions(+), 81 deletions(-) diff --git a/lambda-events/src/event/documentdb/events/commom_types.rs b/lambda-events/src/event/documentdb/events/commom_types.rs index 023ea7f5..5890593d 100644 --- a/lambda-events/src/event/documentdb/events/commom_types.rs +++ b/lambda-events/src/event/documentdb/events/commom_types.rs @@ -1,4 +1,9 @@ +use std::collections::HashMap; + use serde::{Deserialize, Serialize}; +use serde_json::Value; + +pub type AnyDocument = HashMap; #[derive(Clone, Debug, Default, Deserialize, Eq, PartialEq, Serialize)] #[serde(rename_all = "camelCase")] diff --git a/lambda-events/src/event/documentdb/events/delete_event.rs b/lambda-events/src/event/documentdb/events/delete_event.rs index 08c68816..c80d2363 100644 --- a/lambda-events/src/event/documentdb/events/delete_event.rs +++ b/lambda-events/src/event/documentdb/events/delete_event.rs @@ -1,25 +1,20 @@ use serde::{Deserialize, Serialize}; -use super::commom_types::{DocumentId, DocumentKeyId, Timestamp, InsertNs}; +use super::commom_types::{AnyDocument, DocumentId, DocumentKeyId, InsertNs, Timestamp}; #[derive(Clone, Debug, Default, Deserialize, Eq, PartialEq, Serialize)] #[serde(rename_all = "camelCase")] -pub struct ChangeDeleteEvent<> { +pub struct ChangeDeleteEvent { #[serde(rename = "_id")] id: DocumentId, - cluster_time: Timestamp, #[serde(default)] - #[serde(rename = "collectionUUID")] - collection_uuid: Option, + cluster_time: Option, document_key: DocumentKeyId, #[serde(default)] - lsid: Option, + #[serde(rename = "lsid")] + ls_id: Option, ns: InsertNs, - operation_type: String, + // operation_type: String, #[serde(default)] - operation_decription: Option, - #[serde(default)] - txt_number: Option, - #[serde(default)] - wall_time: Option -} \ No newline at end of file + txn_number: Option, +} diff --git a/lambda-events/src/event/documentdb/events/drop_event.rs b/lambda-events/src/event/documentdb/events/drop_event.rs index 899de1bc..a53ec481 100644 --- a/lambda-events/src/event/documentdb/events/drop_event.rs +++ b/lambda-events/src/event/documentdb/events/drop_event.rs @@ -1,26 +1,21 @@ +use super::commom_types::{AnyDocument, DocumentId, DocumentKeyId, InsertNs, Timestamp}; use serde::{Deserialize, Serialize}; -use super::commom_types::{DocumentId, DocumentKeyId, Timestamp, InsertNs}; - - // TODO: Campos pendentes, carece insumo de teste #[derive(Clone, Debug, Default, Deserialize, Eq, PartialEq, Serialize)] #[serde(rename_all = "camelCase")] -pub struct ChangeDropEvent<> { +pub struct ChangeDropEvent { #[serde(rename = "_id")] id: DocumentId, cluster_time: Timestamp, #[serde(default)] - #[serde(rename = "collectionUUID")] - collection_uuid: Option, - document_key: DocumentKeyId, + document_key: Option, #[serde(default)] - lsid: Option, + #[serde(rename = "lsid")] + ls_id: Option, ns: InsertNs, - operation_type: String, - #[serde(default)] - txt_number: Option, + // operation_type: String, #[serde(default)] - wall_time: Option + txn_number: Option, } diff --git a/lambda-events/src/event/documentdb/events/insert_event.rs b/lambda-events/src/event/documentdb/events/insert_event.rs index a76c09c3..2098c0ba 100644 --- a/lambda-events/src/event/documentdb/events/insert_event.rs +++ b/lambda-events/src/event/documentdb/events/insert_event.rs @@ -1,27 +1,20 @@ use serde::{Deserialize, Serialize}; -use super::commom_types::{DocumentId, DocumentKeyId, Timestamp, InsertNs}; - - -// TODO: Campos pendentes, carece insumo de teste +use super::commom_types::{AnyDocument, DocumentId, DocumentKeyId, InsertNs, Timestamp}; #[derive(Clone, Debug, Default, Deserialize, Eq, PartialEq, Serialize)] #[serde(rename_all = "camelCase")] -pub struct ChangeInsertEvent { +pub struct ChangeInsertEvent { #[serde(rename = "_id")] id: DocumentId, - cluster_time: Timestamp, #[serde(default)] - #[serde(rename = "collectionUUID")] - collection_uuid: Option, + cluster_time: Option, document_key: DocumentKeyId, - full_document: T, #[serde(default)] - lsid: Option, + #[serde(rename = "lsid")] + ls_id: Option, ns: InsertNs, - operation_type: String, - #[serde(default)] - txt_number: Option, + // operation_type: String, #[serde(default)] - wall_time: Option + txn_number: Option, } diff --git a/lambda-events/src/event/documentdb/mod.rs b/lambda-events/src/event/documentdb/mod.rs index b777240c..4f79fd74 100644 --- a/lambda-events/src/event/documentdb/mod.rs +++ b/lambda-events/src/event/documentdb/mod.rs @@ -1,86 +1,68 @@ pub mod events; -use self::events::{insert_event::ChangeInsertEvent, - delete_event::ChangeDeleteEvent, - drop_event::ChangeDropEvent}; +use self::events::{delete_event::ChangeDeleteEvent, drop_event::ChangeDropEvent, insert_event::ChangeInsertEvent}; use serde::{Deserialize, Serialize}; #[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)] -#[serde(untagged)] -pub enum ChangeEvent { - ChangeInsertEvent(ChangeInsertEvent), - ChangeDeleteEvent(ChangeDeleteEvent), - ChangeDropEvent(ChangeDropEvent), +#[serde(tag = "operationType", rename_all = "camelCase")] +pub enum ChangeEvent { + Insert(ChangeInsertEvent), + Delete(ChangeDeleteEvent), + Drop(ChangeDropEvent), } #[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)] -pub struct DocumentDbInnerEvent { - pub event: ChangeEvent, +pub struct DocumentDbInnerEvent { + pub event: ChangeEvent, } #[derive(Clone, Debug, Default, Deserialize, Eq, PartialEq, Serialize)] #[serde(rename_all = "camelCase")] -pub struct DocumentDbEvent { +pub struct DocumentDbEvent { #[serde(default)] pub event_source_arn: Option, - pub events: Vec>, + pub events: Vec, #[serde(default)] pub event_source: Option, } #[cfg(test)] +#[cfg(feature = "documentdb")] mod test { use super::*; + pub type Event = DocumentDbEvent; + #[test] - #[cfg(feature = "documentdb")] fn example_documentdb_insert_event() { - use std::collections::HashMap; - - use serde_json::Value; - let data = include_bytes!("../../fixtures/example-documentdb-insert-event.json"); - type Event = DocumentDbEvent>; - let parsed: Event = serde_json::from_slice(data).unwrap(); let output: String = serde_json::to_string(&parsed).unwrap(); let reparsed: Event = serde_json::from_slice(output.as_bytes()).unwrap(); + assert_eq!(parsed, reparsed); } - #[test] - #[cfg(feature = "documentdb")] fn example_documentdb_delete_event() { - use std::collections::HashMap; - - use serde_json::Value; - let data = include_bytes!("../../fixtures/example-documentdb-delete-event.json"); - type Event = DocumentDbEvent>; - let parsed: Event = serde_json::from_slice(data).unwrap(); let output: String = serde_json::to_string(&parsed).unwrap(); let reparsed: Event = serde_json::from_slice(output.as_bytes()).unwrap(); + assert_eq!(parsed, reparsed); } #[test] - #[cfg(feature = "documentdb")] - fn example_documentdb_drop_event(){ - use std::collections::HashMap; - - use serde_json::Value; - + fn example_documentdb_drop_event() { let data = include_bytes!("../../fixtures/example-documentdb-drop-event.json"); - type Event = DocumentDbEvent>; - let parsed: Event = serde_json::from_slice(data).unwrap(); let output: String = serde_json::to_string(&parsed).unwrap(); let reparsed: Event = serde_json::from_slice(output.as_bytes()).unwrap(); + assert_eq!(parsed, reparsed); } -} \ No newline at end of file +} diff --git a/lambda-events/src/fixtures/example-documentdb-insert-event.json b/lambda-events/src/fixtures/example-documentdb-insert-event.json index 039c97ef..cd03e374 100644 --- a/lambda-events/src/fixtures/example-documentdb-insert-event.json +++ b/lambda-events/src/fixtures/example-documentdb-insert-event.json @@ -17,12 +17,6 @@ "$oid": "63eeb6e7d418cd98afb1c1d7" } }, - "fullDocument": { - "_id": { - "$oid": "63eeb6e7d418cd98afb1c1d7" - }, - "anyField": "sampleValue" - }, "ns": { "db": "test_database", "coll": "test_collection" From 9e63dc1a27d25eca2f37a0fd19d10b8573f2b294 Mon Sep 17 00:00:00 2001 From: Morgan Nicholson <55922364+nichmorgan@users.noreply.github.com> Date: Mon, 9 Oct 2023 20:41:25 -0300 Subject: [PATCH 07/20] replace event support --- .../src/event/documentdb/events/mod.rs | 5 ++-- .../event/documentdb/events/replace_event.rs | 20 +++++++++++++ lambda-events/src/event/documentdb/mod.rs | 17 ++++++++++- .../example-documentdb-replace-event.json | 29 +++++++++++++++++++ 4 files changed, 68 insertions(+), 3 deletions(-) create mode 100644 lambda-events/src/event/documentdb/events/replace_event.rs create mode 100644 lambda-events/src/fixtures/example-documentdb-replace-event.json diff --git a/lambda-events/src/event/documentdb/events/mod.rs b/lambda-events/src/event/documentdb/events/mod.rs index 809fb8b7..1cf6f4b8 100644 --- a/lambda-events/src/event/documentdb/events/mod.rs +++ b/lambda-events/src/event/documentdb/events/mod.rs @@ -1,4 +1,5 @@ pub mod commom_types; -pub mod insert_event; pub mod delete_event; -pub mod drop_event; \ No newline at end of file +pub mod drop_event; +pub mod insert_event; +pub mod replace_event; diff --git a/lambda-events/src/event/documentdb/events/replace_event.rs b/lambda-events/src/event/documentdb/events/replace_event.rs new file mode 100644 index 00000000..fcb6091a --- /dev/null +++ b/lambda-events/src/event/documentdb/events/replace_event.rs @@ -0,0 +1,20 @@ +use serde::{Deserialize, Serialize}; + +use super::commom_types::{AnyDocument, DocumentId, DocumentKeyId, InsertNs, Timestamp}; + +#[derive(Clone, Debug, Default, Deserialize, Eq, PartialEq, Serialize)] +#[serde(rename_all = "camelCase")] +pub struct ChangeReplaceEvent { + #[serde(rename = "_id")] + id: DocumentId, + #[serde(default)] + cluster_time: Option, + document_key: DocumentKeyId, + #[serde(default)] + #[serde(rename = "lsid")] + ls_id: Option, + ns: InsertNs, + // operation_type: String, + #[serde(default)] + txn_number: Option, +} diff --git a/lambda-events/src/event/documentdb/mod.rs b/lambda-events/src/event/documentdb/mod.rs index 4f79fd74..a79ee676 100644 --- a/lambda-events/src/event/documentdb/mod.rs +++ b/lambda-events/src/event/documentdb/mod.rs @@ -1,6 +1,9 @@ pub mod events; -use self::events::{delete_event::ChangeDeleteEvent, drop_event::ChangeDropEvent, insert_event::ChangeInsertEvent}; +use self::events::{ + delete_event::ChangeDeleteEvent, drop_event::ChangeDropEvent, insert_event::ChangeInsertEvent, + replace_event::ChangeReplaceEvent, +}; use serde::{Deserialize, Serialize}; #[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)] @@ -9,6 +12,7 @@ pub enum ChangeEvent { Insert(ChangeInsertEvent), Delete(ChangeDeleteEvent), Drop(ChangeDropEvent), + Replace(ChangeReplaceEvent), } #[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)] @@ -65,4 +69,15 @@ mod test { assert_eq!(parsed, reparsed); } + + #[test] + fn example_documentdb_replace_event() { + let data = include_bytes!("../../fixtures/example-documentdb-replace-event.json"); + + let parsed: Event = serde_json::from_slice(data).unwrap(); + let output: String = serde_json::to_string(&parsed).unwrap(); + let reparsed: Event = serde_json::from_slice(output.as_bytes()).unwrap(); + + assert_eq!(parsed, reparsed); + } } diff --git a/lambda-events/src/fixtures/example-documentdb-replace-event.json b/lambda-events/src/fixtures/example-documentdb-replace-event.json new file mode 100644 index 00000000..1c7fe559 --- /dev/null +++ b/lambda-events/src/fixtures/example-documentdb-replace-event.json @@ -0,0 +1,29 @@ +{ + "eventSourceArn": "arn:aws:rds:us-east-1:123456789012:cluster:canaryclusterb2a659a2-qo5tcmqkcl03", + "events": [ + { + "event": { + "_id": { + "_data": "0163eeb6e7000000090100000009000041e1" + }, + "operationType": "replace", + "clusterTime": { + "$timestamp": { + "t": 1676588775, + "i": 9 + } + }, + "ns": { + "db": "engineering", + "coll": "users" + }, + "documentKey": { + "_id": { + "$oid": "63eeb6e7d418cd98afb1c1d7" + } + } + } + } + ], + "eventSource": "aws:docdb" +} From c76c9d864588e6a181e2924c49e2ddd69b1abee0 Mon Sep 17 00:00:00 2001 From: Luca Barcelos Date: Mon, 9 Oct 2023 20:50:21 -0300 Subject: [PATCH 08/20] added support to invalidate event in documentdb --- .../documentdb/events/invalidate_event.rs | 13 ++++++++++++ .../src/event/documentdb/events/mod.rs | 3 ++- lambda-events/src/event/documentdb/mod.rs | 14 ++++++++++++- .../example-documentdb-invalidate-event.json | 20 +++++++++++++++++++ 4 files changed, 48 insertions(+), 2 deletions(-) create mode 100644 lambda-events/src/event/documentdb/events/invalidate_event.rs create mode 100644 lambda-events/src/fixtures/example-documentdb-invalidate-event.json diff --git a/lambda-events/src/event/documentdb/events/invalidate_event.rs b/lambda-events/src/event/documentdb/events/invalidate_event.rs new file mode 100644 index 00000000..47469ff9 --- /dev/null +++ b/lambda-events/src/event/documentdb/events/invalidate_event.rs @@ -0,0 +1,13 @@ +use serde::{Deserialize, Serialize}; + +use super::commom_types::{DocumentId, Timestamp}; + +#[derive(Clone, Debug, Default, Deserialize, Eq, PartialEq, Serialize)] +#[serde(rename_all = "camelCase")] +pub struct ChangeInvalidateEvent { + #[serde(rename = "_id")] + id: DocumentId, + #[serde(default)] + cluster_time: Option, + // operation_type: String, +} diff --git a/lambda-events/src/event/documentdb/events/mod.rs b/lambda-events/src/event/documentdb/events/mod.rs index 809fb8b7..a1a66b39 100644 --- a/lambda-events/src/event/documentdb/events/mod.rs +++ b/lambda-events/src/event/documentdb/events/mod.rs @@ -1,4 +1,5 @@ pub mod commom_types; pub mod insert_event; pub mod delete_event; -pub mod drop_event; \ No newline at end of file +pub mod drop_event; +pub mod invalidate_event; \ No newline at end of file diff --git a/lambda-events/src/event/documentdb/mod.rs b/lambda-events/src/event/documentdb/mod.rs index 4f79fd74..3277364e 100644 --- a/lambda-events/src/event/documentdb/mod.rs +++ b/lambda-events/src/event/documentdb/mod.rs @@ -1,6 +1,6 @@ pub mod events; -use self::events::{delete_event::ChangeDeleteEvent, drop_event::ChangeDropEvent, insert_event::ChangeInsertEvent}; +use self::events::{delete_event::ChangeDeleteEvent, drop_event::ChangeDropEvent, insert_event::ChangeInsertEvent, invalidate_event::ChangeInvalidateEvent}; use serde::{Deserialize, Serialize}; #[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)] @@ -9,6 +9,7 @@ pub enum ChangeEvent { Insert(ChangeInsertEvent), Delete(ChangeDeleteEvent), Drop(ChangeDropEvent), + Invalidate(ChangeInvalidateEvent), } #[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)] @@ -65,4 +66,15 @@ mod test { assert_eq!(parsed, reparsed); } + + #[test] + fn example_documentdb_invalidate_event() { + let data = include_bytes!("../../fixtures/example-documentdb-invalidate-event.json"); + + let parsed: Event = serde_json::from_slice(data).unwrap(); + let output: String = serde_json::to_string(&parsed).unwrap(); + let reparsed: Event = serde_json::from_slice(output.as_bytes()).unwrap(); + + assert_eq!(parsed, reparsed); + } } diff --git a/lambda-events/src/fixtures/example-documentdb-invalidate-event.json b/lambda-events/src/fixtures/example-documentdb-invalidate-event.json new file mode 100644 index 00000000..59f5af65 --- /dev/null +++ b/lambda-events/src/fixtures/example-documentdb-invalidate-event.json @@ -0,0 +1,20 @@ +{ + "eventSourceArn": "arn:aws:rds:us-east-1:123456789012:cluster:canaryclusterb2a659a2-qo5tcmqkcl03", + "events": [ + { + "event": { + "_id": { + "_data": "0163eeb6e7000000090100000009000041e1" + }, + "clusterTime": { + "$timestamp": { + "t": 1676588775, + "i": 9 + } + }, + "operationType": "invalidate" + } + } + ], + "eventSource": "aws:docdb" + } \ No newline at end of file From 2e1d4937d5392040c7d06c0720a20769ebe4e779 Mon Sep 17 00:00:00 2001 From: Vinicius Brisotti Date: Mon, 9 Oct 2023 22:46:51 -0300 Subject: [PATCH 09/20] Adding DocumentDB Rename event. --- .../event/documentdb/events/commom_types.rs | 2 ++ .../event/documentdb/events/insert_event.rs | 3 +- .../src/event/documentdb/events/mod.rs | 1 + .../event/documentdb/events/rename_event.rs | 23 +++++++++++++ lambda-events/src/event/documentdb/mod.rs | 14 +++++++- .../example-documentdb-rename-event.json | 33 +++++++++++++++++++ 6 files changed, 74 insertions(+), 2 deletions(-) create mode 100644 lambda-events/src/event/documentdb/events/rename_event.rs create mode 100644 lambda-events/src/fixtures/example-documentdb-rename-event.json diff --git a/lambda-events/src/event/documentdb/events/commom_types.rs b/lambda-events/src/event/documentdb/events/commom_types.rs index 5890593d..3b8523ce 100644 --- a/lambda-events/src/event/documentdb/events/commom_types.rs +++ b/lambda-events/src/event/documentdb/events/commom_types.rs @@ -28,6 +28,8 @@ pub struct DocumentKeyIdOid { pub struct DocumentKeyId { #[serde(rename = "_id")] pub id: DocumentKeyIdOid, + db: String, + coll: String, } #[derive(Clone, Debug, Default, Deserialize, Eq, PartialEq, Serialize)] diff --git a/lambda-events/src/event/documentdb/events/insert_event.rs b/lambda-events/src/event/documentdb/events/insert_event.rs index 2098c0ba..bbbebf59 100644 --- a/lambda-events/src/event/documentdb/events/insert_event.rs +++ b/lambda-events/src/event/documentdb/events/insert_event.rs @@ -4,6 +4,7 @@ use super::commom_types::{AnyDocument, DocumentId, DocumentKeyId, InsertNs, Time #[derive(Clone, Debug, Default, Deserialize, Eq, PartialEq, Serialize)] #[serde(rename_all = "camelCase")] + pub struct ChangeInsertEvent { #[serde(rename = "_id")] id: DocumentId, @@ -14,7 +15,7 @@ pub struct ChangeInsertEvent { #[serde(rename = "lsid")] ls_id: Option, ns: InsertNs, - // operation_type: String, + operation_type: String, #[serde(default)] txn_number: Option, } diff --git a/lambda-events/src/event/documentdb/events/mod.rs b/lambda-events/src/event/documentdb/events/mod.rs index 1cf6f4b8..8ba06821 100644 --- a/lambda-events/src/event/documentdb/events/mod.rs +++ b/lambda-events/src/event/documentdb/events/mod.rs @@ -3,3 +3,4 @@ pub mod delete_event; pub mod drop_event; pub mod insert_event; pub mod replace_event; +pub mod rename_event; diff --git a/lambda-events/src/event/documentdb/events/rename_event.rs b/lambda-events/src/event/documentdb/events/rename_event.rs new file mode 100644 index 00000000..02bbd248 --- /dev/null +++ b/lambda-events/src/event/documentdb/events/rename_event.rs @@ -0,0 +1,23 @@ +use serde::{Deserialize, Serialize}; + +use super::commom_types::{AnyDocument, DocumentId, DocumentKeyId, InsertNs, Timestamp}; + +#[derive(Clone, Debug, Default, Deserialize, Eq, PartialEq, Serialize)] +#[serde(rename_all = "camelCase")] + + +pub struct ChangeRenameEvent { + #[serde(rename = "_id")] + id: DocumentId, + #[serde(default)] + cluster_time: Option, + + #[serde(default)] + #[serde(rename = "lsid")] + ls_id: Option, + ns: InsertNs, + operation_type: String, + #[serde(default)] + txn_number: Option, + to: DocumentKeyId, +} \ No newline at end of file diff --git a/lambda-events/src/event/documentdb/mod.rs b/lambda-events/src/event/documentdb/mod.rs index a79ee676..0570470c 100644 --- a/lambda-events/src/event/documentdb/mod.rs +++ b/lambda-events/src/event/documentdb/mod.rs @@ -2,7 +2,7 @@ pub mod events; use self::events::{ delete_event::ChangeDeleteEvent, drop_event::ChangeDropEvent, insert_event::ChangeInsertEvent, - replace_event::ChangeReplaceEvent, + replace_event::ChangeReplaceEvent, rename_event::ChangeRenameEvent }; use serde::{Deserialize, Serialize}; @@ -13,6 +13,7 @@ pub enum ChangeEvent { Delete(ChangeDeleteEvent), Drop(ChangeDropEvent), Replace(ChangeReplaceEvent), + Rename(ChangeRenameEvent), } #[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)] @@ -80,4 +81,15 @@ mod test { assert_eq!(parsed, reparsed); } + + #[test] + fn example_documentdb_rename_event() { + let data = include_bytes!("../../fixtures/example-documentdb-rename-event.json"); + + let parsed: Event = serde_json::from_slice(data).unwrap(); + let output: String = serde_json::to_string(&parsed).unwrap(); + let reparsed: Event = serde_json::from_slice(output.as_bytes()).unwrap(); + + assert_eq!(parsed, reparsed); + } } diff --git a/lambda-events/src/fixtures/example-documentdb-rename-event.json b/lambda-events/src/fixtures/example-documentdb-rename-event.json new file mode 100644 index 00000000..94d73b17 --- /dev/null +++ b/lambda-events/src/fixtures/example-documentdb-rename-event.json @@ -0,0 +1,33 @@ +{ + "eventSourceArn": "arn:aws:rds:us-east-1:123456789012:cluster:canaryclusterb2a659a2-qo5tcmqkcl03", + "events": [ + { + "event": { + "_id": { + "_data": "0163eeb6e7000000090100000009000041e1" + }, + "clusterTime": { + "$timestamp": { + "t": 1676588775, + "i": 9 + } + }, + "documentKey": { + "_id": { + "$oid": "63eeb6e7d418cd98afb1c1d7" + } + }, + "ns": { + "db": "test_database", + "coll": "test_collection" + }, + "to":{ + "db": "test_database", + "coll": "test_collection" + }, + "operationType": "rename" + } + } + ], + "eventSource": "aws:docdb" + } \ No newline at end of file From 3c579b100d4d4025d6f0ef48b8dc7cf20cce2e34 Mon Sep 17 00:00:00 2001 From: Luca Barcelos Date: Tue, 10 Oct 2023 00:16:38 -0300 Subject: [PATCH 10/20] run cargo fmt --- lambda-events/src/event/documentdb/events/mod.rs | 4 ++-- lambda-events/src/event/documentdb/mod.rs | 5 ++++- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/lambda-events/src/event/documentdb/events/mod.rs b/lambda-events/src/event/documentdb/events/mod.rs index a1a66b39..47121774 100644 --- a/lambda-events/src/event/documentdb/events/mod.rs +++ b/lambda-events/src/event/documentdb/events/mod.rs @@ -1,5 +1,5 @@ pub mod commom_types; -pub mod insert_event; pub mod delete_event; pub mod drop_event; -pub mod invalidate_event; \ No newline at end of file +pub mod insert_event; +pub mod invalidate_event; diff --git a/lambda-events/src/event/documentdb/mod.rs b/lambda-events/src/event/documentdb/mod.rs index 3277364e..271f6cec 100644 --- a/lambda-events/src/event/documentdb/mod.rs +++ b/lambda-events/src/event/documentdb/mod.rs @@ -1,6 +1,9 @@ pub mod events; -use self::events::{delete_event::ChangeDeleteEvent, drop_event::ChangeDropEvent, insert_event::ChangeInsertEvent, invalidate_event::ChangeInvalidateEvent}; +use self::events::{ + delete_event::ChangeDeleteEvent, drop_event::ChangeDropEvent, insert_event::ChangeInsertEvent, + invalidate_event::ChangeInvalidateEvent, +}; use serde::{Deserialize, Serialize}; #[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)] From 1e00076dd19be6db885d2309ea67a9bf9893330a Mon Sep 17 00:00:00 2001 From: Vinicius Brisotti Date: Tue, 10 Oct 2023 13:16:28 -0300 Subject: [PATCH 11/20] Excluding 'to' parameter --- lambda-events/src/event/documentdb/events/insert_event.rs | 2 +- lambda-events/src/event/documentdb/events/rename_event.rs | 6 +++--- .../src/fixtures/example-documentdb-rename-event.json | 4 ---- 3 files changed, 4 insertions(+), 8 deletions(-) diff --git a/lambda-events/src/event/documentdb/events/insert_event.rs b/lambda-events/src/event/documentdb/events/insert_event.rs index bbbebf59..067dde9f 100644 --- a/lambda-events/src/event/documentdb/events/insert_event.rs +++ b/lambda-events/src/event/documentdb/events/insert_event.rs @@ -15,7 +15,7 @@ pub struct ChangeInsertEvent { #[serde(rename = "lsid")] ls_id: Option, ns: InsertNs, - operation_type: String, + //operation_type: String, #[serde(default)] txn_number: Option, } diff --git a/lambda-events/src/event/documentdb/events/rename_event.rs b/lambda-events/src/event/documentdb/events/rename_event.rs index 02bbd248..2c3fd582 100644 --- a/lambda-events/src/event/documentdb/events/rename_event.rs +++ b/lambda-events/src/event/documentdb/events/rename_event.rs @@ -1,6 +1,6 @@ use serde::{Deserialize, Serialize}; -use super::commom_types::{AnyDocument, DocumentId, DocumentKeyId, InsertNs, Timestamp}; +use super::commom_types::{AnyDocument, DocumentId, InsertNs, Timestamp}; #[derive(Clone, Debug, Default, Deserialize, Eq, PartialEq, Serialize)] #[serde(rename_all = "camelCase")] @@ -16,8 +16,8 @@ pub struct ChangeRenameEvent { #[serde(rename = "lsid")] ls_id: Option, ns: InsertNs, - operation_type: String, + //operation_type: String, #[serde(default)] txn_number: Option, - to: DocumentKeyId, + //to: DocumentKeyId, } \ No newline at end of file diff --git a/lambda-events/src/fixtures/example-documentdb-rename-event.json b/lambda-events/src/fixtures/example-documentdb-rename-event.json index 94d73b17..a517b7fc 100644 --- a/lambda-events/src/fixtures/example-documentdb-rename-event.json +++ b/lambda-events/src/fixtures/example-documentdb-rename-event.json @@ -21,10 +21,6 @@ "db": "test_database", "coll": "test_collection" }, - "to":{ - "db": "test_database", - "coll": "test_collection" - }, "operationType": "rename" } } From 093136c7c46ed2c2fead6cec1311e02e84e8094b Mon Sep 17 00:00:00 2001 From: Pedro Rabello Sato Date: Tue, 10 Oct 2023 13:10:52 -0300 Subject: [PATCH 12/20] Add DocumentDB Update event --- .../src/event/documentdb/events/mod.rs | 1 + .../event/documentdb/events/update_event.rs | 19 ++++++++++++ lambda-events/src/event/documentdb/mod.rs | 14 ++++++++- .../example-documentdb-update-event.json | 29 +++++++++++++++++++ 4 files changed, 62 insertions(+), 1 deletion(-) create mode 100644 lambda-events/src/event/documentdb/events/update_event.rs create mode 100644 lambda-events/src/fixtures/example-documentdb-update-event.json diff --git a/lambda-events/src/event/documentdb/events/mod.rs b/lambda-events/src/event/documentdb/events/mod.rs index 1cf6f4b8..5ce6fe64 100644 --- a/lambda-events/src/event/documentdb/events/mod.rs +++ b/lambda-events/src/event/documentdb/events/mod.rs @@ -3,3 +3,4 @@ pub mod delete_event; pub mod drop_event; pub mod insert_event; pub mod replace_event; +pub mod update_event; diff --git a/lambda-events/src/event/documentdb/events/update_event.rs b/lambda-events/src/event/documentdb/events/update_event.rs new file mode 100644 index 00000000..7b13c545 --- /dev/null +++ b/lambda-events/src/event/documentdb/events/update_event.rs @@ -0,0 +1,19 @@ +use serde::{Deserialize, Serialize}; + +use super::commom_types::{AnyDocument, DocumentId, DocumentKeyId, InsertNs, Timestamp}; + +#[derive(Clone, Debug, Default, Deserialize, Eq, PartialEq, Serialize)] +#[serde(rename_all = "camelCase")] +pub struct ChangeUpdateEvent { + #[serde(rename = "_id")] + id: DocumentId, + #[serde(default)] + cluster_time: Option, + document_key: DocumentKeyId, + #[serde(rename = "lsid")] + ls_id: Option, + ns: InsertNs, + // operation_type: String, + #[serde(default)] + txn_number: Option, +} diff --git a/lambda-events/src/event/documentdb/mod.rs b/lambda-events/src/event/documentdb/mod.rs index a79ee676..b1358206 100644 --- a/lambda-events/src/event/documentdb/mod.rs +++ b/lambda-events/src/event/documentdb/mod.rs @@ -2,7 +2,7 @@ pub mod events; use self::events::{ delete_event::ChangeDeleteEvent, drop_event::ChangeDropEvent, insert_event::ChangeInsertEvent, - replace_event::ChangeReplaceEvent, + replace_event::ChangeReplaceEvent, update_event::ChangeUpdateEvent, }; use serde::{Deserialize, Serialize}; @@ -13,6 +13,7 @@ pub enum ChangeEvent { Delete(ChangeDeleteEvent), Drop(ChangeDropEvent), Replace(ChangeReplaceEvent), + Update(ChangeUpdateEvent), } #[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)] @@ -80,4 +81,15 @@ mod test { assert_eq!(parsed, reparsed); } + + #[test] + fn example_documentdb_update_event() { + let data = include_bytes!("../../fixtures/example-documentdb-update-event.json"); + + let parsed: Event = serde_json::from_slice(data).unwrap(); + let output: String = serde_json::to_string(&parsed).unwrap(); + let reparsed: Event = serde_json::from_slice(output.as_bytes()).unwrap(); + + assert_eq!(parsed, reparsed); + } } diff --git a/lambda-events/src/fixtures/example-documentdb-update-event.json b/lambda-events/src/fixtures/example-documentdb-update-event.json new file mode 100644 index 00000000..dbb19159 --- /dev/null +++ b/lambda-events/src/fixtures/example-documentdb-update-event.json @@ -0,0 +1,29 @@ +{ + "eventSourceArn": "arn:aws:rds:us-east-1:123456789012:cluster:canaryclusterb2a659a2-qo5tcmqkcl03", + "events": [ + { + "event": { + "_id": { + "_data": "0163eeb6e7000000090100000009000041e1" + }, + "clusterTime": { + "$timestamp": { + "t": 1676588775, + "i": 9 + } + }, + "documentKey": { + "_id": { + "$oid": "63eeb6e7d418cd98afb1c1d7" + } + }, + "ns": { + "db": "test_database", + "coll": "test_collection" + }, + "operationType": "update" + } + } + ], + "eventSource": "aws:docdb" + } \ No newline at end of file From 81333dfbb699fcd72a92bdf91b7331c01130c164 Mon Sep 17 00:00:00 2001 From: Luca Barcelos Date: Wed, 11 Oct 2023 10:22:34 -0300 Subject: [PATCH 13/20] fixed 'to' parameter and run cargo fmt --- .../event/documentdb/events/commom_types.rs | 9 ++- .../src/event/documentdb/events/mod.rs | 2 +- .../event/documentdb/events/rename_event.rs | 9 ++- lambda-events/src/event/documentdb/mod.rs | 2 +- .../example-documentdb-rename-event.json | 56 ++++++++++--------- 5 files changed, 43 insertions(+), 35 deletions(-) diff --git a/lambda-events/src/event/documentdb/events/commom_types.rs b/lambda-events/src/event/documentdb/events/commom_types.rs index 3b8523ce..931a5786 100644 --- a/lambda-events/src/event/documentdb/events/commom_types.rs +++ b/lambda-events/src/event/documentdb/events/commom_types.rs @@ -12,6 +12,13 @@ pub struct InsertNs { coll: String, } +#[derive(Clone, Debug, Default, Deserialize, Eq, PartialEq, Serialize)] +#[serde(rename_all = "camelCase")] +pub struct RenameTo { + db: String, + coll: String, +} + #[derive(Clone, Debug, Default, Deserialize, Eq, PartialEq, Serialize)] pub struct DocumentId { #[serde(rename = "_data")] @@ -28,8 +35,6 @@ pub struct DocumentKeyIdOid { pub struct DocumentKeyId { #[serde(rename = "_id")] pub id: DocumentKeyIdOid, - db: String, - coll: String, } #[derive(Clone, Debug, Default, Deserialize, Eq, PartialEq, Serialize)] diff --git a/lambda-events/src/event/documentdb/events/mod.rs b/lambda-events/src/event/documentdb/events/mod.rs index 8ba06821..96b78c2a 100644 --- a/lambda-events/src/event/documentdb/events/mod.rs +++ b/lambda-events/src/event/documentdb/events/mod.rs @@ -2,5 +2,5 @@ pub mod commom_types; pub mod delete_event; pub mod drop_event; pub mod insert_event; -pub mod replace_event; pub mod rename_event; +pub mod replace_event; diff --git a/lambda-events/src/event/documentdb/events/rename_event.rs b/lambda-events/src/event/documentdb/events/rename_event.rs index 2c3fd582..37ca76f4 100644 --- a/lambda-events/src/event/documentdb/events/rename_event.rs +++ b/lambda-events/src/event/documentdb/events/rename_event.rs @@ -1,17 +1,16 @@ use serde::{Deserialize, Serialize}; -use super::commom_types::{AnyDocument, DocumentId, InsertNs, Timestamp}; +use super::commom_types::{AnyDocument, DocumentId, InsertNs, RenameTo, Timestamp}; #[derive(Clone, Debug, Default, Deserialize, Eq, PartialEq, Serialize)] #[serde(rename_all = "camelCase")] - pub struct ChangeRenameEvent { #[serde(rename = "_id")] id: DocumentId, #[serde(default)] cluster_time: Option, - + #[serde(default)] #[serde(rename = "lsid")] ls_id: Option, @@ -19,5 +18,5 @@ pub struct ChangeRenameEvent { //operation_type: String, #[serde(default)] txn_number: Option, - //to: DocumentKeyId, -} \ No newline at end of file + to: RenameTo, +} diff --git a/lambda-events/src/event/documentdb/mod.rs b/lambda-events/src/event/documentdb/mod.rs index 0570470c..adcb92d1 100644 --- a/lambda-events/src/event/documentdb/mod.rs +++ b/lambda-events/src/event/documentdb/mod.rs @@ -2,7 +2,7 @@ pub mod events; use self::events::{ delete_event::ChangeDeleteEvent, drop_event::ChangeDropEvent, insert_event::ChangeInsertEvent, - replace_event::ChangeReplaceEvent, rename_event::ChangeRenameEvent + rename_event::ChangeRenameEvent, replace_event::ChangeReplaceEvent, }; use serde::{Deserialize, Serialize}; diff --git a/lambda-events/src/fixtures/example-documentdb-rename-event.json b/lambda-events/src/fixtures/example-documentdb-rename-event.json index a517b7fc..65416470 100644 --- a/lambda-events/src/fixtures/example-documentdb-rename-event.json +++ b/lambda-events/src/fixtures/example-documentdb-rename-event.json @@ -1,29 +1,33 @@ { - "eventSourceArn": "arn:aws:rds:us-east-1:123456789012:cluster:canaryclusterb2a659a2-qo5tcmqkcl03", - "events": [ - { - "event": { + "eventSourceArn": "arn:aws:rds:us-east-1:123456789012:cluster:canaryclusterb2a659a2-qo5tcmqkcl03", + "events": [ + { + "event": { + "_id": { + "_data": "0163eeb6e7000000090100000009000041e1" + }, + "clusterTime": { + "$timestamp": { + "t": 1676588775, + "i": 9 + } + }, + "documentKey": { "_id": { - "_data": "0163eeb6e7000000090100000009000041e1" - }, - "clusterTime": { - "$timestamp": { - "t": 1676588775, - "i": 9 - } - }, - "documentKey": { - "_id": { - "$oid": "63eeb6e7d418cd98afb1c1d7" - } - }, - "ns": { - "db": "test_database", - "coll": "test_collection" - }, - "operationType": "rename" - } + "$oid": "63eeb6e7d418cd98afb1c1d7" + } + }, + "ns": { + "db": "test_database", + "coll": "test_collection" + }, + "to": { + "db": "test_database_new", + "coll": "test_collection_new" + }, + "operationType": "rename" } - ], - "eventSource": "aws:docdb" - } \ No newline at end of file + } + ], + "eventSource": "aws:docdb" +} \ No newline at end of file From d2a50a539c4d050183f7f39f55d2b842590ad2e8 Mon Sep 17 00:00:00 2001 From: Vinicius Brisotti Date: Wed, 11 Oct 2023 17:25:47 -0300 Subject: [PATCH 14/20] Refactoring 'Rename' event declaration as a single type not a commum type --- .../src/event/documentdb/events/commom_types.rs | 7 ------- .../src/event/documentdb/events/rename_event.rs | 9 ++++++++- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/lambda-events/src/event/documentdb/events/commom_types.rs b/lambda-events/src/event/documentdb/events/commom_types.rs index 931a5786..5890593d 100644 --- a/lambda-events/src/event/documentdb/events/commom_types.rs +++ b/lambda-events/src/event/documentdb/events/commom_types.rs @@ -12,13 +12,6 @@ pub struct InsertNs { coll: String, } -#[derive(Clone, Debug, Default, Deserialize, Eq, PartialEq, Serialize)] -#[serde(rename_all = "camelCase")] -pub struct RenameTo { - db: String, - coll: String, -} - #[derive(Clone, Debug, Default, Deserialize, Eq, PartialEq, Serialize)] pub struct DocumentId { #[serde(rename = "_data")] diff --git a/lambda-events/src/event/documentdb/events/rename_event.rs b/lambda-events/src/event/documentdb/events/rename_event.rs index 37ca76f4..26841c5e 100644 --- a/lambda-events/src/event/documentdb/events/rename_event.rs +++ b/lambda-events/src/event/documentdb/events/rename_event.rs @@ -1,6 +1,13 @@ use serde::{Deserialize, Serialize}; -use super::commom_types::{AnyDocument, DocumentId, InsertNs, RenameTo, Timestamp}; +use super::commom_types::{AnyDocument, DocumentId, InsertNs, Timestamp}; + +#[derive(Clone, Debug, Default, Deserialize, Eq, PartialEq, Serialize)] +#[serde(rename_all = "camelCase")] +pub struct RenameTo { + db: String, + coll: String, +} #[derive(Clone, Debug, Default, Deserialize, Eq, PartialEq, Serialize)] #[serde(rename_all = "camelCase")] From dbc86b0e00ae33a8a9d79dc108aa9bfe92b36f95 Mon Sep 17 00:00:00 2001 From: Morgan Nicholson <55922364+nichmorgan@users.noreply.github.com> Date: Thu, 12 Oct 2023 13:07:05 -0300 Subject: [PATCH 15/20] InsertNs renamed to DatabaseCollection for code reuse --- .../src/event/documentdb/events/commom_types.rs | 2 +- .../src/event/documentdb/events/delete_event.rs | 4 ++-- .../src/event/documentdb/events/drop_event.rs | 4 ++-- .../src/event/documentdb/events/insert_event.rs | 4 ++-- .../src/event/documentdb/events/rename_event.rs | 14 +++----------- .../src/event/documentdb/events/replace_event.rs | 4 ++-- 6 files changed, 12 insertions(+), 20 deletions(-) diff --git a/lambda-events/src/event/documentdb/events/commom_types.rs b/lambda-events/src/event/documentdb/events/commom_types.rs index 5890593d..b1898693 100644 --- a/lambda-events/src/event/documentdb/events/commom_types.rs +++ b/lambda-events/src/event/documentdb/events/commom_types.rs @@ -7,7 +7,7 @@ pub type AnyDocument = HashMap; #[derive(Clone, Debug, Default, Deserialize, Eq, PartialEq, Serialize)] #[serde(rename_all = "camelCase")] -pub struct InsertNs { +pub struct DatabaseCollection { db: String, coll: String, } diff --git a/lambda-events/src/event/documentdb/events/delete_event.rs b/lambda-events/src/event/documentdb/events/delete_event.rs index c80d2363..7761d62f 100644 --- a/lambda-events/src/event/documentdb/events/delete_event.rs +++ b/lambda-events/src/event/documentdb/events/delete_event.rs @@ -1,6 +1,6 @@ use serde::{Deserialize, Serialize}; -use super::commom_types::{AnyDocument, DocumentId, DocumentKeyId, InsertNs, Timestamp}; +use super::commom_types::{AnyDocument, DatabaseCollection, DocumentId, DocumentKeyId, Timestamp}; #[derive(Clone, Debug, Default, Deserialize, Eq, PartialEq, Serialize)] #[serde(rename_all = "camelCase")] @@ -13,7 +13,7 @@ pub struct ChangeDeleteEvent { #[serde(default)] #[serde(rename = "lsid")] ls_id: Option, - ns: InsertNs, + ns: DatabaseCollection, // operation_type: String, #[serde(default)] txn_number: Option, diff --git a/lambda-events/src/event/documentdb/events/drop_event.rs b/lambda-events/src/event/documentdb/events/drop_event.rs index a53ec481..89388179 100644 --- a/lambda-events/src/event/documentdb/events/drop_event.rs +++ b/lambda-events/src/event/documentdb/events/drop_event.rs @@ -1,4 +1,4 @@ -use super::commom_types::{AnyDocument, DocumentId, DocumentKeyId, InsertNs, Timestamp}; +use super::commom_types::{AnyDocument, DatabaseCollection, DocumentId, DocumentKeyId, Timestamp}; use serde::{Deserialize, Serialize}; // TODO: Campos pendentes, carece insumo de teste @@ -14,7 +14,7 @@ pub struct ChangeDropEvent { #[serde(default)] #[serde(rename = "lsid")] ls_id: Option, - ns: InsertNs, + ns: DatabaseCollection, // operation_type: String, #[serde(default)] txn_number: Option, diff --git a/lambda-events/src/event/documentdb/events/insert_event.rs b/lambda-events/src/event/documentdb/events/insert_event.rs index 067dde9f..09ab66b2 100644 --- a/lambda-events/src/event/documentdb/events/insert_event.rs +++ b/lambda-events/src/event/documentdb/events/insert_event.rs @@ -1,6 +1,6 @@ use serde::{Deserialize, Serialize}; -use super::commom_types::{AnyDocument, DocumentId, DocumentKeyId, InsertNs, Timestamp}; +use super::commom_types::{AnyDocument, DatabaseCollection, DocumentId, DocumentKeyId, Timestamp}; #[derive(Clone, Debug, Default, Deserialize, Eq, PartialEq, Serialize)] #[serde(rename_all = "camelCase")] @@ -14,7 +14,7 @@ pub struct ChangeInsertEvent { #[serde(default)] #[serde(rename = "lsid")] ls_id: Option, - ns: InsertNs, + ns: DatabaseCollection, //operation_type: String, #[serde(default)] txn_number: Option, diff --git a/lambda-events/src/event/documentdb/events/rename_event.rs b/lambda-events/src/event/documentdb/events/rename_event.rs index 26841c5e..8bc250fb 100644 --- a/lambda-events/src/event/documentdb/events/rename_event.rs +++ b/lambda-events/src/event/documentdb/events/rename_event.rs @@ -1,17 +1,9 @@ use serde::{Deserialize, Serialize}; -use super::commom_types::{AnyDocument, DocumentId, InsertNs, Timestamp}; +use super::commom_types::{AnyDocument, DatabaseCollection, DocumentId, Timestamp}; #[derive(Clone, Debug, Default, Deserialize, Eq, PartialEq, Serialize)] #[serde(rename_all = "camelCase")] -pub struct RenameTo { - db: String, - coll: String, -} - -#[derive(Clone, Debug, Default, Deserialize, Eq, PartialEq, Serialize)] -#[serde(rename_all = "camelCase")] - pub struct ChangeRenameEvent { #[serde(rename = "_id")] id: DocumentId, @@ -21,9 +13,9 @@ pub struct ChangeRenameEvent { #[serde(default)] #[serde(rename = "lsid")] ls_id: Option, - ns: InsertNs, + ns: DatabaseCollection, //operation_type: String, #[serde(default)] txn_number: Option, - to: RenameTo, + to: DatabaseCollection, } diff --git a/lambda-events/src/event/documentdb/events/replace_event.rs b/lambda-events/src/event/documentdb/events/replace_event.rs index fcb6091a..4a0e58ad 100644 --- a/lambda-events/src/event/documentdb/events/replace_event.rs +++ b/lambda-events/src/event/documentdb/events/replace_event.rs @@ -1,6 +1,6 @@ use serde::{Deserialize, Serialize}; -use super::commom_types::{AnyDocument, DocumentId, DocumentKeyId, InsertNs, Timestamp}; +use super::commom_types::{AnyDocument, DatabaseCollection, DocumentId, DocumentKeyId, Timestamp}; #[derive(Clone, Debug, Default, Deserialize, Eq, PartialEq, Serialize)] #[serde(rename_all = "camelCase")] @@ -13,7 +13,7 @@ pub struct ChangeReplaceEvent { #[serde(default)] #[serde(rename = "lsid")] ls_id: Option, - ns: InsertNs, + ns: DatabaseCollection, // operation_type: String, #[serde(default)] txn_number: Option, From 423f196834647e721ea5d14676b5c6fb975eb6cb Mon Sep 17 00:00:00 2001 From: Morgan Nicholson <55922364+nichmorgan@users.noreply.github.com> Date: Thu, 12 Oct 2023 13:11:52 -0300 Subject: [PATCH 16/20] unused field removed --- lambda-events/src/event/documentdb/events/drop_event.rs | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/lambda-events/src/event/documentdb/events/drop_event.rs b/lambda-events/src/event/documentdb/events/drop_event.rs index 89388179..866ce143 100644 --- a/lambda-events/src/event/documentdb/events/drop_event.rs +++ b/lambda-events/src/event/documentdb/events/drop_event.rs @@ -1,8 +1,6 @@ -use super::commom_types::{AnyDocument, DatabaseCollection, DocumentId, DocumentKeyId, Timestamp}; +use super::commom_types::{AnyDocument, DatabaseCollection, DocumentId, Timestamp}; use serde::{Deserialize, Serialize}; -// TODO: Campos pendentes, carece insumo de teste - #[derive(Clone, Debug, Default, Deserialize, Eq, PartialEq, Serialize)] #[serde(rename_all = "camelCase")] pub struct ChangeDropEvent { @@ -10,8 +8,6 @@ pub struct ChangeDropEvent { id: DocumentId, cluster_time: Timestamp, #[serde(default)] - document_key: Option, - #[serde(default)] #[serde(rename = "lsid")] ls_id: Option, ns: DatabaseCollection, From c385aad7923c7e20b33a19e7ce14d64e4b4849e1 Mon Sep 17 00:00:00 2001 From: Morgan Nicholson <55922364+nichmorgan@users.noreply.github.com> Date: Thu, 12 Oct 2023 16:29:32 -0300 Subject: [PATCH 17/20] cfg fix --- lambda-events/src/lib.rs | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/lambda-events/src/lib.rs b/lambda-events/src/lib.rs index 7402a8f4..e30d44b3 100644 --- a/lambda-events/src/lib.rs +++ b/lambda-events/src/lib.rs @@ -164,3 +164,7 @@ pub use event::sqs; /// AWS Lambda event definitions for streams. #[cfg(feature = "streams")] pub use event::streams; + +/// AWS Lambda event definitions for documentdb. +#[cfg(feature = "documentdb")] +pub use event::documentdb; From f81c573d3de72cbf104247f6782a9f078253d802 Mon Sep 17 00:00:00 2001 From: Morgan Nicholson <55922364+nichmorgan@users.noreply.github.com> Date: Wed, 18 Oct 2023 10:52:29 -0300 Subject: [PATCH 18/20] fix lines --- lambda-events/Cargo.toml | 11 ++--------- 1 file changed, 2 insertions(+), 9 deletions(-) diff --git a/lambda-events/Cargo.toml b/lambda-events/Cargo.toml index 70c7c407..375ef784 100644 --- a/lambda-events/Cargo.toml +++ b/lambda-events/Cargo.toml @@ -25,15 +25,8 @@ serde_with = { version = "^3", features = ["json"], optional = true } serde_json = "^1" serde_dynamo = { version = "^4.1", optional = true } bytes = { version = "1", features = ["serde"], optional = true } -chrono = { version = "0.4.23", default-features = false, features = [ - "clock", - "serde", - "std", -], optional = true } -query_map = { version = "^0.7", features = [ - "serde", - "url-query", -], optional = true } +chrono = { version = "0.4.23", default-features = false, features = ["clock", "serde", "std",], optional = true } +query_map = { version = "^0.7", features = ["serde", "url-query"], optional = true } flate2 = { version = "1.0.24", optional = true } [features] From 6900c7c10b86775c11c866e5ba3800dc47e2f54d Mon Sep 17 00:00:00 2001 From: Morgan Nicholson <55922364+nichmorgan@users.noreply.github.com> Date: Thu, 19 Oct 2023 10:14:04 -0300 Subject: [PATCH 19/20] fmt and makefile fixed --- Makefile | 1 + .../event/documentdb/events/commom_types.rs | 2 +- .../documentdb/events/drop_database_event.rs | 3 +-- .../src/event/documentdb/events/mod.rs | 2 +- .../event/documentdb/events/update_event.rs | 2 +- lambda-events/src/event/documentdb/mod.rs | 23 +++++++++---------- 6 files changed, 16 insertions(+), 17 deletions(-) diff --git a/Makefile b/Makefile index 544d08b7..d9a9adeb 100644 --- a/Makefile +++ b/Makefile @@ -101,6 +101,7 @@ check-event-features: cargo test --package aws_lambda_events --no-default-features --features sns cargo test --package aws_lambda_events --no-default-features --features sqs cargo test --package aws_lambda_events --no-default-features --features streams + cargo test --package aws_lambda_events --no-default-features --features documentdb fmt: cargo +nightly fmt --all \ No newline at end of file diff --git a/lambda-events/src/event/documentdb/events/commom_types.rs b/lambda-events/src/event/documentdb/events/commom_types.rs index 83edd287..5d1bdc19 100644 --- a/lambda-events/src/event/documentdb/events/commom_types.rs +++ b/lambda-events/src/event/documentdb/events/commom_types.rs @@ -41,4 +41,4 @@ pub struct InnerTimestamp { pub struct Timestamp { #[serde(rename = "$timestamp")] pub timestamp: InnerTimestamp, -} \ No newline at end of file +} diff --git a/lambda-events/src/event/documentdb/events/drop_database_event.rs b/lambda-events/src/event/documentdb/events/drop_database_event.rs index e0fb2495..c51e345c 100644 --- a/lambda-events/src/event/documentdb/events/drop_database_event.rs +++ b/lambda-events/src/event/documentdb/events/drop_database_event.rs @@ -1,7 +1,6 @@ use serde::{Deserialize, Serialize}; -use super::commom_types::{DocumentId, Timestamp, DatabaseCollection, AnyDocument}; - +use super::commom_types::{AnyDocument, DatabaseCollection, DocumentId, Timestamp}; #[derive(Clone, Debug, Default, Deserialize, Eq, PartialEq, Serialize)] #[serde(rename_all = "camelCase")] diff --git a/lambda-events/src/event/documentdb/events/mod.rs b/lambda-events/src/event/documentdb/events/mod.rs index f97d8834..c1c41b98 100644 --- a/lambda-events/src/event/documentdb/events/mod.rs +++ b/lambda-events/src/event/documentdb/events/mod.rs @@ -1,7 +1,7 @@ pub mod commom_types; pub mod delete_event; -pub mod drop_event; pub mod drop_database_event; +pub mod drop_event; pub mod insert_event; pub mod invalidate_event; pub mod rename_event; diff --git a/lambda-events/src/event/documentdb/events/update_event.rs b/lambda-events/src/event/documentdb/events/update_event.rs index a998bc72..8698485a 100644 --- a/lambda-events/src/event/documentdb/events/update_event.rs +++ b/lambda-events/src/event/documentdb/events/update_event.rs @@ -1,6 +1,6 @@ use serde::{Deserialize, Serialize}; -use super::commom_types::{AnyDocument, DocumentId, DocumentKeyId, DatabaseCollection, Timestamp}; +use super::commom_types::{AnyDocument, DatabaseCollection, DocumentId, DocumentKeyId, Timestamp}; #[derive(Clone, Debug, Default, Deserialize, Eq, PartialEq, Serialize)] #[serde(rename_all = "camelCase")] diff --git a/lambda-events/src/event/documentdb/mod.rs b/lambda-events/src/event/documentdb/mod.rs index 9adff079..67f7c9ad 100644 --- a/lambda-events/src/event/documentdb/mod.rs +++ b/lambda-events/src/event/documentdb/mod.rs @@ -1,14 +1,9 @@ pub mod events; use self::events::{ - delete_event::ChangeDeleteEvent, - drop_event::ChangeDropEvent, - insert_event::ChangeInsertEvent, - invalidate_event::ChangeInvalidateEvent, - replace_event::ChangeReplaceEvent, - update_event::ChangeUpdateEvent, - rename_event::ChangeRenameEvent, - drop_database_event::ChangeDropDatabaseEvent, + delete_event::ChangeDeleteEvent, drop_database_event::ChangeDropDatabaseEvent, drop_event::ChangeDropEvent, + insert_event::ChangeInsertEvent, invalidate_event::ChangeInvalidateEvent, rename_event::ChangeRenameEvent, + replace_event::ChangeReplaceEvent, update_event::ChangeUpdateEvent, }; use serde::{Deserialize, Serialize}; @@ -57,7 +52,7 @@ mod test { #[test] fn example_documentdb_insert_event() { - test_example(include_bytes!( "../../fixtures/example-documentdb-insert-event.json")); + test_example(include_bytes!("../../fixtures/example-documentdb-insert-event.json")); } #[test] @@ -87,11 +82,15 @@ mod test { #[test] fn example_documentdb_invalidate_event() { - test_example(include_bytes!("../../fixtures/example-documentdb-invalidate-event.json")); + test_example(include_bytes!( + "../../fixtures/example-documentdb-invalidate-event.json" + )); } #[test] - fn example_documentdb_drop_database_event(){ - test_example(include_bytes!("../../fixtures/example-documentdb-drop-database-event.json")); + fn example_documentdb_drop_database_event() { + test_example(include_bytes!( + "../../fixtures/example-documentdb-drop-database-event.json" + )); } } From 26313f59017287625be6b5b0b37d031797fbb344 Mon Sep 17 00:00:00 2001 From: Morgan Nicholson <55922364+nichmorgan@users.noreply.github.com> Date: Thu, 19 Oct 2023 11:01:15 -0300 Subject: [PATCH 20/20] makefile reord --- Makefile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Makefile b/Makefile index e1d67989..76e57e94 100644 --- a/Makefile +++ b/Makefile @@ -81,8 +81,10 @@ check-event-features: cargo test --package aws_lambda_events --no-default-features --features cognito cargo test --package aws_lambda_events --no-default-features --features config cargo test --package aws_lambda_events --no-default-features --features connect + cargo test --package aws_lambda_events --no-default-features --features documentdb cargo test --package aws_lambda_events --no-default-features --features dynamodb cargo test --package aws_lambda_events --no-default-features --features ecr_scan + cargo test --package aws_lambda_events --no-default-features --features eventbridge cargo test --package aws_lambda_events --no-default-features --features firehose cargo test --package aws_lambda_events --no-default-features --features iam cargo test --package aws_lambda_events --no-default-features --features iot @@ -101,8 +103,6 @@ check-event-features: cargo test --package aws_lambda_events --no-default-features --features sns cargo test --package aws_lambda_events --no-default-features --features sqs cargo test --package aws_lambda_events --no-default-features --features streams - cargo test --package aws_lambda_events --no-default-features --features documentdb - cargo test --package aws_lambda_events --no-default-features --features eventbridge fmt: cargo +nightly fmt --all \ No newline at end of file