Compare commits
	
		
			2 Commits
		
	
	
		
			8ce60ce278
			...
			62d5ad8dc2
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 62d5ad8dc2 | |||
| a2a47b276a | 
							
								
								
									
										521
									
								
								Cargo.lock
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										521
									
								
								Cargo.lock
									
									
									
										generated
									
									
									
								
							| @ -423,6 +423,12 @@ version = "0.21.7" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" | ||||
| 
 | ||||
| [[package]] | ||||
| name = "base64" | ||||
| version = "0.22.1" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" | ||||
| 
 | ||||
| [[package]] | ||||
| name = "base64ct" | ||||
| version = "1.6.0" | ||||
| @ -489,6 +495,56 @@ dependencies = [ | ||||
|  "piper", | ||||
| ] | ||||
| 
 | ||||
| [[package]] | ||||
| name = "bollard" | ||||
| version = "0.16.1" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "0aed08d3adb6ebe0eff737115056652670ae290f177759aac19c30456135f94c" | ||||
| dependencies = [ | ||||
|  "base64 0.22.1", | ||||
|  "bollard-stubs", | ||||
|  "bytes", | ||||
|  "futures-core", | ||||
|  "futures-util", | ||||
|  "hex", | ||||
|  "home", | ||||
|  "http", | ||||
|  "http-body-util", | ||||
|  "hyper", | ||||
|  "hyper-named-pipe", | ||||
|  "hyper-rustls", | ||||
|  "hyper-util", | ||||
|  "hyperlocal-next", | ||||
|  "log", | ||||
|  "pin-project-lite", | ||||
|  "rustls 0.22.4", | ||||
|  "rustls-native-certs", | ||||
|  "rustls-pemfile 2.1.2", | ||||
|  "rustls-pki-types", | ||||
|  "serde", | ||||
|  "serde_derive", | ||||
|  "serde_json", | ||||
|  "serde_repr", | ||||
|  "serde_urlencoded", | ||||
|  "thiserror", | ||||
|  "tokio", | ||||
|  "tokio-util", | ||||
|  "tower-service", | ||||
|  "url", | ||||
|  "winapi", | ||||
| ] | ||||
| 
 | ||||
| [[package]] | ||||
| name = "bollard-stubs" | ||||
| version = "1.44.0-rc.2" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "709d9aa1c37abb89d40f19f5d0ad6f0d88cb1581264e571c9350fc5bb89cf1c5" | ||||
| dependencies = [ | ||||
|  "serde", | ||||
|  "serde_repr", | ||||
|  "serde_with", | ||||
| ] | ||||
| 
 | ||||
| [[package]] | ||||
| name = "borsh" | ||||
| version = "1.5.0" | ||||
| @ -647,6 +703,16 @@ version = "0.9.6" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8" | ||||
| 
 | ||||
| [[package]] | ||||
| name = "core-foundation" | ||||
| version = "0.9.4" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "91e195e091a93c46f7102ec7818a2aa394e1e1771c3ab4825963fa03e45afb8f" | ||||
| dependencies = [ | ||||
|  "core-foundation-sys", | ||||
|  "libc", | ||||
| ] | ||||
| 
 | ||||
| [[package]] | ||||
| name = "core-foundation-sys" | ||||
| version = "0.8.6" | ||||
| @ -723,6 +789,41 @@ dependencies = [ | ||||
|  "memchr", | ||||
| ] | ||||
| 
 | ||||
| [[package]] | ||||
| name = "darling" | ||||
| version = "0.20.9" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "83b2eb4d90d12bdda5ed17de686c2acb4c57914f8f921b8da7e112b5a36f3fe1" | ||||
| dependencies = [ | ||||
|  "darling_core", | ||||
|  "darling_macro", | ||||
| ] | ||||
| 
 | ||||
| [[package]] | ||||
| name = "darling_core" | ||||
| version = "0.20.9" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "622687fe0bac72a04e5599029151f5796111b90f1baaa9b544d807a5e31cd120" | ||||
| dependencies = [ | ||||
|  "fnv", | ||||
|  "ident_case", | ||||
|  "proc-macro2", | ||||
|  "quote", | ||||
|  "strsim", | ||||
|  "syn 2.0.66", | ||||
| ] | ||||
| 
 | ||||
