diff --git a/src/Cargo.lock b/src/Cargo.lock index 22d0b7d..9a38ac1 100644 --- a/src/Cargo.lock +++ b/src/Cargo.lock @@ -57,15 +57,6 @@ dependencies = [ "zerocopy", ] -[[package]] -name = "aho-corasick" -version = "1.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916" -dependencies = [ - "memchr", -] - [[package]] name = "aliasable" version = "0.1.3" @@ -332,6 +323,7 @@ version = "0.1.0" dependencies = [ "argon2", "database", + "derive_more", "garde", "thiserror 2.0.11", ] @@ -915,9 +907,7 @@ version = "0.1.0" dependencies = [ "chrono", "derive_more", - "garde", "sqlx", - "thiserror 2.0.11", ] [[package]] @@ -1430,23 +1420,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6a989bd2fd12136080f7825ff410d9239ce84a2a639487fc9d924ee42e2fb84f" dependencies = [ "compact_str", - "garde_derive", - "once_cell", - "regex", "smallvec", - "url", -] - -[[package]] -name = "garde_derive" -version = "0.22.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f7f0545bbbba0a37d4d445890fa5759814e0716f02417b39f6fab292193df68" -dependencies = [ - "proc-macro2", - "quote", - "regex", - "syn 2.0.96", ] [[package]] @@ -3239,35 +3213,6 @@ dependencies = [ "thiserror 1.0.69", ] -[[package]] -name = "regex" -version = "1.11.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b544ef1b4eac5dc2db33ea63606ae9ffcfac26c1416a2806ae0bf5f56b201191" -dependencies = [ - "aho-corasick", - "memchr", - "regex-automata", - "regex-syntax", -] - -[[package]] -name = "regex-automata" -version = "0.4.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "809e8dc61f6de73b46c85f4c96486310fe304c434cfa43669d7b40f711150908" -dependencies = [ - "aho-corasick", - "memchr", - "regex-syntax", -] - -[[package]] -name = "regex-syntax" -version = "0.8.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c" - [[package]] name = "renderdoc-sys" version = "1.1.0" diff --git a/src/database/.sqlx/query-014cf2ec55142a17047ad7c469685df75ae8e3c95a1a7c6c21be7b5624a82ae1.json b/src/database/.sqlx/query-014cf2ec55142a17047ad7c469685df75ae8e3c95a1a7c6c21be7b5624a82ae1.json new file mode 100644 index 0000000..6635f37 --- /dev/null +++ b/src/database/.sqlx/query-014cf2ec55142a17047ad7c469685df75ae8e3c95a1a7c6c21be7b5624a82ae1.json @@ -0,0 +1,12 @@ +{ + "db_name": "MySQL", + "query": "INSERT INTO PackageBases (name, description, created_at, updated_at) VALUES (?, ?, ?, ?)", + "describe": { + "columns": [], + "parameters": { + "Right": 4 + }, + "nullable": [] + }, + "hash": "014cf2ec55142a17047ad7c469685df75ae8e3c95a1a7c6c21be7b5624a82ae1" +} diff --git a/src/database/.sqlx/query-063059de083c42956506d991bc04472929e6b2618ab13eb90e772ad9bd9c1984.json b/src/database/.sqlx/query-063059de083c42956506d991bc04472929e6b2618ab13eb90e772ad9bd9c1984.json new file mode 100644 index 0000000..5e754bf --- /dev/null +++ b/src/database/.sqlx/query-063059de083c42956506d991bc04472929e6b2618ab13eb90e772ad9bd9c1984.json @@ -0,0 +1,12 @@ +{ + "db_name": "MySQL", + "query": "UPDATE Packages SET created_at = ? WHERE id = ?", + "describe": { + "columns": [], + "parameters": { + "Right": 2 + }, + "nullable": [] + }, + "hash": "063059de083c42956506d991bc04472929e6b2618ab13eb90e772ad9bd9c1984" +} diff --git a/src/database/.sqlx/query-0af939868e37bad5eb9097badeaefca62c247c4b2265a9667c4b33885126c771.json b/src/database/.sqlx/query-0af939868e37bad5eb9097badeaefca62c247c4b2265a9667c4b33885126c771.json new file mode 100644 index 0000000..97263b5 --- /dev/null +++ b/src/database/.sqlx/query-0af939868e37bad5eb9097badeaefca62c247c4b2265a9667c4b33885126c771.json @@ -0,0 +1,12 @@ +{ + "db_name": "MySQL", + "query": "UPDATE PackageBases SET name = ? WHERE id = ?", + "describe": { + "columns": [], + "parameters": { + "Right": 2 + }, + "nullable": [] + }, + "hash": "0af939868e37bad5eb9097badeaefca62c247c4b2265a9667c4b33885126c771" +} diff --git a/src/database/.sqlx/query-0bb7353d64231dc12416f5504d94513493670e3f2ae017d87a2f0c3eca045f60.json b/src/database/.sqlx/query-0bb7353d64231dc12416f5504d94513493670e3f2ae017d87a2f0c3eca045f60.json new file mode 100644 index 0000000..0f4639e --- /dev/null +++ b/src/database/.sqlx/query-0bb7353d64231dc12416f5504d94513493670e3f2ae017d87a2f0c3eca045f60.json @@ -0,0 +1,84 @@ +{ + "db_name": "MySQL", + "query": "SELECT * FROM Users WHERE email = ?", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "id", + "type_info": { + "type": "Long", + "flags": "NOT_NULL | PRIMARY_KEY | UNSIGNED | AUTO_INCREMENT", + "max_size": 10 + } + }, + { + "ordinal": 1, + "name": "name", + "type_info": { + "type": "VarString", + "flags": "NOT_NULL | UNIQUE_KEY | NO_DEFAULT_VALUE", + "max_size": 124 + } + }, + { + "ordinal": 2, + "name": "email", + "type_info": { + "type": "VarString", + "flags": "NOT_NULL | UNIQUE_KEY | NO_DEFAULT_VALUE", + "max_size": 1020 + } + }, + { + "ordinal": 3, + "name": "password", + "type_info": { + "type": "VarString", + "flags": "NOT_NULL | NO_DEFAULT_VALUE", + "max_size": 1020 + } + }, + { + "ordinal": 4, + "name": "last_used", + "type_info": { + "type": "Timestamp", + "flags": "BINARY", + "max_size": 19 + } + }, + { + "ordinal": 5, + "name": "created_at", + "type_info": { + "type": "Timestamp", + "flags": "NOT_NULL | BINARY | TIMESTAMP", + "max_size": 19 + } + }, + { + "ordinal": 6, + "name": "updated_at", + "type_info": { + "type": "Timestamp", + "flags": "NOT_NULL | BINARY | TIMESTAMP", + "max_size": 19 + } + } + ], + "parameters": { + "Right": 1 + }, + "nullable": [ + false, + false, + false, + false, + true, + false, + false + ] + }, + "hash": "0bb7353d64231dc12416f5504d94513493670e3f2ae017d87a2f0c3eca045f60" +} diff --git a/src/database/.sqlx/query-346beb83d6351740a503b72133a190ac327ae79f6e555def8fec89fcc75fb015.json b/src/database/.sqlx/query-346beb83d6351740a503b72133a190ac327ae79f6e555def8fec89fcc75fb015.json new file mode 100644 index 0000000..ae86705 --- /dev/null +++ b/src/database/.sqlx/query-346beb83d6351740a503b72133a190ac327ae79f6e555def8fec89fcc75fb015.json @@ -0,0 +1,12 @@ +{ + "db_name": "MySQL", + "query": "UPDATE Packages SET version = ? WHERE id = ?", + "describe": { + "columns": [], + "parameters": { + "Right": 2 + }, + "nullable": [] + }, + "hash": "346beb83d6351740a503b72133a190ac327ae79f6e555def8fec89fcc75fb015" +} diff --git a/src/database/.sqlx/query-389e38e7e0a0b7d9ba667ac148a0a468da889a3455c47325938b819ab41ef4c8.json b/src/database/.sqlx/query-389e38e7e0a0b7d9ba667ac148a0a468da889a3455c47325938b819ab41ef4c8.json new file mode 100644 index 0000000..2e79b5c --- /dev/null +++ b/src/database/.sqlx/query-389e38e7e0a0b7d9ba667ac148a0a468da889a3455c47325938b819ab41ef4c8.json @@ -0,0 +1,12 @@ +{ + "db_name": "MySQL", + "query": "DELETE FROM PackageBases WHERE id = ?", + "describe": { + "columns": [], + "parameters": { + "Right": 1 + }, + "nullable": [] + }, + "hash": "389e38e7e0a0b7d9ba667ac148a0a468da889a3455c47325938b819ab41ef4c8" +} diff --git a/src/database/.sqlx/query-404747d44ee859e8c967695c29963594bb8273e66c053934ec20d5fc3db9d41e.json b/src/database/.sqlx/query-404747d44ee859e8c967695c29963594bb8273e66c053934ec20d5fc3db9d41e.json new file mode 100644 index 0000000..6a26eca --- /dev/null +++ b/src/database/.sqlx/query-404747d44ee859e8c967695c29963594bb8273e66c053934ec20d5fc3db9d41e.json @@ -0,0 +1,12 @@ +{ + "db_name": "MySQL", + "query": "DELETE FROM Users WHERE name = ?", + "describe": { + "columns": [], + "parameters": { + "Right": 1 + }, + "nullable": [] + }, + "hash": "404747d44ee859e8c967695c29963594bb8273e66c053934ec20d5fc3db9d41e" +} diff --git a/src/database/.sqlx/query-68ed36ae997fff190b4b15b80bf24b553d8ac922da251d9e8b8f4e897bab46b0.json b/src/database/.sqlx/query-68ed36ae997fff190b4b15b80bf24b553d8ac922da251d9e8b8f4e897bab46b0.json new file mode 100644 index 0000000..688e561 --- /dev/null +++ b/src/database/.sqlx/query-68ed36ae997fff190b4b15b80bf24b553d8ac922da251d9e8b8f4e897bab46b0.json @@ -0,0 +1,84 @@ +{ + "db_name": "MySQL", + "query": "SELECT * FROM Users WHERE name = ?", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "id", + "type_info": { + "type": "Long", + "flags": "NOT_NULL | PRIMARY_KEY | UNSIGNED | AUTO_INCREMENT", + "max_size": 10 + } + }, + { + "ordinal": 1, + "name": "name", + "type_info": { + "type": "VarString", + "flags": "NOT_NULL | UNIQUE_KEY | NO_DEFAULT_VALUE", + "max_size": 124 + } + }, + { + "ordinal": 2, + "name": "email", + "type_info": { + "type": "VarString", + "flags": "NOT_NULL | UNIQUE_KEY | NO_DEFAULT_VALUE", + "max_size": 1020 + } + }, + { + "ordinal": 3, + "name": "password", + "type_info": { + "type": "VarString", + "flags": "NOT_NULL | NO_DEFAULT_VALUE", + "max_size": 1020 + } + }, + { + "ordinal": 4, + "name": "last_used", + "type_info": { + "type": "Timestamp", + "flags": "BINARY", + "max_size": 19 + } + }, + { + "ordinal": 5, + "name": "created_at", + "type_info": { + "type": "Timestamp", + "flags": "NOT_NULL | BINARY | TIMESTAMP", + "max_size": 19 + } + }, + { + "ordinal": 6, + "name": "updated_at", + "type_info": { + "type": "Timestamp", + "flags": "NOT_NULL | BINARY | TIMESTAMP", + "max_size": 19 + } + } + ], + "parameters": { + "Right": 1 + }, + "nullable": [ + false, + false, + false, + false, + true, + false, + false + ] + }, + "hash": "68ed36ae997fff190b4b15b80bf24b553d8ac922da251d9e8b8f4e897bab46b0" +} diff --git a/src/database/.sqlx/query-695f4b0a4286cf625dc60dc3dfc4a9cd92aaea3ea58ef8702903983cfc32ab47.json b/src/database/.sqlx/query-695f4b0a4286cf625dc60dc3dfc4a9cd92aaea3ea58ef8702903983cfc32ab47.json new file mode 100644 index 0000000..64fcfb8 --- /dev/null +++ b/src/database/.sqlx/query-695f4b0a4286cf625dc60dc3dfc4a9cd92aaea3ea58ef8702903983cfc32ab47.json @@ -0,0 +1,104 @@ +{ + "db_name": "MySQL", + "query": "SELECT * FROM Packages WHERE id = ?", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "id", + "type_info": { + "type": "Long", + "flags": "NOT_NULL | PRIMARY_KEY | UNSIGNED | AUTO_INCREMENT", + "max_size": 10 + } + }, + { + "ordinal": 1, + "name": "package_base", + "type_info": { + "type": "Long", + "flags": "NOT_NULL | MULTIPLE_KEY | UNSIGNED | NO_DEFAULT_VALUE", + "max_size": 10 + } + }, + { + "ordinal": 2, + "name": "name", + "type_info": { + "type": "VarString", + "flags": "NOT_NULL | UNIQUE_KEY | NO_DEFAULT_VALUE", + "max_size": 508 + } + }, + { + "ordinal": 3, + "name": "version", + "type_info": { + "type": "VarString", + "flags": "NOT_NULL | NO_DEFAULT_VALUE", + "max_size": 508 + } + }, + { + "ordinal": 4, + "name": "description", + "type_info": { + "type": "VarString", + "flags": "", + "max_size": 1020 + } + }, + { + "ordinal": 5, + "name": "url", + "type_info": { + "type": "VarString", + "flags": "", + "max_size": 2040 + } + }, + { + "ordinal": 6, + "name": "flagged_at", + "type_info": { + "type": "Timestamp", + "flags": "BINARY", + "max_size": 19 + } + }, + { + "ordinal": 7, + "name": "created_at", + "type_info": { + "type": "Timestamp", + "flags": "NOT_NULL | BINARY | TIMESTAMP", + "max_size": 19 + } + }, + { + "ordinal": 8, + "name": "updated_at", + "type_info": { + "type": "Timestamp", + "flags": "NOT_NULL | BINARY | TIMESTAMP | ON_UPDATE_NOW", + "max_size": 19 + } + } + ], + "parameters": { + "Right": 1 + }, + "nullable": [ + false, + false, + false, + false, + true, + true, + true, + false, + false + ] + }, + "hash": "695f4b0a4286cf625dc60dc3dfc4a9cd92aaea3ea58ef8702903983cfc32ab47" +} diff --git a/src/database/.sqlx/query-7cc4cf73572c0830d1da7b8e621a79a09f3e3d8cfd42d3946bd1fac93838b913.json b/src/database/.sqlx/query-7cc4cf73572c0830d1da7b8e621a79a09f3e3d8cfd42d3946bd1fac93838b913.json new file mode 100644 index 0000000..27f3c2e --- /dev/null +++ b/src/database/.sqlx/query-7cc4cf73572c0830d1da7b8e621a79a09f3e3d8cfd42d3946bd1fac93838b913.json @@ -0,0 +1,12 @@ +{ + "db_name": "MySQL", + "query": "UPDATE Packages SET updated_at = ? WHERE id = ?", + "describe": { + "columns": [], + "parameters": { + "Right": 2 + }, + "nullable": [] + }, + "hash": "7cc4cf73572c0830d1da7b8e621a79a09f3e3d8cfd42d3946bd1fac93838b913" +} diff --git a/src/database/.sqlx/query-7f06016e9892486c938a5e94c9e5f70903a38ed314235712c28ac5e14d9ac20f.json b/src/database/.sqlx/query-7f06016e9892486c938a5e94c9e5f70903a38ed314235712c28ac5e14d9ac20f.json new file mode 100644 index 0000000..db397d0 --- /dev/null +++ b/src/database/.sqlx/query-7f06016e9892486c938a5e94c9e5f70903a38ed314235712c28ac5e14d9ac20f.json @@ -0,0 +1,12 @@ +{ + "db_name": "MySQL", + "query": "UPDATE PackageBases SET description = ? WHERE id = ?", + "describe": { + "columns": [], + "parameters": { + "Right": 2 + }, + "nullable": [] + }, + "hash": "7f06016e9892486c938a5e94c9e5f70903a38ed314235712c28ac5e14d9ac20f" +} diff --git a/src/database/.sqlx/query-839cea68f9de889f35a0d0ad0b48b4a0dc1af49f0f0e7bb12238d22a9c37fbbc.json b/src/database/.sqlx/query-839cea68f9de889f35a0d0ad0b48b4a0dc1af49f0f0e7bb12238d22a9c37fbbc.json new file mode 100644 index 0000000..85c33af --- /dev/null +++ b/src/database/.sqlx/query-839cea68f9de889f35a0d0ad0b48b4a0dc1af49f0f0e7bb12238d22a9c37fbbc.json @@ -0,0 +1,64 @@ +{ + "db_name": "MySQL", + "query": "SELECT * FROM PackageBases WHERE id = ?", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "id", + "type_info": { + "type": "Long", + "flags": "NOT_NULL | PRIMARY_KEY | UNSIGNED | AUTO_INCREMENT", + "max_size": 10 + } + }, + { + "ordinal": 1, + "name": "name", + "type_info": { + "type": "VarString", + "flags": "NOT_NULL | UNIQUE_KEY | NO_DEFAULT_VALUE", + "max_size": 508 + } + }, + { + "ordinal": 2, + "name": "description", + "type_info": { + "type": "VarString", + "flags": "", + "max_size": 2040 + } + }, + { + "ordinal": 3, + "name": "created_at", + "type_info": { + "type": "Timestamp", + "flags": "NOT_NULL | BINARY | TIMESTAMP", + "max_size": 19 + } + }, + { + "ordinal": 4, + "name": "updated_at", + "type_info": { + "type": "Timestamp", + "flags": "NOT_NULL | BINARY | TIMESTAMP | ON_UPDATE_NOW", + "max_size": 19 + } + } + ], + "parameters": { + "Right": 1 + }, + "nullable": [ + false, + false, + true, + false, + false + ] + }, + "hash": "839cea68f9de889f35a0d0ad0b48b4a0dc1af49f0f0e7bb12238d22a9c37fbbc" +} diff --git a/src/database/.sqlx/query-8af7a0169e934cb82997a1cab04e921f719ed9466c13713fda8736c540d0fa78.json b/src/database/.sqlx/query-8af7a0169e934cb82997a1cab04e921f719ed9466c13713fda8736c540d0fa78.json new file mode 100644 index 0000000..0a0d0ad --- /dev/null +++ b/src/database/.sqlx/query-8af7a0169e934cb82997a1cab04e921f719ed9466c13713fda8736c540d0fa78.json @@ -0,0 +1,12 @@ +{ + "db_name": "MySQL", + "query": "UPDATE Users SET updated_at = ? WHERE id = ?", + "describe": { + "columns": [], + "parameters": { + "Right": 2 + }, + "nullable": [] + }, + "hash": "8af7a0169e934cb82997a1cab04e921f719ed9466c13713fda8736c540d0fa78" +} diff --git a/src/database/.sqlx/query-8be76176b46f645095dce3bcbed11134ec0f43504d3a820698282848fd67dbad.json b/src/database/.sqlx/query-8be76176b46f645095dce3bcbed11134ec0f43504d3a820698282848fd67dbad.json new file mode 100644 index 0000000..8b24831 --- /dev/null +++ b/src/database/.sqlx/query-8be76176b46f645095dce3bcbed11134ec0f43504d3a820698282848fd67dbad.json @@ -0,0 +1,12 @@ +{ + "db_name": "MySQL", + "query": "UPDATE Users SET password = ? WHERE id = ?", + "describe": { + "columns": [], + "parameters": { + "Right": 2 + }, + "nullable": [] + }, + "hash": "8be76176b46f645095dce3bcbed11134ec0f43504d3a820698282848fd67dbad" +} diff --git a/src/database/.sqlx/query-8bfaca937858ed1060da5a650f749849d29af3d6345d0e02474abf4d8c78b89d.json b/src/database/.sqlx/query-8bfaca937858ed1060da5a650f749849d29af3d6345d0e02474abf4d8c78b89d.json new file mode 100644 index 0000000..ecb0a98 --- /dev/null +++ b/src/database/.sqlx/query-8bfaca937858ed1060da5a650f749849d29af3d6345d0e02474abf4d8c78b89d.json @@ -0,0 +1,12 @@ +{ + "db_name": "MySQL", + "query": "UPDATE Packages SET flagged_at = ? WHERE id = ?", + "describe": { + "columns": [], + "parameters": { + "Right": 2 + }, + "nullable": [] + }, + "hash": "8bfaca937858ed1060da5a650f749849d29af3d6345d0e02474abf4d8c78b89d" +} diff --git a/src/database/.sqlx/query-8e3ffe0d11d3eb38cd805771cd133588c0679404a68a8041f414553226abeeb2.json b/src/database/.sqlx/query-8e3ffe0d11d3eb38cd805771cd133588c0679404a68a8041f414553226abeeb2.json new file mode 100644 index 0000000..514a1f9 --- /dev/null +++ b/src/database/.sqlx/query-8e3ffe0d11d3eb38cd805771cd133588c0679404a68a8041f414553226abeeb2.json @@ -0,0 +1,84 @@ +{ + "db_name": "MySQL", + "query": "SELECT * FROM Users WHERE id = ?", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "id", + "type_info": { + "type": "Long", + "flags": "NOT_NULL | PRIMARY_KEY | UNSIGNED | AUTO_INCREMENT", + "max_size": 10 + } + }, + { + "ordinal": 1, + "name": "name", + "type_info": { + "type": "VarString", + "flags": "NOT_NULL | UNIQUE_KEY | NO_DEFAULT_VALUE", + "max_size": 124 + } + }, + { + "ordinal": 2, + "name": "email", + "type_info": { + "type": "VarString", + "flags": "NOT_NULL | UNIQUE_KEY | NO_DEFAULT_VALUE", + "max_size": 1020 + } + }, + { + "ordinal": 3, + "name": "password", + "type_info": { + "type": "VarString", + "flags": "NOT_NULL | NO_DEFAULT_VALUE", + "max_size": 1020 + } + }, + { + "ordinal": 4, + "name": "last_used", + "type_info": { + "type": "Timestamp", + "flags": "BINARY", + "max_size": 19 + } + }, + { + "ordinal": 5, + "name": "created_at", + "type_info": { + "type": "Timestamp", + "flags": "NOT_NULL | BINARY | TIMESTAMP", + "max_size": 19 + } + }, + { + "ordinal": 6, + "name": "updated_at", + "type_info": { + "type": "Timestamp", + "flags": "NOT_NULL | BINARY | TIMESTAMP", + "max_size": 19 + } + } + ], + "parameters": { + "Right": 1 + }, + "nullable": [ + false, + false, + false, + false, + true, + false, + false + ] + }, + "hash": "8e3ffe0d11d3eb38cd805771cd133588c0679404a68a8041f414553226abeeb2" +} diff --git a/src/database/.sqlx/query-93ec7d124c9bfa7329478d975614db874788ed297fe2d95275592becb186f942.json b/src/database/.sqlx/query-93ec7d124c9bfa7329478d975614db874788ed297fe2d95275592becb186f942.json new file mode 100644 index 0000000..a0b5b1c --- /dev/null +++ b/src/database/.sqlx/query-93ec7d124c9bfa7329478d975614db874788ed297fe2d95275592becb186f942.json @@ -0,0 +1,12 @@ +{ + "db_name": "MySQL", + "query": "UPDATE PackageBases SET created_at = ? WHERE id = ?", + "describe": { + "columns": [], + "parameters": { + "Right": 2 + }, + "nullable": [] + }, + "hash": "93ec7d124c9bfa7329478d975614db874788ed297fe2d95275592becb186f942" +} diff --git a/src/database/.sqlx/query-944eb40633e943a75244dee639fe6efb16919aff7172189c81240cb12462ae58.json b/src/database/.sqlx/query-944eb40633e943a75244dee639fe6efb16919aff7172189c81240cb12462ae58.json new file mode 100644 index 0000000..023fc05 --- /dev/null +++ b/src/database/.sqlx/query-944eb40633e943a75244dee639fe6efb16919aff7172189c81240cb12462ae58.json @@ -0,0 +1,104 @@ +{ + "db_name": "MySQL", + "query": "SELECT * FROM Packages WHERE name = ?", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "id", + "type_info": { + "type": "Long", + "flags": "NOT_NULL | PRIMARY_KEY | UNSIGNED | AUTO_INCREMENT", + "max_size": 10 + } + }, + { + "ordinal": 1, + "name": "package_base", + "type_info": { + "type": "Long", + "flags": "NOT_NULL | MULTIPLE_KEY | UNSIGNED | NO_DEFAULT_VALUE", + "max_size": 10 + } + }, + { + "ordinal": 2, + "name": "name", + "type_info": { + "type": "VarString", + "flags": "NOT_NULL | UNIQUE_KEY | NO_DEFAULT_VALUE", + "max_size": 508 + } + }, + { + "ordinal": 3, + "name": "version", + "type_info": { + "type": "VarString", + "flags": "NOT_NULL | NO_DEFAULT_VALUE", + "max_size": 508 + } + }, + { + "ordinal": 4, + "name": "description", + "type_info": { + "type": "VarString", + "flags": "", + "max_size": 1020 + } + }, + { + "ordinal": 5, + "name": "url", + "type_info": { + "type": "VarString", + "flags": "", + "max_size": 2040 + } + }, + { + "ordinal": 6, + "name": "flagged_at", + "type_info": { + "type": "Timestamp", + "flags": "BINARY", + "max_size": 19 + } + }, + { + "ordinal": 7, + "name": "created_at", + "type_info": { + "type": "Timestamp", + "flags": "NOT_NULL | BINARY | TIMESTAMP", + "max_size": 19 + } + }, + { + "ordinal": 8, + "name": "updated_at", + "type_info": { + "type": "Timestamp", + "flags": "NOT_NULL | BINARY | TIMESTAMP | ON_UPDATE_NOW", + "max_size": 19 + } + } + ], + "parameters": { + "Right": 1 + }, + "nullable": [ + false, + false, + false, + false, + true, + true, + true, + false, + false + ] + }, + "hash": "944eb40633e943a75244dee639fe6efb16919aff7172189c81240cb12462ae58" +} diff --git a/src/database/.sqlx/query-9be7f66630e64787e55946dff428d28035747b66e57260bc9cd4634a71a037a6.json b/src/database/.sqlx/query-9be7f66630e64787e55946dff428d28035747b66e57260bc9cd4634a71a037a6.json new file mode 100644 index 0000000..083bb37 --- /dev/null +++ b/src/database/.sqlx/query-9be7f66630e64787e55946dff428d28035747b66e57260bc9cd4634a71a037a6.json @@ -0,0 +1,12 @@ +{ + "db_name": "MySQL", + "query": "UPDATE Users SET email = ? WHERE id = ?", + "describe": { + "columns": [], + "parameters": { + "Right": 2 + }, + "nullable": [] + }, + "hash": "9be7f66630e64787e55946dff428d28035747b66e57260bc9cd4634a71a037a6" +} diff --git a/src/database/.sqlx/query-9fa86328c40ce0469f755efb4876010092b7bc9f240a5d43dc69f9d0b1b5b7ce.json b/src/database/.sqlx/query-9fa86328c40ce0469f755efb4876010092b7bc9f240a5d43dc69f9d0b1b5b7ce.json new file mode 100644 index 0000000..7c34a5b --- /dev/null +++ b/src/database/.sqlx/query-9fa86328c40ce0469f755efb4876010092b7bc9f240a5d43dc69f9d0b1b5b7ce.json @@ -0,0 +1,12 @@ +{ + "db_name": "MySQL", + "query": "DELETE FROM Users WHERE id = ?", + "describe": { + "columns": [], + "parameters": { + "Right": 1 + }, + "nullable": [] + }, + "hash": "9fa86328c40ce0469f755efb4876010092b7bc9f240a5d43dc69f9d0b1b5b7ce" +} diff --git a/src/database/.sqlx/query-b5814b93236d587957a103e61726b0b9ae811ba6bff0617871e76de3ef0ff662.json b/src/database/.sqlx/query-b5814b93236d587957a103e61726b0b9ae811ba6bff0617871e76de3ef0ff662.json new file mode 100644 index 0000000..db15194 --- /dev/null +++ b/src/database/.sqlx/query-b5814b93236d587957a103e61726b0b9ae811ba6bff0617871e76de3ef0ff662.json @@ -0,0 +1,12 @@ +{ + "db_name": "MySQL", + "query": "UPDATE Packages SET url = ? WHERE id = ?", + "describe": { + "columns": [], + "parameters": { + "Right": 2 + }, + "nullable": [] + }, + "hash": "b5814b93236d587957a103e61726b0b9ae811ba6bff0617871e76de3ef0ff662" +} diff --git a/src/database/.sqlx/query-c1abf048d65d421717f20343bb0ef4fcd78f8571cfe2347c147124763bd17491.json b/src/database/.sqlx/query-c1abf048d65d421717f20343bb0ef4fcd78f8571cfe2347c147124763bd17491.json new file mode 100644 index 0000000..3d9e1ec --- /dev/null +++ b/src/database/.sqlx/query-c1abf048d65d421717f20343bb0ef4fcd78f8571cfe2347c147124763bd17491.json @@ -0,0 +1,12 @@ +{ + "db_name": "MySQL", + "query": "UPDATE Packages SET description = ? WHERE id = ?", + "describe": { + "columns": [], + "parameters": { + "Right": 2 + }, + "nullable": [] + }, + "hash": "c1abf048d65d421717f20343bb0ef4fcd78f8571cfe2347c147124763bd17491" +} diff --git a/src/database/.sqlx/query-c2b00adbcb3c35a6ffa6b2bce08a738a9b3cd1ca4aa4c843909c7e14f7ef3e06.json b/src/database/.sqlx/query-c2b00adbcb3c35a6ffa6b2bce08a738a9b3cd1ca4aa4c843909c7e14f7ef3e06.json new file mode 100644 index 0000000..5e9d5c5 --- /dev/null +++ b/src/database/.sqlx/query-c2b00adbcb3c35a6ffa6b2bce08a738a9b3cd1ca4aa4c843909c7e14f7ef3e06.json @@ -0,0 +1,12 @@ +{ + "db_name": "MySQL", + "query": "DELETE FROM Users WHERE email = ?", + "describe": { + "columns": [], + "parameters": { + "Right": 1 + }, + "nullable": [] + }, + "hash": "c2b00adbcb3c35a6ffa6b2bce08a738a9b3cd1ca4aa4c843909c7e14f7ef3e06" +} diff --git a/src/database/.sqlx/query-c8de918b432ce82bc7bf1d09a378f9b092d74c2298ac126f7edbb7d59c536910.json b/src/database/.sqlx/query-c8de918b432ce82bc7bf1d09a378f9b092d74c2298ac126f7edbb7d59c536910.json new file mode 100644 index 0000000..a432718 --- /dev/null +++ b/src/database/.sqlx/query-c8de918b432ce82bc7bf1d09a378f9b092d74c2298ac126f7edbb7d59c536910.json @@ -0,0 +1,12 @@ +{ + "db_name": "MySQL", + "query": "UPDATE Packages SET package_base = ? WHERE id = ?", + "describe": { + "columns": [], + "parameters": { + "Right": 2 + }, + "nullable": [] + }, + "hash": "c8de918b432ce82bc7bf1d09a378f9b092d74c2298ac126f7edbb7d59c536910" +} diff --git a/src/database/.sqlx/query-cc8f7e13c6aedf6aa4d6d4fc39db7aa98b84baf911e7f779641c1dc514c676cd.json b/src/database/.sqlx/query-cc8f7e13c6aedf6aa4d6d4fc39db7aa98b84baf911e7f779641c1dc514c676cd.json new file mode 100644 index 0000000..efa1af3 --- /dev/null +++ b/src/database/.sqlx/query-cc8f7e13c6aedf6aa4d6d4fc39db7aa98b84baf911e7f779641c1dc514c676cd.json @@ -0,0 +1,12 @@ +{ + "db_name": "MySQL", + "query": "UPDATE Users SET last_used = ? WHERE id = ?", + "describe": { + "columns": [], + "parameters": { + "Right": 2 + }, + "nullable": [] + }, + "hash": "cc8f7e13c6aedf6aa4d6d4fc39db7aa98b84baf911e7f779641c1dc514c676cd" +} diff --git a/src/database/.sqlx/query-cf79e2f6038dddd055d535d2c41dd8dccd1a4e6a763963590c904c25abf33137.json b/src/database/.sqlx/query-cf79e2f6038dddd055d535d2c41dd8dccd1a4e6a763963590c904c25abf33137.json new file mode 100644 index 0000000..d27cc6d --- /dev/null +++ b/src/database/.sqlx/query-cf79e2f6038dddd055d535d2c41dd8dccd1a4e6a763963590c904c25abf33137.json @@ -0,0 +1,12 @@ +{ + "db_name": "MySQL", + "query": "UPDATE Users SET created_at = ? WHERE id = ?", + "describe": { + "columns": [], + "parameters": { + "Right": 2 + }, + "nullable": [] + }, + "hash": "cf79e2f6038dddd055d535d2c41dd8dccd1a4e6a763963590c904c25abf33137" +} diff --git a/src/database/.sqlx/query-d289747c7c7fba86e2b66174e2d1546f10e8213d36b6b3cd25016f829e9d731b.json b/src/database/.sqlx/query-d289747c7c7fba86e2b66174e2d1546f10e8213d36b6b3cd25016f829e9d731b.json new file mode 100644 index 0000000..60dd430 --- /dev/null +++ b/src/database/.sqlx/query-d289747c7c7fba86e2b66174e2d1546f10e8213d36b6b3cd25016f829e9d731b.json @@ -0,0 +1,12 @@ +{ + "db_name": "MySQL", + "query": "UPDATE PackageBases SET updated_at = ? WHERE id = ?", + "describe": { + "columns": [], + "parameters": { + "Right": 2 + }, + "nullable": [] + }, + "hash": "d289747c7c7fba86e2b66174e2d1546f10e8213d36b6b3cd25016f829e9d731b" +} diff --git a/src/database/.sqlx/query-d474dd848d0ef8832afd4d1302fa562a3c4a4569032e8636d664043b5dc96661.json b/src/database/.sqlx/query-d474dd848d0ef8832afd4d1302fa562a3c4a4569032e8636d664043b5dc96661.json new file mode 100644 index 0000000..5a21f41 --- /dev/null +++ b/src/database/.sqlx/query-d474dd848d0ef8832afd4d1302fa562a3c4a4569032e8636d664043b5dc96661.json @@ -0,0 +1,12 @@ +{ + "db_name": "MySQL", + "query": "DELETE FROM Packages WHERE id = ?", + "describe": { + "columns": [], + "parameters": { + "Right": 1 + }, + "nullable": [] + }, + "hash": "d474dd848d0ef8832afd4d1302fa562a3c4a4569032e8636d664043b5dc96661" +} diff --git a/src/database/.sqlx/query-daf98e6f1013c4993f7329f6fa690e92bccd89d1ff90131719c40626088dabd1.json b/src/database/.sqlx/query-daf98e6f1013c4993f7329f6fa690e92bccd89d1ff90131719c40626088dabd1.json new file mode 100644 index 0000000..6108db8 --- /dev/null +++ b/src/database/.sqlx/query-daf98e6f1013c4993f7329f6fa690e92bccd89d1ff90131719c40626088dabd1.json @@ -0,0 +1,12 @@ +{ + "db_name": "MySQL", + "query": "INSERT INTO Users (name, email, password, last_used, created_at, updated_at) VALUES (?, ?, ?, ?, ?, ?)", + "describe": { + "columns": [], + "parameters": { + "Right": 6 + }, + "nullable": [] + }, + "hash": "daf98e6f1013c4993f7329f6fa690e92bccd89d1ff90131719c40626088dabd1" +} diff --git a/src/database/.sqlx/query-dfc2574c39f3f5a9afc1bdb642d8bf8a5ce85e7f84fa0dadb53c88cce63e5634.json b/src/database/.sqlx/query-dfc2574c39f3f5a9afc1bdb642d8bf8a5ce85e7f84fa0dadb53c88cce63e5634.json new file mode 100644 index 0000000..5c3f63a --- /dev/null +++ b/src/database/.sqlx/query-dfc2574c39f3f5a9afc1bdb642d8bf8a5ce85e7f84fa0dadb53c88cce63e5634.json @@ -0,0 +1,12 @@ +{ + "db_name": "MySQL", + "query": "INSERT INTO Packages (package_base, name, version, description, url, flagged_at, created_at, updated_at) VALUES (?, ?, ?, ?, ?, ?, ?, ?)", + "describe": { + "columns": [], + "parameters": { + "Right": 8 + }, + "nullable": [] + }, + "hash": "dfc2574c39f3f5a9afc1bdb642d8bf8a5ce85e7f84fa0dadb53c88cce63e5634" +} diff --git a/src/database/.sqlx/query-e8ee44281a87c6e7147332dd5548971cb804a1ab1edcdae8bf009ac39059c2bb.json b/src/database/.sqlx/query-e8ee44281a87c6e7147332dd5548971cb804a1ab1edcdae8bf009ac39059c2bb.json new file mode 100644 index 0000000..9841c3d --- /dev/null +++ b/src/database/.sqlx/query-e8ee44281a87c6e7147332dd5548971cb804a1ab1edcdae8bf009ac39059c2bb.json @@ -0,0 +1,12 @@ +{ + "db_name": "MySQL", + "query": "UPDATE Packages SET name = ? WHERE id = ?", + "describe": { + "columns": [], + "parameters": { + "Right": 2 + }, + "nullable": [] + }, + "hash": "e8ee44281a87c6e7147332dd5548971cb804a1ab1edcdae8bf009ac39059c2bb" +} diff --git a/src/database/.sqlx/query-f4963ad77bcbc0af4fc929f1f66b7ee842c26c44da32ae9bbbc06c466a908ccf.json b/src/database/.sqlx/query-f4963ad77bcbc0af4fc929f1f66b7ee842c26c44da32ae9bbbc06c466a908ccf.json new file mode 100644 index 0000000..722ae18 --- /dev/null +++ b/src/database/.sqlx/query-f4963ad77bcbc0af4fc929f1f66b7ee842c26c44da32ae9bbbc06c466a908ccf.json @@ -0,0 +1,12 @@ +{ + "db_name": "MySQL", + "query": "DELETE FROM Packages WHERE name = ?", + "describe": { + "columns": [], + "parameters": { + "Right": 1 + }, + "nullable": [] + }, + "hash": "f4963ad77bcbc0af4fc929f1f66b7ee842c26c44da32ae9bbbc06c466a908ccf" +} diff --git a/src/database/.sqlx/query-f656bd1abb82c10af4e0e21b4a04a364988f5329356282f2ae0098dbfcaec671.json b/src/database/.sqlx/query-f656bd1abb82c10af4e0e21b4a04a364988f5329356282f2ae0098dbfcaec671.json new file mode 100644 index 0000000..e818217 --- /dev/null +++ b/src/database/.sqlx/query-f656bd1abb82c10af4e0e21b4a04a364988f5329356282f2ae0098dbfcaec671.json @@ -0,0 +1,12 @@ +{ + "db_name": "MySQL", + "query": "UPDATE Users SET name = ? WHERE id = ?", + "describe": { + "columns": [], + "parameters": { + "Right": 2 + }, + "nullable": [] + }, + "hash": "f656bd1abb82c10af4e0e21b4a04a364988f5329356282f2ae0098dbfcaec671" +} diff --git a/src/database/Cargo.toml b/src/database/Cargo.toml index 69edf73..0ed9ab6 100644 --- a/src/database/Cargo.toml +++ b/src/database/Cargo.toml @@ -4,9 +4,7 @@ version = "0.1.0" edition = "2024" [dependencies] -thiserror = "2.0.11" -derive_more = { version = "1.0.0", features = ["deref", "deref_mut", "from", "into"] } -garde = { version = "0.22.0", features = ["email", "url", "derive"] } +derive_more = { version = "1.0.0", features = ["deref", "into"] } chrono = { version = "0.4.39", default-features = false, features = [ "std", @@ -18,3 +16,6 @@ sqlx = { version = "0.8.3", default-features = false, features = [ "chrono", "runtime-tokio", ] } + +# thiserror = "2.0.11" +# garde = { version = "0.22.0", features = ["email", "url", "derive"] } diff --git a/src/database/src/adapter/mysql/base.rs b/src/database/src/adapter/mysql/base.rs index 347013e..9eaa45d 100644 --- a/src/database/src/adapter/mysql/base.rs +++ b/src/database/src/adapter/mysql/base.rs @@ -18,8 +18,8 @@ where let created_at = Utc::now(); let id = sqlx::query!( "INSERT INTO PackageBases (name, description, created_at, updated_at) VALUES (?, ?, ?, ?)", - data.name.0, - data.description.0, + data.name.as_str(), + data.description.as_ref(), created_at, created_at, ) .execute(&*connection) @@ -28,8 +28,8 @@ where Ok(Self::Existing { id, - name: data.name.into_inner().0, - description: data.description.into_inner().0, + name: data.name.into(), + description: data.description.into(), created_at, updated_at: created_at, }) @@ -52,14 +52,14 @@ where Field::Name(name) => { sqlx::query!( "UPDATE PackageBases SET name = ? WHERE id = ?", - name.0, + name.as_str(), existing.id ) } Field::Description(description) => { sqlx::query!( "UPDATE PackageBases SET description = ? WHERE id = ?", - description.0, + description.as_ref(), existing.id ) } @@ -78,8 +78,8 @@ where .await?; match data { - Field::Name(valid) => existing.name = valid.into_inner().0, - Field::Description(valid) => existing.description = valid.into_inner().0, + Field::Name(s) => existing.name = s.into(), + Field::Description(o) => existing.description = o.into(), Field::CreatedAt(date_time) => existing.created_at = date_time, Field::UpdatedAt(date_time) => existing.updated_at = date_time, } diff --git a/src/database/src/adapter/mysql/package.rs b/src/database/src/adapter/mysql/package.rs index 7cb483d..8ea6aea 100644 --- a/src/database/src/adapter/mysql/package.rs +++ b/src/database/src/adapter/mysql/package.rs @@ -21,10 +21,10 @@ where (package_base, name, version, description, url, flagged_at, created_at, updated_at) \ VALUES (?, ?, ?, ?, ?, ?, ?, ?)", data.package_base.id, - data.name.0, - data.version.0, - data.description.0, - data.url.0, + data.name.as_str(), + data.version.as_str(), + data.description.as_ref(), + data.url.as_ref(), data.flagged_at, created_at, created_at, @@ -36,10 +36,10 @@ where Ok(Self::Existing { id, package_base: data.package_base.id, - name: data.name.into_inner().0, - version: data.version.into_inner().0, - description: data.description.into_inner().0, - url: data.url.into_inner().0, + name: data.name.into(), + version: data.version.into(), + description: data.description.into(), + url: data.url.into(), flagged_at: data.flagged_at, created_at, updated_at: created_at, @@ -54,9 +54,13 @@ where .await } Unique::Name(name) => { - sqlx::query_as!(Package, "SELECT * FROM Packages WHERE name = ?", name.0) - .fetch_optional(connection) - .await + sqlx::query_as!( + Package, + "SELECT * FROM Packages WHERE name = ?", + name.as_str() + ) + .fetch_optional(connection) + .await } }?) } @@ -70,7 +74,7 @@ where Field::Name(name) => { sqlx::query!( "UPDATE Packages SET name = ? WHERE id = ?", - name.0, + name.as_str(), existing.id ) } @@ -84,21 +88,21 @@ where Field::Version(version) => { sqlx::query!( "UPDATE Packages SET version = ? WHERE id = ?", - version.0, + version.as_str(), existing.id ) } Field::Description(description) => { sqlx::query!( "UPDATE Packages SET description = ? WHERE id = ?", - description.0, + description.as_ref(), existing.id ) } Field::URL(url) => { sqlx::query!( "UPDATE Packages SET url = ? WHERE id = ?", - url.0, + url.as_ref(), existing.id ) } @@ -122,11 +126,11 @@ where .await?; match data { - Field::Name(valid) => existing.name = valid.into_inner().0, - Field::PackageBase(base) => existing.package_base = base.id, - Field::Version(valid) => existing.version = valid.into_inner().0, - Field::Description(valid) => existing.description = valid.into_inner().0, - Field::URL(valid) => existing.url = valid.into_inner().0, + Field::Name(s) => existing.name = s.into(), + Field::PackageBase(s) => existing.package_base = s.id, + Field::Version(s) => existing.version = s.into(), + Field::Description(o) => existing.description = o.into(), + Field::URL(o) => existing.url = o.into(), Field::FlaggedAt(date_time) => existing.flagged_at = date_time, Field::CreatedAt(date_time) => existing.created_at = date_time, Field::UpdatedAt(date_time) => existing.updated_at = date_time, @@ -139,7 +143,7 @@ where match data { Unique::Id(id) => sqlx::query!("DELETE FROM Packages WHERE id = ?", id), Unique::Name(name) => { - sqlx::query!("DELETE FROM Packages WHERE name = ?", name.0) + sqlx::query!("DELETE FROM Packages WHERE name = ?", name.as_str()) } } .execute(&*connection) diff --git a/src/database/src/adapter/mysql/user.rs b/src/database/src/adapter/mysql/user.rs index 60d0df3..e647e47 100644 --- a/src/database/src/adapter/mysql/user.rs +++ b/src/database/src/adapter/mysql/user.rs @@ -18,9 +18,9 @@ where let created_at = Utc::now(); let id = sqlx::query!( "INSERT INTO Users (name, email, password, last_used, created_at, updated_at) VALUES (?, ?, ?, ?, ?, ?)", - data.name.0, - data.email.0, - data.password.0, + data.name.as_str(), + data.email.as_str(), + data.password.as_str(), data.last_used, created_at, created_at, @@ -31,9 +31,9 @@ where Ok(Self::Existing { id, - name: data.name.into_inner().0, - email: data.email.into_inner().0, - password: data.password.into_inner().0, + name: data.name.into(), + email: data.email.into(), + password: data.password.into(), last_used: data.last_used, created_at, updated_at: created_at, @@ -48,12 +48,12 @@ where .await } Unique::Name(name) => { - sqlx::query_as!(User, "SELECT * FROM Users WHERE name = ?", name.0) + sqlx::query_as!(User, "SELECT * FROM Users WHERE name = ?", name.as_str()) .fetch_optional(connection) .await } Unique::Email(email) => { - sqlx::query_as!(User, "SELECT * FROM Users WHERE email = ?", email.0) + sqlx::query_as!(User, "SELECT * FROM Users WHERE email = ?", email.as_str()) .fetch_optional(connection) .await } @@ -69,21 +69,21 @@ where Field::Name(name) => { sqlx::query!( "UPDATE Users SET name = ? WHERE id = ?", - name.0, + name.as_str(), existing.id ) } Field::Email(email) => { sqlx::query!( "UPDATE Users SET email = ? WHERE id = ?", - email.0, + email.as_str(), existing.id ) } Field::Password(password) => { sqlx::query!( "UPDATE Users SET password = ? WHERE id = ?", - password.0, + password.as_str(), existing.id ) } @@ -109,9 +109,9 @@ where .await?; match data { - Field::Name(valid) => existing.name = valid.into_inner().0, - Field::Email(valid) => existing.email = valid.into_inner().0, - Field::Password(valid) => existing.password = valid.into_inner().0, + Field::Name(valid) => existing.name = valid.into(), + Field::Email(valid) => existing.email = valid.into(), + Field::Password(valid) => existing.password = valid.into(), Field::LastUsed(date_time) => existing.last_used = date_time, Field::CreatedAt(date_time) => existing.created_at = date_time, Field::UpdatedAt(date_time) => existing.updated_at = date_time, @@ -124,10 +124,10 @@ where match data { Unique::Id(id) => sqlx::query!("DELETE FROM Users WHERE id = ?", id), Unique::Name(name) => { - sqlx::query!("DELETE FROM Users WHERE name = ?", name.0) + sqlx::query!("DELETE FROM Users WHERE name = ?", name.as_str()) } Unique::Email(email) => { - sqlx::query!("DELETE FROM Users WHERE email = ?", email.0) + sqlx::query!("DELETE FROM Users WHERE email = ?", email.as_str()) } } .execute(&*connection) diff --git a/src/database/src/lib.rs b/src/database/src/lib.rs index 86d563e..0108ec5 100644 --- a/src/database/src/lib.rs +++ b/src/database/src/lib.rs @@ -1,17 +1,18 @@ -use garde::{Report, Unvalidated, Valid, Validate}; - -pub trait IntoValid: Validate { - fn into_valid(self) -> Result, Report> - where - Self: Sized, - ::Context: Default, - { - Unvalidated::new(self).validate() - } -} -impl IntoValid for T {} - pub mod adapter; pub mod atomic; pub mod connect; pub mod port; + +// use garde::{Report, Unvalidated, Valid, Validate}; + +// pub trait IntoValid: Validate { +// fn into_valid(self) -> Result, Report> +// where +// Self: Sized, +// ::Context: Default, +// { +// Unvalidated::new(self).validate() +// } +// } +// impl IntoValid for T {} + diff --git a/src/database/src/port.rs b/src/database/src/port.rs index d2e13cf..89c114e 100644 --- a/src/database/src/port.rs +++ b/src/database/src/port.rs @@ -17,6 +17,8 @@ pub trait CRUD { async fn delete(connection: &mut C, data: Self::Unique) -> Result; } +const TOO_LONG: &str = "too long"; + pub mod base; pub mod package; pub mod user; diff --git a/src/database/src/port/base.rs b/src/database/src/port/base.rs index d3fe2bc..bdc18ab 100644 --- a/src/database/src/port/base.rs +++ b/src/database/src/port/base.rs @@ -1,8 +1,7 @@ pub use super::{CRUD, Result}; pub use chrono::{DateTime, Utc}; -use derive_more::{Deref, From, Into}; -use garde::{Valid, Validate}; +use derive_more::{Deref, Into}; #[allow(async_fn_in_trait)] pub trait BaseRepository: @@ -13,24 +12,45 @@ pub trait BaseRepository: // #[derive(Deref, Into, Clone, Copy)] // pub struct Id(pub(crate) u64); -#[derive(Validate, Deref, From, Into)] -#[garde(transparent)] -pub struct Name(#[garde(length(chars, max = 127))] pub String); +#[derive(Clone, Deref, Into)] +pub struct Name(String); +impl TryFrom for Name { + type Error = &'static str; -#[derive(Validate, Deref, From, Into)] -#[garde(transparent)] -pub struct Description(#[garde(length(chars, max = 510))] pub Option); + fn try_from(value: String) -> std::result::Result { + if value.chars().count() > 127 { + Err(super::TOO_LONG) + } else { + Ok(Self(value)) + } + } +} + +#[derive(Clone, Deref, Into)] +pub struct Description(Option); +impl TryFrom> for Description { + type Error = &'static str; + + fn try_from(value: Option) -> std::result::Result { + if let Some(x) = &value { + if x.chars().count() > 510 { + return Err(super::TOO_LONG); + } + } + Ok(Self(value)) + } +} pub enum Field { - Name(Valid), - Description(Valid), + Name(Name), + Description(Description), CreatedAt(DateTime), UpdatedAt(DateTime), } pub struct New { - pub name: Valid, - pub description: Valid, + pub name: Name, + pub description: Description, } pub struct Base { diff --git a/src/database/src/port/package.rs b/src/database/src/port/package.rs index cdb50b7..f37d852 100644 --- a/src/database/src/port/package.rs +++ b/src/database/src/port/package.rs @@ -1,8 +1,7 @@ pub use super::{CRUD, Result, base::Base}; pub use chrono::{DateTime, Utc}; -use derive_more::{Deref, From, Into}; -use garde::{Valid, Validate}; +use derive_more::{Deref, Into}; #[allow(async_fn_in_trait)] pub trait PackageRepository: @@ -10,33 +9,75 @@ pub trait PackageRepository: { } -#[derive(Validate, Deref, From, Into)] -#[garde(transparent)] -pub struct Name(#[garde(length(chars, max = 127))] pub String); +#[derive(Clone, Deref, Into)] +pub struct Name(String); +impl TryFrom for Name { + type Error = &'static str; -#[derive(Validate, Deref, From, Into)] -#[garde(transparent)] -pub struct Version(#[garde(length(chars, max = 127))] pub String); + fn try_from(value: String) -> std::result::Result { + if value.chars().count() > 127 { + Err(super::TOO_LONG) + } else { + Ok(Self(value)) + } + } +} -#[derive(Validate, Deref, From, Into)] -#[garde(transparent)] -pub struct Description(#[garde(length(chars, max = 255))] pub Option); +#[derive(Clone, Deref, Into)] +pub struct Version(String); +impl TryFrom for Version { + type Error = &'static str; -#[derive(Validate, Deref, From, Into)] -#[garde(transparent)] -pub struct URL(#[garde(length(chars, max = 510))] pub Option); + fn try_from(value: String) -> std::result::Result { + if value.chars().count() > 127 { + Err(super::TOO_LONG) + } else { + Ok(Self(value)) + } + } +} + +#[derive(Clone, Deref, Into)] +pub struct Description(Option); +impl TryFrom> for Description { + type Error = &'static str; + + fn try_from(value: Option) -> std::result::Result { + if let Some(x) = &value { + if x.chars().count() > 255 { + return Err(super::TOO_LONG); + } + } + Ok(Self(value)) + } +} + +#[derive(Clone, Deref, Into)] +pub struct URL(Option); +impl TryFrom> for URL { + type Error = &'static str; + + fn try_from(value: Option) -> std::result::Result { + if let Some(x) = &value { + if x.chars().count() > 510 { + return Err(super::TOO_LONG); + } + } + Ok(Self(value)) + } +} pub enum Unique { Id(u64), - Name(Valid), + Name(Name), } pub enum Field { PackageBase(Base), - Name(Valid), - Version(Valid), - Description(Valid), - URL(Valid), + Name(Name), + Version(Version), + Description(Description), + URL(URL), FlaggedAt(Option>), CreatedAt(DateTime), UpdatedAt(DateTime), @@ -44,10 +85,10 @@ pub enum Field { pub struct New { pub package_base: Base, - pub name: Valid, - pub version: Valid, - pub description: Valid, - pub url: Valid, + pub name: Name, + pub version: Version, + pub description: Description, + pub url: URL, pub flagged_at: Option>, } diff --git a/src/database/src/port/user.rs b/src/database/src/port/user.rs index b0a3933..64f096d 100644 --- a/src/database/src/port/user.rs +++ b/src/database/src/port/user.rs @@ -1,8 +1,7 @@ pub use super::{CRUD, Result}; pub use chrono::{DateTime, Utc}; -use derive_more::{Deref, From, Into}; -use garde::{Valid, Validate}; +use derive_more::{Deref, Into}; #[allow(async_fn_in_trait)] pub trait UserRepository: @@ -10,37 +9,67 @@ pub trait UserRepository: { } -#[derive(Validate, Deref, From, Into)] -#[garde(transparent)] -pub struct Name(#[garde(length(chars, max = 31))] pub String); +#[derive(Clone, Deref, Into)] +pub struct Name(String); +impl TryFrom for Name { + type Error = &'static str; -#[derive(Validate, Deref, From, Into)] -#[garde(transparent)] -pub struct Email(#[garde(length(chars, max = 255))] pub String); + fn try_from(value: String) -> std::result::Result { + if value.chars().count() > 31 { + Err(super::TOO_LONG) + } else { + Ok(Self(value)) + } + } +} -#[derive(Validate, Deref, From, Into)] -#[garde(transparent)] -pub struct Password(#[garde(length(chars, max = 255))] pub String); +#[derive(Clone, Deref, Into)] +pub struct Email(String); +impl TryFrom for Email { + type Error = &'static str; + + fn try_from(value: String) -> std::result::Result { + if value.chars().count() > 255 { + Err(super::TOO_LONG) + } else { + Ok(Self(value)) + } + } +} + +#[derive(Clone, Deref, Into)] +pub struct Password(String); +impl TryFrom for Password { + type Error = &'static str; + + fn try_from(value: String) -> std::result::Result { + if value.chars().count() > 255 { + Err(super::TOO_LONG) + } else { + Ok(Self(value)) + } + } +} pub enum Unique { Id(u64), - Name(Valid), - Email(Valid), + Name(Name), + Email(Email), } pub enum Field { - Name(Valid), - Email(Valid), - Password(Valid), + Name(Name), + Email(Email), + Password(Password), LastUsed(Option>), CreatedAt(DateTime), UpdatedAt(DateTime), } pub struct New { - pub name: Valid, - pub email: Valid, - pub password: Valid, + pub name: Name, + pub email: Email, + pub password: Password, pub last_used: Option>, }