Simplify database field verification
This commit is contained in:
57
3/coursework/src/Cargo.lock
generated
57
3/coursework/src/Cargo.lock
generated
@ -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"
|
||||
|
@ -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"
|
||||
}
|
@ -0,0 +1,12 @@
|
||||
{
|
||||
"db_name": "MySQL",
|
||||
"query": "UPDATE Packages SET created_at = ? WHERE id = ?",
|
||||
"describe": {
|
||||
"columns": [],
|
||||
"parameters": {
|
||||
"Right": 2
|
||||
},
|
||||
"nullable": []
|
||||
},
|
||||
"hash": "063059de083c42956506d991bc04472929e6b2618ab13eb90e772ad9bd9c1984"
|
||||
}
|
@ -0,0 +1,12 @@
|
||||
{
|
||||
"db_name": "MySQL",
|
||||
"query": "UPDATE PackageBases SET name = ? WHERE id = ?",
|
||||
"describe": {
|
||||
"columns": [],
|
||||
"parameters": {
|
||||
"Right": 2
|
||||
},
|
||||
"nullable": []
|
||||
},
|
||||
"hash": "0af939868e37bad5eb9097badeaefca62c247c4b2265a9667c4b33885126c771"
|
||||
}
|
@ -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"
|
||||
}
|
@ -0,0 +1,12 @@
|
||||
{
|
||||
"db_name": "MySQL",
|
||||
"query": "UPDATE Packages SET version = ? WHERE id = ?",
|
||||
"describe": {
|
||||
"columns": [],
|
||||
"parameters": {
|
||||
"Right": 2
|
||||
},
|
||||
"nullable": []
|
||||
},
|
||||
"hash": "346beb83d6351740a503b72133a190ac327ae79f6e555def8fec89fcc75fb015"
|
||||
}
|
@ -0,0 +1,12 @@
|
||||
{
|
||||
"db_name": "MySQL",
|
||||
"query": "DELETE FROM PackageBases WHERE id = ?",
|
||||
"describe": {
|
||||
"columns": [],
|
||||
"parameters": {
|
||||
"Right": 1
|
||||
},
|
||||
"nullable": []
|
||||
},
|
||||
"hash": "389e38e7e0a0b7d9ba667ac148a0a468da889a3455c47325938b819ab41ef4c8"
|
||||
}
|
@ -0,0 +1,12 @@
|
||||
{
|
||||
"db_name": "MySQL",
|
||||
"query": "DELETE FROM Users WHERE name = ?",
|
||||
"describe": {
|
||||
"columns": [],
|
||||
"parameters": {
|
||||
"Right": 1
|
||||
},
|
||||
"nullable": []
|
||||
},
|
||||
"hash": "404747d44ee859e8c967695c29963594bb8273e66c053934ec20d5fc3db9d41e"
|
||||
}
|
@ -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"
|
||||
}
|
@ -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"
|
||||
}
|
@ -0,0 +1,12 @@
|
||||
{
|
||||
"db_name": "MySQL",
|
||||
"query": "UPDATE Packages SET updated_at = ? WHERE id = ?",
|
||||
"describe": {
|
||||
"columns": [],
|
||||
"parameters": {
|
||||
"Right": 2
|
||||
},
|
||||
"nullable": []
|
||||
},
|
||||
"hash": "7cc4cf73572c0830d1da7b8e621a79a09f3e3d8cfd42d3946bd1fac93838b913"
|
||||
}
|
@ -0,0 +1,12 @@
|
||||
{
|
||||
"db_name": "MySQL",
|
||||
"query": "UPDATE PackageBases SET description = ? WHERE id = ?",
|
||||
"describe": {
|
||||
"columns": [],
|
||||
"parameters": {
|
||||
"Right": 2
|
||||
},
|
||||
"nullable": []
|
||||
},
|
||||
"hash": "7f06016e9892486c938a5e94c9e5f70903a38ed314235712c28ac5e14d9ac20f"
|
||||
}
|
@ -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"
|
||||
}
|
@ -0,0 +1,12 @@
|
||||
{
|
||||
"db_name": "MySQL",
|
||||
"query": "UPDATE Users SET updated_at = ? WHERE id = ?",
|
||||
"describe": {
|
||||
"columns": [],
|
||||
"parameters": {
|
||||
"Right": 2
|
||||
},
|
||||
"nullable": []
|
||||
},
|
||||
"hash": "8af7a0169e934cb82997a1cab04e921f719ed9466c13713fda8736c540d0fa78"
|
||||
}
|
@ -0,0 +1,12 @@
|
||||
{
|
||||
"db_name": "MySQL",
|
||||
"query": "UPDATE Users SET password = ? WHERE id = ?",
|
||||
"describe": {
|
||||
"columns": [],
|
||||
"parameters": {
|
||||
"Right": 2
|
||||
},
|
||||
"nullable": []
|
||||
},
|
||||
"hash": "8be76176b46f645095dce3bcbed11134ec0f43504d3a820698282848fd67dbad"
|
||||
}
|
@ -0,0 +1,12 @@
|
||||
{
|
||||
"db_name": "MySQL",
|
||||
"query": "UPDATE Packages SET flagged_at = ? WHERE id = ?",
|
||||
"describe": {
|
||||
"columns": [],
|
||||
"parameters": {
|
||||
"Right": 2
|
||||
},
|
||||
"nullable": []
|
||||
},
|
||||
"hash": "8bfaca937858ed1060da5a650f749849d29af3d6345d0e02474abf4d8c78b89d"
|
||||
}
|
@ -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"
|
||||
}
|
@ -0,0 +1,12 @@
|
||||
{
|
||||
"db_name": "MySQL",
|
||||
"query": "UPDATE PackageBases SET created_at = ? WHERE id = ?",
|
||||
"describe": {
|
||||
"columns": [],
|
||||
"parameters": {
|
||||
"Right": 2
|
||||
},
|
||||
"nullable": []
|
||||
},
|
||||
"hash": "93ec7d124c9bfa7329478d975614db874788ed297fe2d95275592becb186f942"
|
||||
}
|
@ -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"
|
||||
}
|
@ -0,0 +1,12 @@
|
||||
{
|
||||
"db_name": "MySQL",
|
||||
"query": "UPDATE Users SET email = ? WHERE id = ?",
|
||||
"describe": {
|
||||
"columns": [],
|
||||
"parameters": {
|
||||
"Right": 2
|
||||
},
|
||||
"nullable": []
|
||||
},
|
||||
"hash": "9be7f66630e64787e55946dff428d28035747b66e57260bc9cd4634a71a037a6"
|
||||
}
|
@ -0,0 +1,12 @@
|
||||
{
|
||||
"db_name": "MySQL",
|
||||
"query": "DELETE FROM Users WHERE id = ?",
|
||||
"describe": {
|
||||
"columns": [],
|
||||
"parameters": {
|
||||
"Right": 1
|
||||
},
|
||||
"nullable": []
|
||||
},
|
||||
"hash": "9fa86328c40ce0469f755efb4876010092b7bc9f240a5d43dc69f9d0b1b5b7ce"
|
||||
}
|
@ -0,0 +1,12 @@
|
||||
{
|
||||
"db_name": "MySQL",
|
||||
"query": "UPDATE Packages SET url = ? WHERE id = ?",
|
||||
"describe": {
|
||||
"columns": [],
|
||||
"parameters": {
|
||||
"Right": 2
|
||||
},
|
||||
"nullable": []
|
||||
},
|
||||
"hash": "b5814b93236d587957a103e61726b0b9ae811ba6bff0617871e76de3ef0ff662"
|
||||
}
|
@ -0,0 +1,12 @@
|
||||
{
|
||||
"db_name": "MySQL",
|
||||
"query": "UPDATE Packages SET description = ? WHERE id = ?",
|
||||
"describe": {
|
||||
"columns": [],
|
||||
"parameters": {
|
||||
"Right": 2
|
||||
},
|
||||
"nullable": []
|
||||
},
|
||||
"hash": "c1abf048d65d421717f20343bb0ef4fcd78f8571cfe2347c147124763bd17491"
|
||||
}
|
@ -0,0 +1,12 @@
|
||||
{
|
||||
"db_name": "MySQL",
|
||||
"query": "DELETE FROM Users WHERE email = ?",
|
||||
"describe": {
|
||||
"columns": [],
|
||||
"parameters": {
|
||||
"Right": 1
|
||||
},
|
||||
"nullable": []
|
||||
},
|
||||
"hash": "c2b00adbcb3c35a6ffa6b2bce08a738a9b3cd1ca4aa4c843909c7e14f7ef3e06"
|
||||
}
|
@ -0,0 +1,12 @@
|
||||
{
|
||||
"db_name": "MySQL",
|
||||
"query": "UPDATE Packages SET package_base = ? WHERE id = ?",
|
||||
"describe": {
|
||||
"columns": [],
|
||||
"parameters": {
|
||||
"Right": 2
|
||||
},
|
||||
"nullable": []
|
||||
},
|
||||
"hash": "c8de918b432ce82bc7bf1d09a378f9b092d74c2298ac126f7edbb7d59c536910"
|
||||
}
|
@ -0,0 +1,12 @@
|
||||
{
|
||||
"db_name": "MySQL",
|
||||
"query": "UPDATE Users SET last_used = ? WHERE id = ?",
|
||||
"describe": {
|
||||
"columns": [],
|
||||
"parameters": {
|
||||
"Right": 2
|
||||
},
|
||||
"nullable": []
|
||||
},
|
||||
"hash": "cc8f7e13c6aedf6aa4d6d4fc39db7aa98b84baf911e7f779641c1dc514c676cd"
|
||||
}
|
@ -0,0 +1,12 @@
|
||||
{
|
||||
"db_name": "MySQL",
|
||||
"query": "UPDATE Users SET created_at = ? WHERE id = ?",
|
||||
"describe": {
|
||||
"columns": [],
|
||||
"parameters": {
|
||||
"Right": 2
|
||||
},
|
||||
"nullable": []
|
||||
},
|
||||
"hash": "cf79e2f6038dddd055d535d2c41dd8dccd1a4e6a763963590c904c25abf33137"
|
||||
}
|
@ -0,0 +1,12 @@
|
||||
{
|
||||
"db_name": "MySQL",
|
||||
"query": "UPDATE PackageBases SET updated_at = ? WHERE id = ?",
|
||||
"describe": {
|
||||
"columns": [],
|
||||
"parameters": {
|
||||
"Right": 2
|
||||
},
|
||||
"nullable": []
|
||||
},
|
||||
"hash": "d289747c7c7fba86e2b66174e2d1546f10e8213d36b6b3cd25016f829e9d731b"
|
||||
}
|
@ -0,0 +1,12 @@
|
||||
{
|
||||
"db_name": "MySQL",
|
||||
"query": "DELETE FROM Packages WHERE id = ?",
|
||||
"describe": {
|
||||
"columns": [],
|
||||
"parameters": {
|
||||
"Right": 1
|
||||
},
|
||||
"nullable": []
|
||||
},
|
||||
"hash": "d474dd848d0ef8832afd4d1302fa562a3c4a4569032e8636d664043b5dc96661"
|
||||
}
|
@ -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"
|
||||
}
|
@ -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"
|
||||
}
|
@ -0,0 +1,12 @@
|
||||
{
|
||||
"db_name": "MySQL",
|
||||
"query": "UPDATE Packages SET name = ? WHERE id = ?",
|
||||
"describe": {
|
||||
"columns": [],
|
||||
"parameters": {
|
||||
"Right": 2
|
||||
},
|
||||
"nullable": []
|
||||
},
|
||||
"hash": "e8ee44281a87c6e7147332dd5548971cb804a1ab1edcdae8bf009ac39059c2bb"
|
||||
}
|
@ -0,0 +1,12 @@
|
||||
{
|
||||
"db_name": "MySQL",
|
||||
"query": "DELETE FROM Packages WHERE name = ?",
|
||||
"describe": {
|
||||
"columns": [],
|
||||
"parameters": {
|
||||
"Right": 1
|
||||
},
|
||||
"nullable": []
|
||||
},
|
||||
"hash": "f4963ad77bcbc0af4fc929f1f66b7ee842c26c44da32ae9bbbc06c466a908ccf"
|
||||
}
|
@ -0,0 +1,12 @@
|
||||
{
|
||||
"db_name": "MySQL",
|
||||
"query": "UPDATE Users SET name = ? WHERE id = ?",
|
||||
"describe": {
|
||||
"columns": [],
|
||||
"parameters": {
|
||||
"Right": 2
|
||||
},
|
||||
"nullable": []
|
||||
},
|
||||
"hash": "f656bd1abb82c10af4e0e21b4a04a364988f5329356282f2ae0098dbfcaec671"
|
||||
}
|
@ -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"] }
|
||||
|
@ -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,
|
||||
}
|
||||
|
@ -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)
|
||||
|
@ -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)
|
||||
|
@ -1,17 +1,18 @@
|
||||
use garde::{Report, Unvalidated, Valid, Validate};
|
||||
|
||||
pub trait IntoValid: Validate {
|
||||
fn into_valid(self) -> Result<Valid<Self>, Report>
|
||||
where
|
||||
Self: Sized,
|
||||
<Self as Validate>::Context: Default,
|
||||
{
|
||||
Unvalidated::new(self).validate()
|
||||
}
|
||||
}
|
||||
impl<T: garde::Validate> 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<Valid<Self>, Report>
|
||||
// where
|
||||
// Self: Sized,
|
||||
// <Self as Validate>::Context: Default,
|
||||
// {
|
||||
// Unvalidated::new(self).validate()
|
||||
// }
|
||||
// }
|
||||
// impl<T: garde::Validate> IntoValid for T {}
|
||||
|
||||
|
@ -17,6 +17,8 @@ pub trait CRUD<C> {
|
||||
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;
|
||||
|
@ -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<C>:
|
||||
@ -13,24 +12,45 @@ pub trait BaseRepository<C>:
|
||||
// #[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<String> for Name {
|
||||
type Error = &'static str;
|
||||
|
||||
#[derive(Validate, Deref, From, Into)]
|
||||
#[garde(transparent)]
|
||||
pub struct Description(#[garde(length(chars, max = 510))] pub Option<String>);
|
||||
fn try_from(value: String) -> std::result::Result<Self, Self::Error> {
|
||||
if value.chars().count() > 127 {
|
||||
Err(super::TOO_LONG)
|
||||
} else {
|
||||
Ok(Self(value))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Clone, Deref, Into)]
|
||||
pub struct Description(Option<String>);
|
||||
impl TryFrom<Option<String>> for Description {
|
||||
type Error = &'static str;
|
||||
|
||||
fn try_from(value: Option<String>) -> std::result::Result<Self, Self::Error> {
|
||||
if let Some(x) = &value {
|
||||
if x.chars().count() > 510 {
|
||||
return Err(super::TOO_LONG);
|
||||
}
|
||||
}
|
||||
Ok(Self(value))
|
||||
}
|
||||
}
|
||||
|
||||
pub enum Field {
|
||||
Name(Valid<Name>),
|
||||
Description(Valid<Description>),
|
||||
Name(Name),
|
||||
Description(Description),
|
||||
CreatedAt(DateTime<Utc>),
|
||||
UpdatedAt(DateTime<Utc>),
|
||||
}
|
||||
|
||||
pub struct New {
|
||||
pub name: Valid<Name>,
|
||||
pub description: Valid<Description>,
|
||||
pub name: Name,
|
||||
pub description: Description,
|
||||
}
|
||||
|
||||
pub struct Base {
|
||||
|
@ -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<C>:
|
||||
@ -10,33 +9,75 @@ pub trait PackageRepository<C>:
|
||||
{
|
||||
}
|
||||
|
||||
#[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<String> 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<Self, Self::Error> {
|
||||
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<String>);
|
||||
#[derive(Clone, Deref, Into)]
|
||||
pub struct Version(String);
|
||||
impl TryFrom<String> for Version {
|
||||
type Error = &'static str;
|
||||
|
||||
#[derive(Validate, Deref, From, Into)]
|
||||
#[garde(transparent)]
|
||||
pub struct URL(#[garde(length(chars, max = 510))] pub Option<String>);
|
||||
fn try_from(value: String) -> std::result::Result<Self, Self::Error> {
|
||||
if value.chars().count() > 127 {
|
||||
Err(super::TOO_LONG)
|
||||
} else {
|
||||
Ok(Self(value))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Clone, Deref, Into)]
|
||||
pub struct Description(Option<String>);
|
||||
impl TryFrom<Option<String>> for Description {
|
||||
type Error = &'static str;
|
||||
|
||||
fn try_from(value: Option<String>) -> std::result::Result<Self, Self::Error> {
|
||||
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<String>);
|
||||
impl TryFrom<Option<String>> for URL {
|
||||
type Error = &'static str;
|
||||
|
||||
fn try_from(value: Option<String>) -> std::result::Result<Self, Self::Error> {
|
||||
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(Name),
|
||||
}
|
||||
|
||||
pub enum Field {
|
||||
PackageBase(Base),
|
||||
Name(Valid<Name>),
|
||||
Version(Valid<Version>),
|
||||
Description(Valid<Description>),
|
||||
URL(Valid<URL>),
|
||||
Name(Name),
|
||||
Version(Version),
|
||||
Description(Description),
|
||||
URL(URL),
|
||||
FlaggedAt(Option<DateTime<Utc>>),
|
||||
CreatedAt(DateTime<Utc>),
|
||||
UpdatedAt(DateTime<Utc>),
|
||||
@ -44,10 +85,10 @@ pub enum Field {
|
||||
|
||||
pub struct New {
|
||||
pub package_base: Base,
|
||||
pub name: Valid<Name>,
|
||||
pub version: Valid<Version>,
|
||||
pub description: Valid<Description>,
|
||||
pub url: Valid<URL>,
|
||||
pub name: Name,
|
||||
pub version: Version,
|
||||
pub description: Description,
|
||||
pub url: URL,
|
||||
pub flagged_at: Option<DateTime<Utc>>,
|
||||
}
|
||||
|
||||
|
@ -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<C>:
|
||||
@ -10,37 +9,67 @@ pub trait UserRepository<C>:
|
||||
{
|
||||
}
|
||||
|
||||
#[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<String> 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<Self, Self::Error> {
|
||||
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<String> for Email {
|
||||
type Error = &'static str;
|
||||
|
||||
fn try_from(value: String) -> std::result::Result<Self, Self::Error> {
|
||||
if value.chars().count() > 255 {
|
||||
Err(super::TOO_LONG)
|
||||
} else {
|
||||
Ok(Self(value))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Clone, Deref, Into)]
|
||||
pub struct Password(String);
|
||||
impl TryFrom<String> for Password {
|
||||
type Error = &'static str;
|
||||
|
||||
fn try_from(value: String) -> std::result::Result<Self, Self::Error> {
|
||||
if value.chars().count() > 255 {
|
||||
Err(super::TOO_LONG)
|
||||
} else {
|
||||
Ok(Self(value))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
pub enum Unique {
|
||||
Id(u64),
|
||||
Name(Valid<Name>),
|
||||
Email(Valid<Email>),
|
||||
Name(Name),
|
||||
Email(Email),
|
||||
}
|
||||
|
||||
pub enum Field {
|
||||
Name(Valid<Name>),
|
||||
Email(Valid<Email>),
|
||||
Password(Valid<Password>),
|
||||
Name(Name),
|
||||
Email(Email),
|
||||
Password(Password),
|
||||
LastUsed(Option<DateTime<Utc>>),
|
||||
CreatedAt(DateTime<Utc>),
|
||||
UpdatedAt(DateTime<Utc>),
|
||||
}
|
||||
|
||||
pub struct New {
|
||||
pub name: Valid<Name>,
|
||||
pub email: Valid<Email>,
|
||||
pub password: Valid<Password>,
|
||||
pub name: Name,
|
||||
pub email: Email,
|
||||
pub password: Password,
|
||||
pub last_used: Option<DateTime<Utc>>,
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user