| [[package]] | ||||
| name = "darling_macro" | ||||
| version = "0.20.9" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "733cabb43482b1a1b53eee8583c2b9e8684d592215ea83efd305dd31bc2f0178" | ||||
| dependencies = [ | ||||
|  "darling_core", | ||||
|  "quote", | ||||
|  "syn 2.0.66", | ||||
| ] | ||||
| 
 | ||||
| [[package]] | ||||
| name = "der" | ||||
| version = "0.7.9" | ||||
| @ -756,6 +857,38 @@ dependencies = [ | ||||
|  "subtle", | ||||
| ] | ||||
| 
 | ||||
| [[package]] | ||||
| name = "dirs" | ||||
| version = "5.0.1" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "44c45a9d03d6676652bcb5e724c7e988de1acad23a711b5217ab9cbecbec2225" | ||||
| dependencies = [ | ||||
|  "dirs-sys", | ||||
| ] | ||||
| 
 | ||||
| [[package]] | ||||
| name = "dirs-sys" | ||||
| version = "0.4.1" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "520f05a5cbd335fae5a99ff7a6ab8627577660ee5cfd6a94a6a929b52ff0321c" | ||||
| dependencies = [ | ||||
|  "libc", | ||||
|  "option-ext", | ||||
|  "redox_users", | ||||
|  "windows-sys 0.48.0", | ||||
| ] | ||||
| 
 | ||||
| [[package]] | ||||
| name = "docker_credential" | ||||
| version = "1.3.1" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "31951f49556e34d90ed28342e1df7e1cb7a229c4cab0aecc627b5d91edd41d07" | ||||
| dependencies = [ | ||||
|  "base64 0.21.7", | ||||
|  "serde", | ||||
|  "serde_json", | ||||
| ] | ||||
| 
 | ||||
