diff --git a/Cargo.lock b/Cargo.lock index e874e13..bd0c194 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -132,154 +132,6 @@ version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "96d30a06541fbafbc7f82ed10c06164cfbd2c401138f6addd8404629c4b16711" -[[package]] -name = "async-attributes" -version = "1.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a3203e79f4dd9bdda415ed03cf14dae5a2bf775c683a00f94e9cd1faf0f596e5" -dependencies = [ - "quote", - "syn 1.0.109", -] - -[[package]] -name = "async-channel" -version = "1.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81953c529336010edd6d8e358f886d9581267795c61b19475b71314bffa46d35" -dependencies = [ - "concurrent-queue", - "event-listener 2.5.3", - "futures-core", -] - -[[package]] -name = "async-channel" -version = "2.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89b47800b0be77592da0afd425cc03468052844aff33b84e33cc696f64e77b6a" -dependencies = [ - "concurrent-queue", - "event-listener-strategy", - "futures-core", - "pin-project-lite", -] - -[[package]] -name = "async-executor" -version = "1.12.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8828ec6e544c02b0d6691d21ed9f9218d0384a82542855073c2a3f58304aaf0" -dependencies = [ - "async-task", - "concurrent-queue", - "fastrand 2.1.0", - "futures-lite 2.3.0", - "slab", -] - -[[package]] -name = "async-global-executor" -version = "2.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05b1b633a2115cd122d73b955eadd9916c18c8f510ec9cd1686404c60ad1c29c" -dependencies = [ - "async-channel 2.3.1", - "async-executor", - "async-io 2.3.3", - "async-lock 3.4.0", - "blocking", - "futures-lite 2.3.0", - "once_cell", - "tokio", -] - -[[package]] -name = "async-io" -version = "1.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fc5b45d93ef0529756f812ca52e44c221b35341892d3dcc34132ac02f3dd2af" -dependencies = [ - "async-lock 2.8.0", - "autocfg", - "cfg-if", - "concurrent-queue", - "futures-lite 1.13.0", - "log", - "parking", - "polling 2.8.0", - "rustix 0.37.27", - "slab", - "socket2 0.4.10", - "waker-fn", -] - -[[package]] -name = "async-io" -version = "2.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d6baa8f0178795da0e71bc42c9e5d13261aac7ee549853162e66a241ba17964" -dependencies = [ - "async-lock 3.4.0", - "cfg-if", - "concurrent-queue", - "futures-io", - "futures-lite 2.3.0", - "parking", - "polling 3.7.2", - "rustix 0.38.34", - "slab", - "tracing", - "windows-sys 0.52.0", -] - -[[package]] -name = "async-lock" -version = "2.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "287272293e9d8c41773cec55e365490fe034813a2f172f502d6ddcf75b2f582b" -dependencies = [ - "event-listener 2.5.3", -] - -[[package]] -name = "async-lock" -version = "3.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff6e472cdea888a4bd64f342f09b3f50e1886d32afe8df3d663c01140b811b18" -dependencies = [ - "event-listener 5.3.1", - "event-listener-strategy", - "pin-project-lite", -] - -[[package]] -name = "async-std" -version = "1.12.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62565bb4402e926b29953c785397c6dc0391b7b446e45008b0049eb43cec6f5d" -dependencies = [ - "async-attributes", - "async-channel 1.9.0", - "async-global-executor", - "async-io 1.13.0", - "async-lock 2.8.0", - "crossbeam-utils", - "futures-channel", - "futures-core", - "futures-io", - "futures-lite 1.13.0", - "gloo-timers", - "kv-log-macro", - "log", - "memchr", - "once_cell", - "pin-project-lite", - "pin-utils", - "slab", - "wasm-bindgen-futures", -] - [[package]] name = "async-stream" version = "0.3.5" @@ -302,12 +154,6 @@ dependencies = [ "syn 2.0.66", ] -[[package]] -name = "async-task" -version = "4.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b75356056920673b02621b35afd0f7dda9306d03c79a30f5c56c44cf256e3de" - [[package]] name = "async-trait" version = "0.1.80" @@ -491,19 +337,6 @@ dependencies = [ "generic-array", ] -[[package]] -name = "blocking" -version = "1.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "703f41c54fc768e63e091340b424302bb1c29ef4aa0c7f10fe849dfb114d29ea" -dependencies = [ - "async-channel 2.3.1", - "async-task", - "futures-io", - "futures-lite 2.3.0", - "piper", -] - [[package]] name = "borsh" version = "1.5.0" @@ -653,15 +486,6 @@ version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0b6a852b24ab71dffc585bcb46eaf7959d175cb865a7152e35b348d1b2960422" -[[package]] -name = "concurrent-queue" -version = "2.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ca0197aee26d1ae37445ee532fefce43251d24cc7c166799f4d46817f1d3973" -dependencies = [ - "crossbeam-utils", -] - [[package]] name = "const-oid" version = "0.9.6" @@ -782,14 +606,6 @@ dependencies = [ "serde", ] -[[package]] -name = "entity" -version = "0.1.0" -dependencies = [ - "sea-orm", - "serde", -] - [[package]] name = "equivalent" version = "1.0.1" @@ -823,36 +639,6 @@ version = "2.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0" -[[package]] -name = "event-listener" -version = "5.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6032be9bd27023a771701cc49f9f053c751055f71efb2e0ae5c15809093675ba" -dependencies = [ - "concurrent-queue", - "parking", - "pin-project-lite", -] - -[[package]] -name = "event-listener-strategy" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f214dc438f977e6d4e3500aaa277f5ad94ca83fbbd9b1a15713ce2344ccc5a1" -dependencies = [ - "event-listener 5.3.1", - "pin-project-lite", -] - -[[package]] -name = "fastrand" -version = "1.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e51093e27b0797c359783294ca4f0a911c270184cb10f85783b118614a1501be" -dependencies = [ - "instant", -] - [[package]] name = "fastrand" version = "2.1.0" @@ -964,34 +750,6 @@ version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a44623e20b9681a318efdd71c299b6b222ed6f231972bfe2f224ebad6311f0c1" -[[package]] -name = "futures-lite" -version = "1.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49a9d51ce47660b1e808d3c990b4709f2f415d928835a17dfd16991515c46bce" -dependencies = [ - "fastrand 1.9.0", - "futures-core", - "futures-io", - "memchr", - "parking", - "pin-project-lite", - "waker-fn", -] - -[[package]] -name = "futures-lite" -version = "2.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52527eb5074e35e9339c6b4e8d12600c7128b68fb25dcb9fa9dec18f7c25f3a5" -dependencies = [ - "fastrand 2.1.0", - "futures-core", - "futures-io", - "parking", - "pin-project-lite", -] - [[package]] name = "futures-macro" version = "0.3.30" @@ -1066,18 +824,6 @@ version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b" -[[package]] -name = "gloo-timers" -version = "0.2.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b995a66bb87bebce9a0f4a95aed01daca4872c050bfcb21653361c03bc35e5c" -dependencies = [ - "futures-channel", - "futures-core", - "js-sys", - "wasm-bindgen", -] - [[package]] name = "h2" version = "0.4.5" @@ -1146,12 +892,6 @@ version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d231dfb89cfffdbc30e7fc41579ed6066ad03abda9e567ccafae602b97ec5024" -[[package]] -name = "hermit-abi" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fbf6a919d6cf397374f7dfeeea91d974c7c0a7221d0d0f4f20d859d329e53fcc" - [[package]] name = "hex" version = "0.4.3" @@ -1332,26 +1072,6 @@ version = "0.1.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c8fae54786f62fb2918dcfae3d568594e50eb9b5c25bf04371af6fe7516452fb" -[[package]] -name = "instant" -version = "0.1.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e0242819d153cba4b4b05a5a8f2a7e9bbf97b6055b2a002b395c96b5ff3c0222" -dependencies = [ - "cfg-if", -] - -[[package]] -name = "io-lifetimes" -version = "1.0.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eae7b9aee968036d54dce06cebaefd919e4472e753296daccd6d344e3e2df0c2" -dependencies = [ - "hermit-abi 0.3.9", - "libc", - "windows-sys 0.48.0", -] - [[package]] name = "is_terminal_polyfill" version = "1.70.0" @@ -1382,15 +1102,6 @@ dependencies = [ "wasm-bindgen", ] -[[package]] -name = "kv-log-macro" -version = "1.0.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0de8b303297635ad57c9f5059fd9cee7a47f8e8daa09df0fcd07dd39fb22977f" -dependencies = [ - "log", -] - [[package]] name = "lazy_static" version = "1.4.0" @@ -1439,12 +1150,6 @@ dependencies = [ "vcpkg", ] -[[package]] -name = "linux-raw-sys" -version = "0.3.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef53942eb7bf7ff43a617b3e2c1c4a5ecf5944a7c1bc12d7ee39bbb15e5c1519" - [[package]] name = "linux-raw-sys" version = "0.4.14" @@ -1466,9 +1171,6 @@ name = "log" version = "0.4.21" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "90ed8c1e510134f979dbc4f070f87d4313098b704861a105fe34231c70a3901c" -dependencies = [ - "value-bag", -] [[package]] name = "matchers" @@ -1501,14 +1203,6 @@ version = "2.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6c8640c5d730cb13ebd907d8d04b52f55ac9a2eec55b440c8892f40d56c76c1d" -[[package]] -name = "migration" -version = "0.1.0" -dependencies = [ - "async-std", - "sea-orm-migration", -] - [[package]] name = "mime" version = "0.3.17" @@ -1640,7 +1334,7 @@ version = "1.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43" dependencies = [ - "hermit-abi 0.3.9", + "hermit-abi", "libc", ] @@ -1698,12 +1392,6 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" -[[package]] -name = "parking" -version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb813b8af86854136c6922af0598d719255ecb2179515e6e7730d468f05c9cae" - [[package]] name = "parking_lot" version = "0.12.3" @@ -1803,17 +1491,6 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" -[[package]] -name = "piper" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae1d5c74c9876f070d3e8fd503d748c7d974c3e48da8f41350fa5222ef9b4391" -dependencies = [ - "atomic-waker", - "fastrand 2.1.0", - "futures-io", -] - [[package]] name = "pkcs1" version = "0.7.5" @@ -1841,37 +1518,6 @@ version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d231b230927b5e4ad203db57bbcbee2802f6bce620b1e4a9024a07d94e2907ec" -[[package]] -name = "polling" -version = "2.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b2d323e8ca7996b3e23126511a523f7e62924d93ecd5ae73b333815b0eb3dce" -dependencies = [ - "autocfg", - "bitflags 1.3.2", - "cfg-if", - "concurrent-queue", - "libc", - "log", - "pin-project-lite", - "windows-sys 0.48.0", -] - -[[package]] -name = "polling" -version = "3.7.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a3ed00ed3fbf728b5816498ecd316d1716eecaced9c0c8d2c5a6740ca214985b" -dependencies = [ - "cfg-if", - "concurrent-queue", - "hermit-abi 0.4.0", - "pin-project-lite", - "rustix 0.38.34", - "tracing", - "windows-sys 0.52.0", -] - [[package]] name = "powerfmt" version = "0.2.0" @@ -2082,14 +1728,13 @@ dependencies = [ "axum", "chrono", "clap", - "entity", "figment", "futures", "http-body-util", "libarchive", - "migration", "regex", "sea-orm", + "sea-orm-migration", "sea-query", "serde", "sha256", @@ -2188,20 +1833,6 @@ version = "0.1.24" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f" -[[package]] -name = "rustix" -version = "0.37.27" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fea8ca367a3a01fe35e6943c400addf443c0f57670e6ec51196f71a4b8762dd2" -dependencies = [ - "bitflags 1.3.2", - "errno", - "io-lifetimes", - "libc", - "linux-raw-sys 0.3.8", - "windows-sys 0.48.0", -] - [[package]] name = "rustix" version = "0.38.34" @@ -2211,7 +1842,7 @@ dependencies = [ "bitflags 2.5.0", "errno", "libc", - "linux-raw-sys 0.4.14", + "linux-raw-sys", "windows-sys 0.52.0", ] @@ -2440,18 +2071,18 @@ checksum = "1c107b6f4780854c8b126e228ea8869f4d7b71260f962fefb57b996b8959ba6b" [[package]] name = "serde" -version = "1.0.204" +version = "1.0.203" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc76f558e0cbb2a839d37354c575f1dc3fdc6546b5be373ba43d95f231bf7c12" +checksum = "7253ab4de971e72fb7be983802300c30b5a7f0c2e56fab8abfc6a214307c0094" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.204" +version = "1.0.203" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e0cd7e117be63d3c3678776753929474f3b04a43a080c744d6b0ae2a8c28e222" +checksum = "500cbc0ebeb6f46627f50f3f5811ccf6bf00643be300b4c3eabc0ef55dc5b5ba" dependencies = [ "proc-macro2", "quote", @@ -2584,16 +2215,6 @@ version = "1.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" -[[package]] -name = "socket2" -version = "0.4.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f7916fc008ca5542385b89a3d3ce689953c143e9304a9bf8beec1de48994c0d" -dependencies = [ - "libc", - "winapi", -] - [[package]] name = "socket2" version = "0.5.7" @@ -2668,7 +2289,7 @@ dependencies = [ "crc", "crossbeam-queue", "either", - "event-listener 2.5.3", + "event-listener", "futures-channel", "futures-core", "futures-intrusive", @@ -2950,8 +2571,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "85b77fafb263dd9d05cbeac119526425676db3784113aa9295c88498cbf8bff1" dependencies = [ "cfg-if", - "fastrand 2.1.0", - "rustix 0.38.34", + "fastrand", + "rustix", "windows-sys 0.52.0", ] @@ -3045,7 +2666,7 @@ dependencies = [ "parking_lot", "pin-project-lite", "signal-hook-registry", - "socket2 0.5.7", + "socket2", "tokio-macros", "windows-sys 0.48.0", ] @@ -3354,12 +2975,6 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d" -[[package]] -name = "value-bag" -version = "1.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a84c137d37ab0142f0f2ddfe332651fdbf252e7b7dbb4e67b6c1f1b2e925101" - [[package]] name = "vcpkg" version = "0.2.15" @@ -3372,12 +2987,6 @@ version = "0.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" -[[package]] -name = "waker-fn" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "317211a0dc0ceedd78fb2ca9a44aed3d7b9b26f81870d485c07122b4350673b7" - [[package]] name = "wasi" version = "0.11.0+wasi-snapshot-preview1" @@ -3415,18 +3024,6 @@ dependencies = [ "wasm-bindgen-shared", ] -[[package]] -name = "wasm-bindgen-futures" -version = "0.4.42" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76bc14366121efc8dbb487ab05bcc9d346b3b5ec0eaa76e46594cabbe51762c0" -dependencies = [ - "cfg-if", - "js-sys", - "wasm-bindgen", - "web-sys", -] - [[package]] name = "wasm-bindgen-macro" version = "0.2.92" @@ -3456,16 +3053,6 @@ version = "0.2.92" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "af190c94f2773fdb3729c55b007a722abb5384da03bc0986df4c289bf5567e96" -[[package]] -name = "web-sys" -version = "0.3.69" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77afa9a11836342370f4817622a2f0f418b134426d91a82dfb48f532d2ec13ef" -dependencies = [ - "js-sys", - "wasm-bindgen", -] - [[package]] name = "webpki-roots" version = "0.25.4" diff --git a/Cargo.toml b/Cargo.toml index 72191c6..a2754f9 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,10 +1,9 @@ [workspace] members = [ - 'migration', 'server', 'libarchive', 'libarchive3-sys' -, "entity"] +] [profile.release] lto = "fat" diff --git a/entity/Cargo.toml b/entity/Cargo.toml deleted file mode 100644 index 9aec860..0000000 --- a/entity/Cargo.toml +++ /dev/null @@ -1,8 +0,0 @@ -[package] -name = "entity" -version = "0.1.0" -edition = "2021" - -[dependencies] -sea-orm = "0.12.15" -serde = { version = "1.0.204", features = ["derive"] } diff --git a/entity/src/lib.rs b/entity/src/lib.rs deleted file mode 100644 index 5c531cc..0000000 --- a/entity/src/lib.rs +++ /dev/null @@ -1,37 +0,0 @@ -pub mod entity; -pub use entity::prelude::*; -pub use entity::*; - -use sea_orm::{DeriveActiveEnum, EnumIter}; -use serde::{Deserialize, Serialize}; - -#[derive(EnumIter, DeriveActiveEnum, Serialize, Deserialize, PartialEq, Eq, Clone, Debug)] -#[sea_orm(rs_type = "i32", db_type = "Integer")] -#[serde(rename_all = "lowercase")] -pub enum PackageRelatedEnum { - #[sea_orm(num_value = 0)] - Conflicts, - #[sea_orm(num_value = 1)] - Replaces, - #[sea_orm(num_value = 2)] - Provides, - #[sea_orm(num_value = 3)] - Depend, - #[sea_orm(num_value = 4)] - Makedepend, - #[sea_orm(num_value = 5)] - Checkdepend, - #[sea_orm(num_value = 6)] - Optdepend, -} - -#[derive(EnumIter, DeriveActiveEnum, Deserialize, Serialize, PartialEq, Eq, Clone, Debug)] -#[sea_orm(rs_type = "i32", db_type = "Integer")] -pub enum PackageState { - #[sea_orm(num_value = 0)] - PendingCommit, - #[sea_orm(num_value = 1)] - Committed, - #[sea_orm(num_value = 2)] - PendingDeletion, -} diff --git a/migration/Cargo.toml b/migration/Cargo.toml deleted file mode 100644 index fbe007c..0000000 --- a/migration/Cargo.toml +++ /dev/null @@ -1,20 +0,0 @@ -[package] -name = "migration" -version = "0.1.0" -edition = "2021" -publish = false - -[lib] -name = "migration" -path = "src/lib.rs" - -[dependencies] -async-std = { version = "1", features = ["attributes", "tokio1"] } - -[dependencies.sea-orm-migration] -version = "0.12.0" -features = [ - "sqlx-postgres", - "sqlx-sqlite", - "runtime-tokio-rustls", -] diff --git a/migration/README.md b/migration/README.md deleted file mode 100644 index 3b438d8..0000000 --- a/migration/README.md +++ /dev/null @@ -1,41 +0,0 @@ -# Running Migrator CLI - -- Generate a new migration file - ```sh - cargo run -- generate MIGRATION_NAME - ``` -- Apply all pending migrations - ```sh - cargo run - ``` - ```sh - cargo run -- up - ``` -- Apply first 10 pending migrations - ```sh - cargo run -- up -n 10 - ``` -- Rollback last applied migrations - ```sh - cargo run -- down - ``` -- Rollback last 10 applied migrations - ```sh - cargo run -- down -n 10 - ``` -- Drop all tables from the database, then reapply all migrations - ```sh - cargo run -- fresh - ``` -- Rollback all applied migrations, then reapply all migrations - ```sh - cargo run -- refresh - ``` -- Rollback all applied migrations - ```sh - cargo run -- reset - ``` -- Check the status of all migrations - ```sh - cargo run -- status - ``` diff --git a/migration/src/main.rs b/migration/src/main.rs deleted file mode 100644 index c6b6e48..0000000 --- a/migration/src/main.rs +++ /dev/null @@ -1,6 +0,0 @@ -use sea_orm_migration::prelude::*; - -#[async_std::main] -async fn main() { - cli::run_cli(migration::Migrator).await; -} diff --git a/server/Cargo.toml b/server/Cargo.toml index 8f0f153..5c26303 100644 --- a/server/Cargo.toml +++ b/server/Cargo.toml @@ -15,6 +15,7 @@ futures = "0.3.28" http-body-util = "0.1.1" libarchive = { path = "../libarchive" } regex = "1.10.5" +sea-orm-migration = "0.12.1" sea-query = { version = "0.30.7", features = ["backend-postgres", "backend-sqlite"] } serde = { version = "1.0.178", features = ["derive"] } sha256 = "1.1.4" @@ -25,8 +26,6 @@ tower-http = { version = "0.5.2", features = ["fs", "trace", "auth"] } tracing = "0.1.37" tracing-subscriber = { version = "0.3.17", features = ["env-filter"] } uuid = { version = "1.4.0", features = ["v4"] } -migration = { path = "../migration" } -entity = { path = "../entity" } [dependencies.sea-orm] version = "0.12.1" diff --git a/entity/src/entity/distro.rs b/server/src/db/entities/distro.rs similarity index 96% rename from entity/src/entity/distro.rs rename to server/src/db/entities/distro.rs index 8a01fd2..f39ad53 100644 --- a/entity/src/entity/distro.rs +++ b/server/src/db/entities/distro.rs @@ -8,7 +8,6 @@ use serde::{Deserialize, Serialize}; pub struct Model { #[sea_orm(primary_key)] pub id: i32, - #[sea_orm(unique)] pub name: String, pub description: Option, } diff --git a/entity/src/entity/mod.rs b/server/src/db/entities/mod.rs similarity index 100% rename from entity/src/entity/mod.rs rename to server/src/db/entities/mod.rs diff --git a/entity/src/entity/package.rs b/server/src/db/entities/package.rs similarity index 92% rename from entity/src/entity/package.rs rename to server/src/db/entities/package.rs index 5380801..4ef90a4 100644 --- a/entity/src/entity/package.rs +++ b/server/src/db/entities/package.rs @@ -1,8 +1,11 @@ //! `SeaORM` Entity. Generated by sea-orm-codegen 0.12.1 +use chrono::NaiveDateTime; use sea_orm::entity::prelude::*; use serde::{Deserialize, Serialize}; +use crate::db::PackageState; + #[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq, Serialize, Deserialize)] #[sea_orm(table_name = "package")] pub struct Model { @@ -17,13 +20,14 @@ pub struct Model { pub c_size: i64, pub description: Option, pub url: Option, - pub build_date: DateTime, + pub build_date: NaiveDateTime, pub packager: Option, pub pgp_sig: Option, pub pgp_sig_size: Option, pub sha256_sum: String, pub compression: String, - pub state: crate::PackageState, + #[serde(skip_serializing)] + pub state: PackageState, } #[derive(Copy, Clone, Debug, EnumIter, DeriveRelation)] diff --git a/entity/src/entity/package_file.rs b/server/src/db/entities/package_file.rs similarity index 100% rename from entity/src/entity/package_file.rs rename to server/src/db/entities/package_file.rs diff --git a/entity/src/entity/package_group.rs b/server/src/db/entities/package_group.rs similarity index 100% rename from entity/src/entity/package_group.rs rename to server/src/db/entities/package_group.rs diff --git a/entity/src/entity/package_license.rs b/server/src/db/entities/package_license.rs similarity index 100% rename from entity/src/entity/package_license.rs rename to server/src/db/entities/package_license.rs diff --git a/entity/src/entity/package_related.rs b/server/src/db/entities/package_related.rs similarity index 92% rename from entity/src/entity/package_related.rs rename to server/src/db/entities/package_related.rs index 3766853..7241c1a 100644 --- a/entity/src/entity/package_related.rs +++ b/server/src/db/entities/package_related.rs @@ -3,13 +3,15 @@ use sea_orm::entity::prelude::*; use serde::{Deserialize, Serialize}; +use crate::db::PackageRelatedEnum; + #[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq, Serialize, Deserialize)] #[sea_orm(table_name = "package_related")] pub struct Model { #[sea_orm(primary_key, auto_increment = false)] pub package_id: i32, #[sea_orm(primary_key, auto_increment = false)] - pub r#type: crate::PackageRelatedEnum, + pub r#type: PackageRelatedEnum, #[sea_orm(primary_key, auto_increment = false)] pub name: String, } diff --git a/entity/src/entity/prelude.rs b/server/src/db/entities/prelude.rs similarity index 100% rename from entity/src/entity/prelude.rs rename to server/src/db/entities/prelude.rs diff --git a/entity/src/entity/repo.rs b/server/src/db/entities/repo.rs similarity index 97% rename from entity/src/entity/repo.rs rename to server/src/db/entities/repo.rs index d68e226..1ddd39e 100644 --- a/entity/src/entity/repo.rs +++ b/server/src/db/entities/repo.rs @@ -9,7 +9,6 @@ pub struct Model { #[sea_orm(primary_key)] pub id: i32, pub distro_id: i32, - #[sea_orm(unique)] pub name: String, pub description: Option, } diff --git a/migration/src/m20230730_000001_create_repo_tables.rs b/server/src/db/migrator/m20230730_000001_create_repo_tables.rs similarity index 100% rename from migration/src/m20230730_000001_create_repo_tables.rs rename to server/src/db/migrator/m20230730_000001_create_repo_tables.rs diff --git a/migration/src/lib.rs b/server/src/db/migrator/mod.rs similarity index 86% rename from migration/src/lib.rs rename to server/src/db/migrator/mod.rs index 691d8f1..d939276 100644 --- a/migration/src/lib.rs +++ b/server/src/db/migrator/mod.rs @@ -1,9 +1,9 @@ -pub use sea_orm_migration::prelude::*; - -mod m20230730_000001_create_repo_tables; +use sea_orm_migration::prelude::*; pub struct Migrator; +mod m20230730_000001_create_repo_tables; + #[async_trait::async_trait] impl MigratorTrait for Migrator { fn migrations() -> Vec> { diff --git a/server/src/db/mod.rs b/server/src/db/mod.rs index d81df72..2b03fb1 100644 --- a/server/src/db/mod.rs +++ b/server/src/db/mod.rs @@ -1,19 +1,55 @@ +pub mod entities; +mod migrator; pub mod query; use crate::config::DbConfig; -use sea_orm::{ConnectionTrait, Database, DbConn}; -use serde::Serialize; +pub use entities::{prelude::*, *}; +pub use migrator::Migrator; + +use sea_orm::{ConnectionTrait, Database, DbConn, DeriveActiveEnum, EnumIter}; +use serde::{Deserialize, Serialize}; type Result = std::result::Result; +#[derive(EnumIter, DeriveActiveEnum, Serialize, Deserialize, PartialEq, Eq, Clone, Debug)] +#[sea_orm(rs_type = "i32", db_type = "Integer")] +#[serde(rename_all = "lowercase")] +pub enum PackageRelatedEnum { + #[sea_orm(num_value = 0)] + Conflicts, + #[sea_orm(num_value = 1)] + Replaces, + #[sea_orm(num_value = 2)] + Provides, + #[sea_orm(num_value = 3)] + Depend, + #[sea_orm(num_value = 4)] + Makedepend, + #[sea_orm(num_value = 5)] + Checkdepend, + #[sea_orm(num_value = 6)] + Optdepend, +} + +#[derive(EnumIter, DeriveActiveEnum, Deserialize, Serialize, PartialEq, Eq, Clone, Debug)] +#[sea_orm(rs_type = "i32", db_type = "Integer")] +pub enum PackageState { + #[sea_orm(num_value = 0)] + PendingCommit, + #[sea_orm(num_value = 1)] + Committed, + #[sea_orm(num_value = 2)] + PendingDeletion, +} + #[derive(Serialize)] pub struct FullPackage { #[serde(flatten)] - entry: entity::package::Model, + entry: package::Model, licenses: Vec, groups: Vec, - related: Vec<(entity::PackageRelatedEnum, String)>, + related: Vec<(PackageRelatedEnum, String)>, files: Vec, } diff --git a/server/src/db/query/distro.rs b/server/src/db/query/distro.rs index a1706dc..8647f2a 100644 --- a/server/src/db/query/distro.rs +++ b/server/src/db/query/distro.rs @@ -1,11 +1,6 @@ -use crate::db::Result; +use crate::db::*; -use entity::{distro, prelude::Distro}; -use sea_orm::{ - sea_query::IntoCondition, ActiveModelTrait, ColumnTrait, Condition, DbConn, EntityTrait, - NotSet, PaginatorTrait, QueryFilter, QueryOrder, Set, -}; -use serde::Deserialize; +use sea_orm::{sea_query::IntoCondition, *}; #[derive(Deserialize)] pub struct Filter { @@ -26,7 +21,7 @@ pub async fn page( per_page: u64, page: u64, filter: Filter, -) -> Result> { +) -> Result> { let paginator = Distro::find() .filter(filter) .order_by_asc(distro::Column::Id) diff --git a/server/src/db/query/package.rs b/server/src/db/query/package.rs index 1b284d8..8a4f054 100644 --- a/server/src/db/query/package.rs +++ b/server/src/db/query/package.rs @@ -1,16 +1,7 @@ -use crate::db::{FullPackage, Result}; +use crate::db::{self, *}; -use entity::{ - package, package_file, package_group, package_license, package_related, - prelude::{Package, PackageFile, PackageGroup, PackageLicense, PackageRelated}, - PackageRelatedEnum, PackageState, -}; -use sea_orm::{ - sea_query::IntoCondition, ActiveModelTrait, ColumnTrait, Condition, ConnectionTrait, DbConn, - DeleteResult, EntityTrait, FromQueryResult, Iterable, ModelTrait, NotSet, PaginatorTrait, - QueryFilter, QuerySelect, SelectModel, SelectorRaw, Set, TransactionTrait, -}; -use sea_query::{Alias, Expr, JoinType, Order, Query, SelectStatement}; +use sea_orm::{sea_query::IntoCondition, *}; +use sea_query::{Alias, Expr, Query, SelectStatement}; use serde::Deserialize; /// How many fields may be inserted at once into the database. @@ -40,22 +31,22 @@ pub async fn page( ) -> crate::Result> { let p2 = Alias::new("p2"); let query = Query::select() - .columns(package::Column::iter().map(|c| (package::Entity, c))) - .from(package::Entity) + .columns(db::package::Column::iter().map(|c| (db::package::Entity, c))) + .from(db::package::Entity) .join_subquery( JoinType::InnerJoin, max_pkg_ids_query(true), p2.clone(), - Expr::col((package::Entity, package::Column::Id)) + Expr::col((db::package::Entity, db::package::Column::Id)) .eq(Expr::col((p2.clone(), Alias::new("max_id")))), ) .cond_where(filter) - .order_by((package::Entity, package::Column::Id), Order::Asc) + .order_by((db::package::Entity, db::package::Column::Id), Order::Asc) .to_owned(); let builder = conn.get_database_backend(); let sql = builder.build(&query); - Ok(Package::find() + Ok(db::Package::find() .from_raw_sql(sql) .paginate(conn, per_page) .fetch_page(page) @@ -222,7 +213,7 @@ pub async fn full(conn: &DbConn, id: i32) -> Result> { .into_tuple() .all(conn) .await?; - let related: Vec<(PackageRelatedEnum, String)> = entry + let related: Vec<(db::PackageRelatedEnum, String)> = entry .find_related(PackageRelated) .select_only() .columns([package_related::Column::Type, package_related::Column::Name]) @@ -257,22 +248,22 @@ pub struct PkgToRemove { fn max_pkg_ids_query(committed: bool) -> SelectStatement { let mut query = Query::select() - .from(package::Entity) + .from(db::package::Entity) .columns([ - package::Column::RepoId, - package::Column::Arch, - package::Column::Name, + db::package::Column::RepoId, + db::package::Column::Arch, + db::package::Column::Name, ]) - .expr_as(package::Column::Id.max(), Alias::new("max_id")) + .expr_as(db::package::Column::Id.max(), Alias::new("max_id")) .group_by_columns([ - package::Column::RepoId, - package::Column::Arch, - package::Column::Name, + db::package::Column::RepoId, + db::package::Column::Arch, + db::package::Column::Name, ]) .to_owned(); if committed { - query.cond_where(package::Column::State.eq(PackageState::Committed)); + query.cond_where(db::package::Column::State.eq(db::PackageState::Committed)); } query @@ -287,44 +278,47 @@ pub fn pkgs_to_sync( ) -> SelectorRaw> { let (p1, p2) = (Alias::new("p1"), Alias::new("p2")); let query = Query::select() - .columns(package::Column::iter().map(|c| (p1.clone(), c))) - .from_as(package::Entity, p1.clone()) + .columns(db::package::Column::iter().map(|c| (p1.clone(), c))) + .from_as(db::package::Entity, p1.clone()) .join_subquery( JoinType::InnerJoin, max_pkg_ids_query(false), p2.clone(), - Expr::col((p1.clone(), package::Column::Id)) + Expr::col((p1.clone(), db::package::Column::Id)) .eq(Expr::col((p2.clone(), Alias::new("max_id")))), ) .cond_where( Condition::all() - .add(Expr::col((p1.clone(), package::Column::RepoId)).eq(repo)) - .add(Expr::col((p1.clone(), package::Column::Arch)).is_in([arch, crate::ANY_ARCH])) + .add(Expr::col((p1.clone(), db::package::Column::RepoId)).eq(repo)) .add( - Expr::col((p1.clone(), package::Column::State)) - .ne(PackageState::PendingDeletion), + Expr::col((p1.clone(), db::package::Column::Arch)) + .is_in([arch, crate::ANY_ARCH]), + ) + .add( + Expr::col((p1.clone(), db::package::Column::State)) + .ne(db::PackageState::PendingDeletion), ), ) .to_owned(); let builder = conn.get_database_backend(); let sql = builder.build(&query); - Package::find().from_raw_sql(sql) + db::Package::find().from_raw_sql(sql) } fn stale_pkgs_query(include_repo: bool) -> SelectStatement { let (p1, p2) = (Alias::new("p1"), Alias::new("p2")); let mut query = Query::select() - .from_as(package::Entity, p1.clone()) + .from_as(db::package::Entity, p1.clone()) .to_owned(); if include_repo { query.columns([ - (p1.clone(), package::Column::RepoId), - (p1.clone(), package::Column::Id), + (p1.clone(), db::package::Column::RepoId), + (p1.clone(), db::package::Column::Id), ]); } else { - query.column((p1.clone(), package::Column::Id)); + query.column((p1.clone(), db::package::Column::Id)); } // We left join on the max pkgs query because a repository that has all its packages set to @@ -337,27 +331,27 @@ fn stale_pkgs_query(include_repo: bool) -> SelectStatement { p2.clone(), Condition::all() .add( - Expr::col((p1.clone(), package::Column::RepoId)) - .eq(Expr::col((p2.clone(), package::Column::RepoId))), + Expr::col((p1.clone(), db::package::Column::RepoId)) + .eq(Expr::col((p2.clone(), db::package::Column::RepoId))), ) .add( - Expr::col((p1.clone(), package::Column::Arch)) - .eq(Expr::col((p2.clone(), package::Column::Arch))), + Expr::col((p1.clone(), db::package::Column::Arch)) + .eq(Expr::col((p2.clone(), db::package::Column::Arch))), ) .add( - Expr::col((p1.clone(), package::Column::Name)) - .eq(Expr::col((p2.clone(), package::Column::Name))), + Expr::col((p1.clone(), db::package::Column::Name)) + .eq(Expr::col((p2.clone(), db::package::Column::Name))), ), ) .cond_where( Condition::any() .add( - Expr::col((p1.clone(), package::Column::Id)) + Expr::col((p1.clone(), db::package::Column::Id)) .lt(Expr::col((p2.clone(), Alias::new("max_id")))), ) .add( - Expr::col((p1.clone(), package::Column::State)) - .eq(PackageState::PendingDeletion), + Expr::col((p1.clone(), db::package::Column::State)) + .eq(db::PackageState::PendingDeletion), ), ); @@ -373,9 +367,9 @@ pub fn stale_pkgs(conn: &DbConn) -> SelectorRaw> { } pub async fn delete_stale_pkgs(conn: &DbConn, max_id: i32) -> crate::Result<()> { - Ok(Package::delete_many() - .filter(package::Column::Id.lte(max_id)) - .filter(package::Column::Id.in_subquery(stale_pkgs_query(false))) + Ok(db::Package::delete_many() + .filter(db::package::Column::Id.lte(max_id)) + .filter(db::package::Column::Id.in_subquery(stale_pkgs_query(false))) .exec(conn) .await .map(|_| ())?) diff --git a/server/src/db/query/repo.rs b/server/src/db/query/repo.rs index 3d1a952..a2daa26 100644 --- a/server/src/db/query/repo.rs +++ b/server/src/db/query/repo.rs @@ -1,11 +1,6 @@ -use crate::db::Result; +use crate::db::*; -use entity::{prelude::Repo, repo}; -use sea_orm::{ - sea_query::IntoCondition, ActiveModelTrait, ColumnTrait, Condition, DbConn, EntityTrait, - NotSet, PaginatorTrait, QueryFilter, QueryOrder, Set, -}; -use serde::Deserialize; +use sea_orm::{sea_query::IntoCondition, *}; #[derive(Deserialize)] pub struct Filter { diff --git a/server/src/main.rs b/server/src/main.rs index f99ba18..7118da5 100644 --- a/server/src/main.rs +++ b/server/src/main.rs @@ -12,7 +12,7 @@ pub use error::{Result, ServerError}; use std::{io, path::PathBuf}; use clap::Parser; -use migration::MigratorTrait; +use sea_orm_migration::MigratorTrait; use tokio::runtime; use tracing_subscriber::{layer::SubscriberExt, util::SubscriberInitExt}; @@ -52,7 +52,7 @@ fn setup(rt: &runtime::Handle, config_file: PathBuf) -> crate::Result { tracing::info!("Connecting to database"); let db = rt.block_on(crate::db::connect(&config.db))?; - rt.block_on(migration::Migrator::up(&db, None))?; + rt.block_on(crate::db::Migrator::up(&db, None))?; let repo = match &config.fs { FsConfig::Local { data_dir } => { diff --git a/server/src/repo/actor.rs b/server/src/repo/actor.rs index 3aa04de..2c2fd74 100644 --- a/server/src/repo/actor.rs +++ b/server/src/repo/actor.rs @@ -99,10 +99,10 @@ impl Actor { if let Some(_guard) = repos.get(&repo).map(|n| n.1.lock()) { let archs: Vec = self.rt.block_on( - entity::Package::find() - .filter(entity::package::Column::RepoId.eq(repo)) + db::Package::find() + .filter(db::package::Column::RepoId.eq(repo)) .select_only() - .column(entity::package::Column::Arch) + .column(db::package::Column::Arch) .distinct() .into_tuple() .all(&self.state.conn), @@ -171,12 +171,12 @@ impl Actor { // Update the state for the newly committed packages self.rt.block_on( - entity::Package::update_many() + db::Package::update_many() .col_expr( - entity::package::Column::State, - Expr::value(entity::PackageState::Committed), + db::package::Column::State, + Expr::value(db::PackageState::Committed), ) - .filter(entity::package::Column::Id.is_in(committed_ids)) + .filter(db::package::Column::Id.is_in(committed_ids)) .exec(&self.state.conn), )?; diff --git a/server/src/repo/archive.rs b/server/src/repo/archive.rs index 59c3a0a..18e0801 100644 --- a/server/src/repo/archive.rs +++ b/server/src/repo/archive.rs @@ -1,3 +1,4 @@ +use crate::db; use std::{ io::Write, path::{Path, PathBuf}, @@ -68,7 +69,7 @@ impl RepoArchivesWriter { Ok(ar.append_path(&mut ar_entry, src_path)?) } - pub fn append_pkg(&mut self, pkg: &entity::package::Model) -> crate::Result<()> { + pub fn append_pkg(&mut self, pkg: &db::package::Model) -> crate::Result<()> { self.write_desc(&self.tmp_paths[0], pkg)?; self.write_files(&self.tmp_paths[1], pkg)?; @@ -84,11 +85,7 @@ impl RepoArchivesWriter { } /// Generate a "files" archive entry for the package in the given path - fn write_files( - &self, - path: impl AsRef, - pkg: &entity::package::Model, - ) -> crate::Result<()> { + fn write_files(&self, path: impl AsRef, pkg: &db::package::Model) -> crate::Result<()> { let mut f = std::io::BufWriter::new(std::fs::File::create(path)?); writeln!(f, "%FILES%")?; @@ -96,7 +93,7 @@ impl RepoArchivesWriter { let (tx, mut rx) = mpsc::channel(1); let conn = self.conn.clone(); - let query = pkg.find_related(entity::prelude::PackageFile); + let query = pkg.find_related(db::PackageFile); self.rt.spawn(async move { match query.stream(&conn).await { @@ -124,11 +121,7 @@ impl RepoArchivesWriter { Ok(()) } - fn write_desc( - &self, - path: impl AsRef, - pkg: &entity::package::Model, - ) -> crate::Result<()> { + fn write_desc(&self, path: impl AsRef, pkg: &db::package::Model) -> crate::Result<()> { let mut f = std::io::BufWriter::new(std::fs::File::create(path)?); let filename = format!( @@ -154,9 +147,9 @@ impl RepoArchivesWriter { } let groups: Vec = self.rt.block_on( - pkg.find_related(entity::prelude::PackageGroup) + pkg.find_related(db::PackageGroup) .select_only() - .column(entity::package_group::Column::Name) + .column(db::package_group::Column::Name) .into_tuple() .all(&self.conn), )?; @@ -172,9 +165,9 @@ impl RepoArchivesWriter { } let licenses: Vec = self.rt.block_on( - pkg.find_related(entity::prelude::PackageLicense) + pkg.find_related(db::PackageLicense) .select_only() - .column(entity::package_license::Column::Name) + .column(db::package_license::Column::Name) .into_tuple() .all(&self.conn), )?; @@ -193,21 +186,21 @@ impl RepoArchivesWriter { } let related = [ - ("REPLACES", entity::PackageRelatedEnum::Replaces), - ("CONFLICTS", entity::PackageRelatedEnum::Conflicts), - ("PROVIDES", entity::PackageRelatedEnum::Provides), - ("DEPENDS", entity::PackageRelatedEnum::Depend), - ("OPTDEPENDS", entity::PackageRelatedEnum::Optdepend), - ("MAKEDEPENDS", entity::PackageRelatedEnum::Makedepend), - ("CHECKDEPENDS", entity::PackageRelatedEnum::Checkdepend), + ("REPLACES", db::PackageRelatedEnum::Replaces), + ("CONFLICTS", db::PackageRelatedEnum::Conflicts), + ("PROVIDES", db::PackageRelatedEnum::Provides), + ("DEPENDS", db::PackageRelatedEnum::Depend), + ("OPTDEPENDS", db::PackageRelatedEnum::Optdepend), + ("MAKEDEPENDS", db::PackageRelatedEnum::Makedepend), + ("CHECKDEPENDS", db::PackageRelatedEnum::Checkdepend), ]; for (key, attr) in related.into_iter() { let items: Vec = self.rt.block_on( - pkg.find_related(entity::prelude::PackageRelated) - .filter(entity::package_related::Column::Type.eq(attr)) + pkg.find_related(db::PackageRelated) + .filter(db::package_related::Column::Type.eq(attr)) .select_only() - .column(entity::package_related::Column::Name) + .column(db::package_related::Column::Name) .into_tuple() .all(&self.conn), )?; diff --git a/server/src/repo/handle.rs b/server/src/repo/handle.rs index 99c8401..bbcc153 100644 --- a/server/src/repo/handle.rs +++ b/server/src/repo/handle.rs @@ -1,4 +1,5 @@ use super::{Command, SharedState}; +use crate::db; use std::{ path::PathBuf, @@ -33,10 +34,10 @@ impl Handle { pub async fn get_or_create_repo(&self, distro: &str, repo: &str) -> crate::Result { let mut repos = self.state.repos.write().await; - let distro_id: Option = entity::Distro::find() - .filter(entity::distro::Column::Name.eq(distro)) + let distro_id: Option = db::Distro::find() + .filter(db::distro::Column::Name.eq(distro)) .select_only() - .column(entity::distro::Column::Id) + .column(db::distro::Column::Id) .into_tuple() .one(&self.state.conn) .await?; @@ -44,7 +45,7 @@ impl Handle { let distro_id = if let Some(id) = distro_id { id } else { - let new_distro = entity::distro::ActiveModel { + let new_distro = db::distro::ActiveModel { id: NotSet, name: Set(distro.to_string()), description: NotSet, @@ -53,11 +54,11 @@ impl Handle { new_distro.insert(&self.state.conn).await?.id }; - let repo_id: Option = entity::Repo::find() - .filter(entity::repo::Column::DistroId.eq(distro_id)) - .filter(entity::repo::Column::Name.eq(repo)) + let repo_id: Option = db::Repo::find() + .filter(db::repo::Column::DistroId.eq(distro_id)) + .filter(db::repo::Column::Name.eq(repo)) .select_only() - .column(entity::repo::Column::Id) + .column(db::repo::Column::Id) .into_tuple() .one(&self.state.conn) .await?; @@ -65,7 +66,7 @@ impl Handle { let repo_id = if let Some(id) = repo_id { id } else { - let new_repo = entity::repo::ActiveModel { + let new_repo = db::repo::ActiveModel { id: NotSet, distro_id: Set(distro_id), name: Set(repo.to_string()), @@ -83,12 +84,12 @@ impl Handle { } pub async fn get_repo(&self, distro: &str, repo: &str) -> crate::Result> { - Ok(entity::Repo::find() - .find_also_related(entity::Distro) + Ok(db::Repo::find() + .find_also_related(db::Distro) .filter( Condition::all() - .add(entity::repo::Column::Name.eq(repo)) - .add(entity::distro::Column::Name.eq(distro)), + .add(db::repo::Column::Name.eq(repo)) + .add(db::distro::Column::Name.eq(distro)), ) .one(&self.state.conn) .await @@ -97,9 +98,7 @@ impl Handle { pub async fn remove_repo(&self, repo: i32) -> crate::Result<()> { self.state.repos.write().await.remove(&repo); - entity::Repo::delete_by_id(repo) - .exec(&self.state.conn) - .await?; + db::Repo::delete_by_id(repo).exec(&self.state.conn).await?; let _ = tokio::fs::remove_dir_all(self.state.repos_dir.join(repo.to_string())).await; Ok(()) @@ -109,15 +108,15 @@ impl Handle { /// packages with the given architecture as "pending deletion", before performing a manual sync /// & removal of stale packages. pub async fn remove_repo_arch(&self, repo: i32, arch: &str) -> crate::Result<()> { - entity::Package::update_many() + db::Package::update_many() .col_expr( - entity::package::Column::State, - Expr::value(entity::PackageState::PendingDeletion), + db::package::Column::State, + Expr::value(db::PackageState::PendingDeletion), ) .filter( Condition::all() - .add(entity::package::Column::RepoId.eq(repo)) - .add(entity::package::Column::Arch.eq(arch)), + .add(db::package::Column::RepoId.eq(repo)) + .add(db::package::Column::Arch.eq(arch)), ) .exec(&self.state.conn) .await?; diff --git a/server/src/repo/mod.rs b/server/src/repo/mod.rs index cfccb4a..25325c6 100644 --- a/server/src/repo/mod.rs +++ b/server/src/repo/mod.rs @@ -6,6 +6,8 @@ pub mod package; pub use actor::Actor; pub use handle::Handle; +use crate::db; + use std::{ collections::HashMap, path::{Path, PathBuf}, @@ -65,9 +67,9 @@ pub fn start( let mut repos = HashMap::new(); let repo_ids: Vec = rt.block_on( - entity::prelude::Repo::find() + db::Repo::find() .select_only() - .column(entity::repo::Column::Id) + .column(db::repo::Column::Id) .into_tuple() .all(&conn), )?; diff --git a/server/src/repo/package.rs b/server/src/repo/package.rs index fa386e9..103a521 100644 --- a/server/src/repo/package.rs +++ b/server/src/repo/package.rs @@ -1,3 +1,5 @@ +use crate::db::entities::package; + use std::{ fmt, fs, io::{self, BufRead, BufReader, Read}, @@ -9,6 +11,7 @@ use libarchive::{ read::{Archive, Builder}, Entry, ReadFilter, }; +use sea_orm::ActiveValue::Set; #[derive(Debug, Clone)] pub struct Package { @@ -191,3 +194,26 @@ impl Package { ) } } + +impl From for package::ActiveModel { + fn from(pkg: Package) -> Self { + let info = pkg.info; + + package::ActiveModel { + base: Set(info.base), + name: Set(info.name), + version: Set(info.version), + arch: Set(info.arch), + size: Set(info.size), + c_size: Set(info.csize), + description: Set(info.description), + url: Set(info.url), + build_date: Set(info.build_date), + packager: Set(info.packager), + pgp_sig: Set(info.pgpsig), + pgp_sig_size: Set(info.pgpsigsize), + sha256_sum: Set(info.sha256sum), + ..Default::default() + } + } +} diff --git a/server/src/web/api/mod.rs b/server/src/web/api/mod.rs index 81494b3..4678257 100644 --- a/server/src/web/api/mod.rs +++ b/server/src/web/api/mod.rs @@ -21,7 +21,7 @@ async fn get_repos( State(global): State, Query(pagination): Query, Query(filter): Query, -) -> crate::Result>> { +) -> crate::Result>> { let items = db::query::repo::page(&global.db, pagination.per_page, pagination.page - 1, filter).await?; @@ -31,7 +31,7 @@ async fn get_repos( async fn get_single_repo( State(global): State, Path(id): Path, -) -> crate::Result> { +) -> crate::Result> { let repo = db::query::repo::by_id(&global.db, id) .await? .ok_or(axum::http::StatusCode::NOT_FOUND)?; @@ -43,7 +43,7 @@ async fn get_packages( State(global): State, Query(pagination): Query, Query(filter): Query, -) -> crate::Result>> { +) -> crate::Result>> { let items = db::query::package::page(&global.db, pagination.per_page, pagination.page - 1, filter) .await?;