| [[package]] | ||||
| name = "dotenvy" | ||||
| version = "0.15.7" | ||||
| @ -950,6 +1083,7 @@ checksum = "645c6916888f6cb6350d2550b80fb63e734897a8498abe35cfb732b6487804b0" | ||||
| dependencies = [ | ||||
|  "futures-channel", | ||||
|  "futures-core", | ||||
|  "futures-executor", | ||||
|  "futures-io", | ||||
|  "futures-sink", | ||||
|  "futures-task", | ||||
| @ -1028,6 +1162,17 @@ dependencies = [ | ||||
|  "pin-project-lite", | ||||
| ] | ||||
| 
 | ||||
| [[package]] | ||||
| name = "futures-macro" | ||||
| version = "0.3.30" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "87750cf4b7a4c0625b1529e4c543c2182106e4dedc60a2a6455e00d212c489ac" | ||||
| dependencies = [ | ||||
|  "proc-macro2", | ||||
|  "quote", | ||||
|  "syn 2.0.66", | ||||
| ] | ||||
| 
 | ||||
| [[package]] | ||||
| name = "futures-sink" | ||||
| version = "0.3.30" | ||||
| @ -1049,6 +1194,7 @@ dependencies = [ | ||||
|  "futures-channel", | ||||
|  "futures-core", | ||||
|  "futures-io", | ||||
|  "futures-macro", | ||||
|  "futures-sink", | ||||
|  "futures-task", | ||||
|  "memchr", | ||||
| @ -1247,6 +1393,41 @@ dependencies = [ | ||||
|  "pin-project-lite", | ||||
|  "smallvec", | ||||
|  "tokio", | ||||
|  "want", | ||||
| ] | ||||
| 
 | ||||
| [[package]] | ||||
| name = "hyper-named-pipe" | ||||
| version = "0.1.0" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "73b7d8abf35697b81a825e386fc151e0d503e8cb5fcb93cc8669c376dfd6f278" | ||||
| dependencies = [ | ||||
|  "hex", | ||||
|  "hyper", | ||||
|  "hyper-util", | ||||
|  "pin-project-lite", | ||||
|  "tokio", | ||||
|  "tower-service", | ||||
|  "winapi", | ||||
| ] | ||||
| 
 | ||||
| [[package]] | ||||
| name = "hyper-rustls" | ||||
| version = "0.26.0" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "a0bea761b46ae2b24eb4aef630d8d1c398157b6fc29e6350ecf090a0b70c952c" | ||||
| dependencies = [ | ||||
|  "futures-util", | ||||
|  "http", | ||||
|  "hyper", | ||||
|  "hyper-util", | ||||
|  "log", | ||||
|  "rustls 0.22.4", | ||||
|  "rustls-native-certs", | ||||
|  "rustls-pki-types", | ||||
|  "tokio", | ||||
|  "tokio-rustls", | ||||
|  "tower-service", | ||||
| ] | ||||
| 
 | ||||
| [[package]] | ||||
| @ -1256,12 +1437,32 @@ source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "7b875924a60b96e5d7b9ae7b066540b1dd1cbd90d1828f54c92e02a283351c56" | ||||
| dependencies = [ | ||||
|  "bytes", | ||||
|  "futures-channel", | ||||
|  "futures-util", | ||||
|  "http", | ||||
|  "http-body", | ||||
|  "hyper", | ||||
|  "pin-project-lite", | ||||
|  "socket2 0.5.7", | ||||
|  "tokio", | ||||
|  "tower", | ||||
|  "tower-service", | ||||
|  "tracing", | ||||
| ] | ||||
| 
 | ||||
| [[package]] | ||||
| name = "hyperlocal-next" | ||||
| version = "0.9.0" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "acf569d43fa9848e510358c07b80f4adf34084ddc28c6a4a651ee8474c070dcc" | ||||
| dependencies = [ | ||||
|  "hex", | ||||
|  "http-body-util", | ||||
|  "hyper", | ||||
|  "hyper-util", | ||||
|  "pin-project-lite", | ||||
|  "tokio", | ||||
|  "tower-service", | ||||
| ] | ||||
| 
 | ||||
| [[package]] | ||||
| @ -1287,6 +1488,12 @@ dependencies = [ | ||||
|  "cc", | ||||
| ] | ||||
| 
 | ||||
| [[package]] | ||||
| name = "ident_case" | ||||
| version = "1.0.1" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" | ||||
| 
 | ||||
| [[package]] | ||||
| name = "idna" | ||||
| version = "0.5.0" | ||||
| @ -1297,6 +1504,17 @@ dependencies = [ | ||||
|  "unicode-normalization", | ||||
| ] | ||||
| 
 | ||||
| [[package]] | ||||
| name = "indexmap" | ||||
| version = "1.9.3" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" | ||||
| dependencies = [ | ||||
|  "autocfg", | ||||
|  "hashbrown 0.12.3", | ||||
|  "serde", | ||||
| ] | ||||
| 
 | ||||
| [[package]] | ||||
| name = "indexmap" | ||||
| version = "2.2.6" | ||||
| @ -1305,6 +1523,7 @@ checksum = "168fb715dda47215e360912c096649d23d58bf392ac62f73919e831745e40f26" | ||||
| dependencies = [ | ||||
|  "equivalent", | ||||
|  "hashbrown 0.14.5", | ||||
|  "serde", | ||||
| ] | ||||
| 
 | ||||
| [[package]] | ||||
| @ -1398,6 +1617,16 @@ version = "0.2.8" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "4ec2a862134d2a7d32d7983ddcdd1c4923530833c9f2ea1a44fc5fa473989058" | ||||
| 
 | ||||
| [[package]] | ||||
| name = "libredox" | ||||
| version = "0.1.3" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "c0ff37bd590ca25063e35af745c343cb7a0271906fb7b37e4813e8f79f00268d" | ||||
| dependencies = [ | ||||
|  "bitflags 2.5.0", | ||||
|  "libc", | ||||
| ] | ||||
| 
 | ||||
| [[package]] | ||||
| name = "libsqlite3-sys" | ||||
| version = "0.27.0" | ||||
| @ -1527,6 +1756,9 @@ dependencies = [ | ||||
|  "sea-orm", | ||||
|  "serde", | ||||
|  "serde_json", | ||||
|  "sqlx", | ||||
|  "testcontainers", | ||||
|  "testcontainers-modules", | ||||
|  "thiserror", | ||||
|  "tokio", | ||||
|  "tracing", | ||||
| @ -1658,6 +1890,18 @@ version = "1.19.0" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" | ||||
| 
 | ||||
| [[package]] | ||||
| name = "openssl-probe" | ||||
| version = "0.1.5" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" | ||||
| 
 | ||||
| [[package]] | ||||
| name = "option-ext" | ||||
| version = "0.2.0" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d" | ||||
| 
 | ||||
| [[package]] | ||||
| name = "ordered-float" | ||||
| version = "3.9.2" | ||||
| @ -1726,6 +1970,31 @@ dependencies = [ | ||||
|  "windows-targets 0.52.5", | ||||
| ] | ||||
| 
 | ||||
| [[package]] | ||||
| name = "parse-display" | ||||
| version = "0.9.0" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "06af5f9333eb47bd9ba8462d612e37a8328a5cb80b13f0af4de4c3b89f52dee5" | ||||
| dependencies = [ | ||||
|  "parse-display-derive", | ||||
|  "regex", | ||||
|  "regex-syntax 0.8.3", | ||||
| ] | ||||
| 
 | ||||
| [[package]] | ||||
| name = "parse-display-derive" | ||||
| version = "0.9.0" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "dc9252f259500ee570c75adcc4e317fa6f57a1e47747d622e0bf838002a7b790" | ||||
| dependencies = [ | ||||
|  "proc-macro2", | ||||
|  "quote", | ||||
|  "regex", | ||||
|  "regex-syntax 0.8.3", | ||||
|  "structmeta", | ||||
|  "syn 2.0.66", | ||||
| ] | ||||
| 
 | ||||
| [[package]] | ||||
| name = "paste" | ||||
| version = "1.0.15" | ||||
| @ -1985,6 +2254,17 @@ dependencies = [ | ||||
|  "bitflags 2.5.0", | ||||
| ] | ||||
| 
 | ||||
| [[package]] | ||||
| name = "redox_users" | ||||
| version = "0.4.5" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "bd283d9651eeda4b2a83a43c1c91b266c40fd76ecd39a50a8c630ae69dc72891" | ||||
| dependencies = [ | ||||
|  "getrandom", | ||||
|  "libredox", | ||||
|  "thiserror", | ||||
| ] | ||||
| 
 | ||||
| [[package]] | ||||
| name = "regex" | ||||
| version = "1.10.4" | ||||
| @ -2158,19 +2438,62 @@ source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "3f56a14d1f48b391359b22f731fd4bd7e43c97f3c50eee276f3aa09c94784d3e" | ||||
| dependencies = [ | ||||
|  "ring", | ||||
|  "rustls-webpki", | ||||
|  "rustls-webpki 0.101.7", | ||||
|  "sct", | ||||
| ] | ||||
| 
 | ||||
| [[package]] | ||||
| name = "rustls" | ||||
| version = "0.22.4" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "bf4ef73721ac7bcd79b2b315da7779d8fc09718c6b3d2d1b2d94850eb8c18432" | ||||
| dependencies = [ | ||||
|  "log", | ||||
|  "ring", | ||||
|  "rustls-pki-types", | ||||
|  "rustls-webpki 0.102.4", | ||||
|  "subtle", | ||||
|  "zeroize", | ||||
| ] | ||||
| 
 | ||||
| [[package]] | ||||
| name = "rustls-native-certs" | ||||
| version = "0.7.0" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "8f1fb85efa936c42c6d5fc28d2629bb51e4b2f4b8a5211e297d599cc5a093792" | ||||
| dependencies = [ | ||||
|  "openssl-probe", | ||||
|  "rustls-pemfile 2.1.2", | ||||
|  "rustls-pki-types", | ||||
|  "schannel", | ||||
|  "security-framework", | ||||
| ] | ||||
| 
 | ||||
| [[package]] | ||||
| name = "rustls-pemfile" | ||||
| version = "1.0.4" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "1c74cae0a4cf6ccbbf5f359f08efdf8ee7e1dc532573bf0db71968cb56b1448c" | ||||
| dependencies = [ | ||||
|  "base64", | ||||
|  "base64 0.21.7", | ||||
| ] | ||||
| 
 | ||||
| [[package]] | ||||
| name = "rustls-pemfile" | ||||
| version = "2.1.2" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "29993a25686778eb88d4189742cd713c9bce943bc54251a33509dc63cbacf73d" | ||||
| dependencies = [ | ||||
|  "base64 0.22.1", | ||||
|  "rustls-pki-types", | ||||
| ] | ||||
| 
 | ||||
| [[package]] | ||||
| name = "rustls-pki-types" | ||||
| version = "1.7.0" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "976295e77ce332211c0d24d92c0e83e50f5c5f046d11082cea19f3df13a3562d" | ||||
| 
 | ||||
| [[package]] | ||||
| name = "rustls-webpki" | ||||
| version = "0.101.7" | ||||
| @ -2181,6 +2504,17 @@ dependencies = [ | ||||
|  "untrusted", | ||||
| ] | ||||
| 
 | ||||
| [[package]] | ||||
| name = "rustls-webpki" | ||||
| version = "0.102.4" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "ff448f7e92e913c4b7d4c6d8e4540a1724b319b4152b8aef6d4cf8339712b33e" | ||||
| dependencies = [ | ||||
|  "ring", | ||||
|  "rustls-pki-types", | ||||
|  "untrusted", | ||||
| ] | ||||
| 
 | ||||
| [[package]] | ||||
| name = "rustversion" | ||||
| version = "1.0.17" | ||||
| @ -2193,6 +2527,15 @@ version = "1.0.18" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f" | ||||
| 
 | ||||
| [[package]] | ||||
| name = "schannel" | ||||
| version = "0.1.23" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "fbc91545643bcf3a0bbb6569265615222618bdf33ce4ffbbd13c4bbd4c093534" | ||||
| dependencies = [ | ||||
|  "windows-sys 0.52.0", | ||||
| ] | ||||
| 
 | ||||
| [[package]] | ||||
| name = "scopeguard" | ||||
| version = "1.2.0" | ||||
| @ -2374,6 +2717,29 @@ version = "4.1.0" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "1c107b6f4780854c8b126e228ea8869f4d7b71260f962fefb57b996b8959ba6b" | ||||
| 
 | ||||
| [[package]] | ||||
| name = "security-framework" | ||||
| version = "2.11.0" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "c627723fd09706bacdb5cf41499e95098555af3c3c29d014dc3c458ef6be11c0" | ||||
| dependencies = [ | ||||
|  "bitflags 2.5.0", | ||||
|  "core-foundation", | ||||
|  "core-foundation-sys", | ||||
|  "libc", | ||||
|  "security-framework-sys", | ||||
| ] | ||||
| 
 | ||||
| [[package]] | ||||
| name = "security-framework-sys" | ||||
| version = "2.11.0" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "317936bbbd05227752583946b9e66d7ce3b489f84e11a94a510b4437fef407d7" | ||||
| dependencies = [ | ||||
|  "core-foundation-sys", | ||||
|  "libc", | ||||
| ] | ||||
| 
 | ||||
| [[package]] | ||||
| name = "serde" | ||||
| version = "1.0.203" | ||||
| @ -2415,6 +2781,17 @@ dependencies = [ | ||||
|  "serde", | ||||
| ] | ||||
| 
 | ||||
| [[package]] | ||||
| name = "serde_repr" | ||||
| version = "0.1.19" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "6c64451ba24fc7a6a2d60fc75dd9c83c90903b19028d4eff35e88fc1e86564e9" | ||||
| dependencies = [ | ||||
|  "proc-macro2", | ||||
|  "quote", | ||||
|  "syn 2.0.66", | ||||
| ] | ||||
| 
 | ||||
| [[package]] | ||||
| name = "serde_urlencoded" | ||||
| version = "0.7.1" | ||||
| @ -2427,6 +2804,36 @@ dependencies = [ | ||||
|  "serde", | ||||
| ] | ||||
| 
 | ||||
| [[package]] | ||||
| name = "serde_with" | ||||
| version = "3.8.1" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "0ad483d2ab0149d5a5ebcd9972a3852711e0153d863bf5a5d0391d28883c4a20" | ||||
| dependencies = [ | ||||
|  "base64 0.22.1", | ||||
|  "chrono", | ||||
|  "hex", | ||||
|  "indexmap 1.9.3", | ||||
|  "indexmap 2.2.6", | ||||
|  "serde", | ||||
|  "serde_derive", | ||||
|  "serde_json", | ||||
|  "serde_with_macros", | ||||
|  "time", | ||||
| ] | ||||
| 
 | ||||
| [[package]] | ||||
| name = "serde_with_macros" | ||||
| version = "3.8.1" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "65569b702f41443e8bc8bbb1c5779bd0450bbe723b56198980e80ec45780bce2" | ||||
| dependencies = [ | ||||
|  "darling", | ||||
|  "proc-macro2", | ||||
|  "quote", | ||||
|  "syn 2.0.66", | ||||
| ] | ||||
| 
 | ||||
| [[package]] | ||||
| name = "sha1" | ||||
| version = "0.10.6" | ||||
| @ -2590,15 +2997,15 @@ dependencies = [ | ||||
|  "futures-util", | ||||
|  "hashlink", | ||||
|  "hex", | ||||
|  "indexmap", | ||||
|  "indexmap 2.2.6", | ||||
|  "log", | ||||
|  "memchr", | ||||
|  "once_cell", | ||||
|  "paste", | ||||
|  "percent-encoding", | ||||
|  "rust_decimal", | ||||
|  "rustls", | ||||
|  "rustls-pemfile", | ||||
|  "rustls 0.21.12", | ||||
|  "rustls-pemfile 1.0.4", | ||||
|  "serde", | ||||
|  "serde_json", | ||||
|  "sha2", | ||||
| @ -2660,7 +3067,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "1ed31390216d20e538e447a7a9b959e06ed9fc51c37b514b46eb758016ecd418" | ||||
| dependencies = [ | ||||
|  "atoi", | ||||
|  "base64", | ||||
|  "base64 0.21.7", | ||||
|  "bigdecimal", | ||||
|  "bitflags 2.5.0", | ||||
|  "byteorder", | ||||
| @ -2707,7 +3114,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "7c824eb80b894f926f89a0b9da0c7f435d27cdd35b8c655b114e58223918577e" | ||||
| dependencies = [ | ||||
|  "atoi", | ||||
|  "base64", | ||||
|  "base64 0.21.7", | ||||
|  "bigdecimal", | ||||
|  "bitflags 2.5.0", | ||||
|  "byteorder", | ||||
| @ -2793,6 +3200,29 @@ version = "0.11.1" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" | ||||
| 
 | ||||
| [[package]] | ||||
| name = "structmeta" | ||||
| version = "0.3.0" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "2e1575d8d40908d70f6fd05537266b90ae71b15dbbe7a8b7dffa2b759306d329" | ||||
| dependencies = [ | ||||
|  "proc-macro2", | ||||
|  "quote", | ||||
|  "structmeta-derive", | ||||
|  "syn 2.0.66", | ||||
| ] | ||||
| 
 | ||||
| [[package]] | ||||
| name = "structmeta-derive" | ||||
| version = "0.3.0" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "152a0b65a590ff6c3da95cabe2353ee04e6167c896b28e3b14478c2636c922fc" | ||||
| dependencies = [ | ||||
|  "proc-macro2", | ||||
|  "quote", | ||||
|  "syn 2.0.66", | ||||
| ] | ||||
| 
 | ||||
| [[package]] | ||||
| name = "strum" | ||||
| version = "0.26.2" | ||||
| @ -2869,6 +3299,41 @@ dependencies = [ | ||||
|  "windows-sys 0.52.0", | ||||
| ] | ||||
| 
 | ||||
| [[package]] | ||||
| name = "testcontainers" | ||||
| version = "0.17.0" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "025e0ac563d543e0354d984540e749859a83dbe5c0afb8d458dc48d91cef2d6a" | ||||
| dependencies = [ | ||||
|  "async-trait", | ||||
|  "bollard", | ||||
|  "bollard-stubs", | ||||
|  "bytes", | ||||
|  "dirs", | ||||
|  "docker_credential", | ||||
|  "futures", | ||||
|  "log", | ||||
|  "memchr", | ||||
|  "parse-display", | ||||
|  "serde", | ||||
|  "serde_json", | ||||
|  "serde_with", | ||||
|  "thiserror", | ||||
|  "tokio", | ||||
|  "tokio-stream", | ||||
|  "tokio-util", | ||||
|  "url", | ||||
| ] | ||||
| 
 | ||||
| [[package]] | ||||
| name = "testcontainers-modules" | ||||
| version = "0.5.0" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "87dc086b8c791e5696de6de4e0d79de2cb9f8a1ac4552d46d6211a42d81d6d0f" | ||||
| dependencies = [ | ||||
|  "testcontainers", | ||||
| ] | ||||
| 
 | ||||
| [[package]] | ||||
| name = "thiserror" | ||||
| version = "1.0.61" | ||||
| @ -2975,6 +3440,17 @@ dependencies = [ | ||||
|  "syn 2.0.66", | ||||
| ] | ||||
| 
 | ||||
| [[package]] | ||||
| name = "tokio-rustls" | ||||
| version = "0.25.0" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "775e0c0f0adb3a2f22a00c4745d728b479985fc15ee7ca6a2608388c5569860f" | ||||
| dependencies = [ | ||||
|  "rustls 0.22.4", | ||||
|  "rustls-pki-types", | ||||
|  "tokio", | ||||
| ] | ||||
| 
 | ||||
| [[package]] | ||||
| name = "tokio-stream" | ||||
| version = "0.1.15" | ||||
| @ -2986,6 +3462,19 @@ dependencies = [ | ||||
|  "tokio", | ||||
| ] | ||||
| 
 | ||||
| [[package]] | ||||
| name = "tokio-util" | ||||
| version = "0.7.11" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "9cf6b47b3771c49ac75ad09a6162f53ad4b8088b76ac60e8ec1455b31a189fe1" | ||||
| dependencies = [ | ||||
|  "bytes", | ||||
|  "futures-core", | ||||
|  "futures-sink", | ||||
|  "pin-project-lite", | ||||
|  "tokio", | ||||
| ] | ||||
| 
 | ||||
| [[package]] | ||||
| name = "toml_datetime" | ||||
| version = "0.6.6" | ||||
| @ -2998,7 +3487,7 @@ version = "0.21.1" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "6a8534fd7f78b5405e860340ad6575217ce99f38d4d5c8f2442cb5ecb50090e1" | ||||
| dependencies = [ | ||||
|  "indexmap", | ||||
|  "indexmap 2.2.6", | ||||
|  "toml_datetime", | ||||
|  "winnow", | ||||
| ] | ||||
| @ -3093,6 +3582,12 @@ dependencies = [ | ||||
|  "tracing-log", | ||||
| ] | ||||
| 
 | ||||
| [[package]] | ||||
| name = "try-lock" | ||||
| version = "0.2.5" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" | ||||
| 
 | ||||
| [[package]] | ||||
| name = "typenum" | ||||
| version = "1.17.0" | ||||
| @ -3153,6 +3648,7 @@ dependencies = [ | ||||
|  "form_urlencoded", | ||||
|  "idna", | ||||
|  "percent-encoding", | ||||
|  "serde", | ||||
| ] | ||||
| 
 | ||||
| [[package]] | ||||
| @ -3206,6 +3702,15 @@ version = "1.2.0" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "317211a0dc0ceedd78fb2ca9a44aed3d7b9b26f81870d485c07122b4350673b7" | ||||
| 
 | ||||
| [[package]] | ||||
| name = "want" | ||||
| version = "0.3.1" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e" | ||||
| dependencies = [ | ||||
|  "try-lock", | ||||
| ] | ||||
| 
 | ||||
| [[package]] | ||||
| name = "wasi" | ||||
| version = "0.11.0+wasi-snapshot-preview1" | ||||
|  | ||||
| @ -26,6 +26,9 @@ chrono = { version = "0.4.38", features = ["serde"] } | ||||
| num-traits = "0.2.19" | ||||
| csv = "1.3.0" | ||||
| clap = "4.5.4" | ||||
| testcontainers = "0.17.0" | ||||
| testcontainers-modules = { version = "0.5.0", features = ["postgres"] } | ||||
| sqlx = { version = "0.7.4", features = ["postgres"] } | ||||
| 
 | ||||
| [workspace] | ||||
| members = [".", "migration", "entity"] | ||||
|  | ||||
| @ -1,8 +1,7 @@ | ||||
| use crate::error::AppError; | ||||
| use anyhow::anyhow; | ||||
| use entity::{expenditure, transaction}; | ||||
| use migration::PostgresQueryBuilder; | ||||
| use sea_orm::sea_query::OnConflict; | ||||
| use sea_orm::sea_query::{OnConflict, PostgresQueryBuilder}; | ||||
| use sea_orm::{ColumnTrait, DatabaseConnection, EntityTrait, Iterable, TransactionTrait}; | ||||
| use sea_orm::{ | ||||
|     ConnectionTrait, DatabaseBackend, DatabaseTransaction, DbErr, QueryFilter, QueryTrait, | ||||
| @ -108,8 +107,60 @@ async fn notify_new_transactions( | ||||
| ) -> Result<(), AppError> { | ||||
|     let payload = serde_json::to_string(&new_transaction_ids).map_err(|e| anyhow!(e))?; | ||||
| 
 | ||||
|     db.execute_unprepared(&format!(r#"NOTIFY monzo_new_transactions, {payload}"#,)) | ||||
|     db.execute_unprepared(&format!(r#"NOTIFY monzo_new_transactions, '{payload}'"#)) | ||||
|         .await?; | ||||
| 
 | ||||
|     Ok(()) | ||||
| } | ||||
| 
 | ||||
| mod tests { | ||||
|     use anyhow::Error; | ||||
|     use sea_orm::{DatabaseConnection}; | ||||
|     use sqlx::{PgPool}; | ||||
|     use sqlx::postgres::PgListener; | ||||
|     use testcontainers::ContainerAsync; | ||||
|     use migration::MigratorTrait; | ||||
|     use testcontainers::runners::AsyncRunner; | ||||
|     use super::notify_new_transactions; | ||||
| 
 | ||||
|     async fn initialise() -> Result<(ContainerAsync<testcontainers_modules::postgres::Postgres>, DatabaseConnection, PgPool), Error> { | ||||
|         let container = testcontainers_modules::postgres::Postgres::default() | ||||
|             .start() | ||||
|             .await?; | ||||
| 
 | ||||
|         // prepare connection string
 | ||||
|         let connection_string = &format!( | ||||
|             "postgres://postgres:postgres@127.0.0.1:{}/postgres", | ||||
|             container.get_host_port_ipv4(5432).await? | ||||
|         ); | ||||
| 
 | ||||
|         let db: DatabaseConnection = sea_orm::Database::connect(connection_string).await?; | ||||
|         migration::Migrator::up(&db, None).await?; | ||||
| 
 | ||||
|         let pool = PgPool::connect(connection_string) | ||||
|             .await?; | ||||
| 
 | ||||
|         Ok((container, db, pool)) | ||||
|     } | ||||
| 
 | ||||
|     #[tokio::test] | ||||
|     async fn test_notify() -> Result<(), Error> { | ||||
|         let (_container, db, pool) = initialise().await?; | ||||
|         let mut listener = PgListener::connect_with(&pool).await?; | ||||
|         listener.listen("monzo_new_transactions").await?; | ||||
| 
 | ||||
|         let ids = vec!["test1".to_string(), "test2".to_string(), "test3".to_string()]; | ||||
| 
 | ||||
|         notify_new_transactions( | ||||
|             &db, | ||||
|             &ids, | ||||
|         ).await?; | ||||
| 
 | ||||
|         let notification = listener.recv().await?; | ||||
|         let payload = notification.payload(); | ||||
|         println!("Payload: {}", payload); | ||||
|         assert_eq!(serde_json::from_str::<Vec<String>>(&payload)?, ids, "Payloads do not match"); | ||||
| 
 | ||||
|         Ok(()) | ||||
|     } | ||||
| } | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user