Simplify database field verification
This commit is contained in:
57
src/Cargo.lock
generated
57
src/Cargo.lock
generated
@ -57,15 +57,6 @@ dependencies = [
|
|||||||
"zerocopy",
|
"zerocopy",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "aho-corasick"
|
|
||||||
version = "1.1.3"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916"
|
|
||||||
dependencies = [
|
|
||||||
"memchr",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "aliasable"
|
name = "aliasable"
|
||||||
version = "0.1.3"
|
version = "0.1.3"
|
||||||
@ -332,6 +323,7 @@ version = "0.1.0"
|
|||||||
dependencies = [
|
dependencies = [
|
||||||
"argon2",
|
"argon2",
|
||||||
"database",
|
"database",
|
||||||
|
"derive_more",
|
||||||
"garde",
|
"garde",
|
||||||
"thiserror 2.0.11",
|
"thiserror 2.0.11",
|
||||||
]
|
]
|
||||||
@ -915,9 +907,7 @@ version = "0.1.0"
|
|||||||
dependencies = [
|
dependencies = [
|
||||||
"chrono",
|
"chrono",
|
||||||
"derive_more",
|
"derive_more",
|
||||||
"garde",
|
|
||||||
"sqlx",
|
"sqlx",
|
||||||
"thiserror 2.0.11",
|
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@ -1430,23 +1420,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
|||||||
checksum = "6a989bd2fd12136080f7825ff410d9239ce84a2a639487fc9d924ee42e2fb84f"
|
checksum = "6a989bd2fd12136080f7825ff410d9239ce84a2a639487fc9d924ee42e2fb84f"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"compact_str",
|
"compact_str",
|
||||||
"garde_derive",
|
|
||||||
"once_cell",
|
|
||||||
"regex",
|
|
||||||
"smallvec",
|
"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]]
|
[[package]]
|
||||||
@ -3239,35 +3213,6 @@ dependencies = [
|
|||||||
"thiserror 1.0.69",
|
"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]]
|
[[package]]
|
||||||
name = "renderdoc-sys"
|
name = "renderdoc-sys"
|
||||||
version = "1.1.0"
|
version = "1.1.0"
|
||||||
|
12
src/database/.sqlx/query-014cf2ec55142a17047ad7c469685df75ae8e3c95a1a7c6c21be7b5624a82ae1.json
generated
Normal file
12
src/database/.sqlx/query-014cf2ec55142a17047ad7c469685df75ae8e3c95a1a7c6c21be7b5624a82ae1.json
generated
Normal file
@ -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"
|
||||||
|
}
|
12
src/database/.sqlx/query-063059de083c42956506d991bc04472929e6b2618ab13eb90e772ad9bd9c1984.json
generated
Normal file
12
src/database/.sqlx/query-063059de083c42956506d991bc04472929e6b2618ab13eb90e772ad9bd9c1984.json
generated
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
{
|
||||||
|
"db_name": "MySQL",
|
||||||
|
"query": "UPDATE Packages SET created_at = ? WHERE id = ?",
|
||||||
|
"describe": {
|
||||||
|
"columns": [],
|
||||||
|
"parameters": {
|
||||||
|
"Right": 2
|
||||||
|
},
|
||||||
|
"nullable": []
|
||||||
|
},
|
||||||
|
"hash": "063059de083c42956506d991bc04472929e6b2618ab13eb90e772ad9bd9c1984"
|
||||||
|
}
|
12
src/database/.sqlx/query-0af939868e37bad5eb9097badeaefca62c247c4b2265a9667c4b33885126c771.json
generated
Normal file
12
src/database/.sqlx/query-0af939868e37bad5eb9097badeaefca62c247c4b2265a9667c4b33885126c771.json
generated
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
{
|
||||||
|
"db_name": "MySQL",
|
||||||
|
"query": "UPDATE PackageBases SET name = ? WHERE id = ?",
|
||||||
|
"describe": {
|
||||||
|
"columns": [],
|
||||||
|
"parameters": {
|
||||||
|
"Right": 2
|
||||||
|
},
|
||||||
|
"nullable": []
|
||||||
|
},
|
||||||
|
"hash": "0af939868e37bad5eb9097badeaefca62c247c4b2265a9667c4b33885126c771"
|
||||||
|
}
|
84
src/database/.sqlx/query-0bb7353d64231dc12416f5504d94513493670e3f2ae017d87a2f0c3eca045f60.json
generated
Normal file
84
src/database/.sqlx/query-0bb7353d64231dc12416f5504d94513493670e3f2ae017d87a2f0c3eca045f60.json
generated
Normal file
@ -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"
|
||||||
|
}
|
12
src/database/.sqlx/query-346beb83d6351740a503b72133a190ac327ae79f6e555def8fec89fcc75fb015.json
generated
Normal file
12
src/database/.sqlx/query-346beb83d6351740a503b72133a190ac327ae79f6e555def8fec89fcc75fb015.json
generated
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
{
|
||||||
|
"db_name": "MySQL",
|
||||||
|
"query": "UPDATE Packages SET version = ? WHERE id = ?",
|
||||||
|
"describe": {
|
||||||
|
"columns": [],
|
||||||
|
"parameters": {
|
||||||
|
"Right": 2
|
||||||
|
},
|
||||||
|
"nullable": []
|
||||||
|
},
|
||||||
|
"hash": "346beb83d6351740a503b72133a190ac327ae79f6e555def8fec89fcc75fb015"
|
||||||
|
}
|
12
src/database/.sqlx/query-389e38e7e0a0b7d9ba667ac148a0a468da889a3455c47325938b819ab41ef4c8.json
generated
Normal file
12
src/database/.sqlx/query-389e38e7e0a0b7d9ba667ac148a0a468da889a3455c47325938b819ab41ef4c8.json
generated
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
{
|
||||||
|
"db_name": "MySQL",
|
||||||
|
"query": "DELETE FROM PackageBases WHERE id = ?",
|
||||||
|
"describe": {
|
||||||
|
"columns": [],
|
||||||
|
"parameters": {
|
||||||
|
"Right": 1
|
||||||
|
},
|
||||||
|
"nullable": []
|
||||||
|
},
|
||||||
|
"hash": "389e38e7e0a0b7d9ba667ac148a0a468da889a3455c47325938b819ab41ef4c8"
|
||||||
|
}
|
12
src/database/.sqlx/query-404747d44ee859e8c967695c29963594bb8273e66c053934ec20d5fc3db9d41e.json
generated
Normal file
12
src/database/.sqlx/query-404747d44ee859e8c967695c29963594bb8273e66c053934ec20d5fc3db9d41e.json
generated
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
{
|
||||||
|
"db_name": "MySQL",
|
||||||
|
"query": "DELETE FROM Users WHERE name = ?",
|
||||||
|
"describe": {
|
||||||
|
"columns": [],
|
||||||
|
"parameters": {
|
||||||
|
"Right": 1
|
||||||
|
},
|
||||||
|
"nullable": []
|
||||||
|
},
|
||||||
|
"hash": "404747d44ee859e8c967695c29963594bb8273e66c053934ec20d5fc3db9d41e"
|
||||||
|
}
|
84
src/database/.sqlx/query-68ed36ae997fff190b4b15b80bf24b553d8ac922da251d9e8b8f4e897bab46b0.json
generated
Normal file
84
src/database/.sqlx/query-68ed36ae997fff190b4b15b80bf24b553d8ac922da251d9e8b8f4e897bab46b0.json
generated
Normal file
@ -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"
|
||||||
|
}
|
104
src/database/.sqlx/query-695f4b0a4286cf625dc60dc3dfc4a9cd92aaea3ea58ef8702903983cfc32ab47.json
generated
Normal file
104
src/database/.sqlx/query-695f4b0a4286cf625dc60dc3dfc4a9cd92aaea3ea58ef8702903983cfc32ab47.json
generated
Normal file
@ -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"
|
||||||
|
}
|
12
src/database/.sqlx/query-7cc4cf73572c0830d1da7b8e621a79a09f3e3d8cfd42d3946bd1fac93838b913.json
generated
Normal file
12
src/database/.sqlx/query-7cc4cf73572c0830d1da7b8e621a79a09f3e3d8cfd42d3946bd1fac93838b913.json
generated
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
{
|
||||||
|
"db_name": "MySQL",
|
||||||
|
"query": "UPDATE Packages SET updated_at = ? WHERE id = ?",
|
||||||
|
"describe": {
|
||||||
|
"columns": [],
|
||||||
|
"parameters": {
|
||||||
|
"Right": 2
|
||||||
|
},
|
||||||
|
"nullable": []
|
||||||
|
},
|
||||||
|
"hash": "7cc4cf73572c0830d1da7b8e621a79a09f3e3d8cfd42d3946bd1fac93838b913"
|
||||||
|
}
|
12
src/database/.sqlx/query-7f06016e9892486c938a5e94c9e5f70903a38ed314235712c28ac5e14d9ac20f.json
generated
Normal file
12
src/database/.sqlx/query-7f06016e9892486c938a5e94c9e5f70903a38ed314235712c28ac5e14d9ac20f.json
generated
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
{
|
||||||
|
"db_name": "MySQL",
|
||||||
|
"query": "UPDATE PackageBases SET description = ? WHERE id = ?",
|
||||||
|
"describe": {
|
||||||
|
"columns": [],
|
||||||
|
"parameters": {
|
||||||
|
"Right": 2
|
||||||
|
},
|
||||||
|
"nullable": []
|
||||||
|
},
|
||||||
|
"hash": "7f06016e9892486c938a5e94c9e5f70903a38ed314235712c28ac5e14d9ac20f"
|
||||||
|
}
|
64
src/database/.sqlx/query-839cea68f9de889f35a0d0ad0b48b4a0dc1af49f0f0e7bb12238d22a9c37fbbc.json
generated
Normal file
64
src/database/.sqlx/query-839cea68f9de889f35a0d0ad0b48b4a0dc1af49f0f0e7bb12238d22a9c37fbbc.json
generated
Normal file
@ -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"
|
||||||
|
}
|
12
src/database/.sqlx/query-8af7a0169e934cb82997a1cab04e921f719ed9466c13713fda8736c540d0fa78.json
generated
Normal file
12
src/database/.sqlx/query-8af7a0169e934cb82997a1cab04e921f719ed9466c13713fda8736c540d0fa78.json
generated
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
{
|
||||||
|
"db_name": "MySQL",
|
||||||
|
"query": "UPDATE Users SET updated_at = ? WHERE id = ?",
|
||||||
|
"describe": {
|
||||||
|
"columns": [],
|
||||||
|
"parameters": {
|
||||||
|
"Right": 2
|
||||||
|
},
|
||||||
|
"nullable": []
|
||||||
|
},
|
||||||
|
"hash": "8af7a0169e934cb82997a1cab04e921f719ed9466c13713fda8736c540d0fa78"
|
||||||
|
}
|
12
src/database/.sqlx/query-8be76176b46f645095dce3bcbed11134ec0f43504d3a820698282848fd67dbad.json
generated
Normal file
12
src/database/.sqlx/query-8be76176b46f645095dce3bcbed11134ec0f43504d3a820698282848fd67dbad.json
generated
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
{
|
||||||
|
"db_name": "MySQL",
|
||||||
|
"query": "UPDATE Users SET password = ? WHERE id = ?",
|
||||||
|
"describe": {
|
||||||
|
"columns": [],
|
||||||
|
"parameters": {
|
||||||
|
"Right": 2
|
||||||
|
},
|
||||||
|
"nullable": []
|
||||||
|
},
|
||||||
|
"hash": "8be76176b46f645095dce3bcbed11134ec0f43504d3a820698282848fd67dbad"
|
||||||
|
}
|
12
src/database/.sqlx/query-8bfaca937858ed1060da5a650f749849d29af3d6345d0e02474abf4d8c78b89d.json
generated
Normal file
12
src/database/.sqlx/query-8bfaca937858ed1060da5a650f749849d29af3d6345d0e02474abf4d8c78b89d.json
generated
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
{
|
||||||
|
"db_name": "MySQL",
|
||||||
|
"query": "UPDATE Packages SET flagged_at = ? WHERE id = ?",
|
||||||
|
"describe": {
|
||||||
|
"columns": [],
|
||||||
|
"parameters": {
|
||||||
|
"Right": 2
|
||||||
|
},
|
||||||
|
"nullable": []
|
||||||
|
},
|
||||||
|
"hash": "8bfaca937858ed1060da5a650f749849d29af3d6345d0e02474abf4d8c78b89d"
|
||||||
|
}
|
84
src/database/.sqlx/query-8e3ffe0d11d3eb38cd805771cd133588c0679404a68a8041f414553226abeeb2.json
generated
Normal file
84
src/database/.sqlx/query-8e3ffe0d11d3eb38cd805771cd133588c0679404a68a8041f414553226abeeb2.json
generated
Normal file
@ -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"
|
||||||
|
}
|
12
src/database/.sqlx/query-93ec7d124c9bfa7329478d975614db874788ed297fe2d95275592becb186f942.json
generated
Normal file
12
src/database/.sqlx/query-93ec7d124c9bfa7329478d975614db874788ed297fe2d95275592becb186f942.json
generated
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
{
|
||||||
|
"db_name": "MySQL",
|
||||||
|
"query": "UPDATE PackageBases SET created_at = ? WHERE id = ?",
|
||||||
|
"describe": {
|
||||||
|
"columns": [],
|
||||||
|
"parameters": {
|
||||||
|
"Right": 2
|
||||||
|
},
|
||||||
|
"nullable": []
|
||||||
|
},
|
||||||
|
"hash": "93ec7d124c9bfa7329478d975614db874788ed297fe2d95275592becb186f942"
|
||||||
|
}
|
104
src/database/.sqlx/query-944eb40633e943a75244dee639fe6efb16919aff7172189c81240cb12462ae58.json
generated
Normal file
104
src/database/.sqlx/query-944eb40633e943a75244dee639fe6efb16919aff7172189c81240cb12462ae58.json
generated
Normal file
@ -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"
|
||||||
|
}
|
12
src/database/.sqlx/query-9be7f66630e64787e55946dff428d28035747b66e57260bc9cd4634a71a037a6.json
generated
Normal file
12
src/database/.sqlx/query-9be7f66630e64787e55946dff428d28035747b66e57260bc9cd4634a71a037a6.json
generated
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
{
|
||||||
|
"db_name": "MySQL",
|
||||||
|
"query": "UPDATE Users SET email = ? WHERE id = ?",
|
||||||
|
"describe": {
|
||||||
|
"columns": [],
|
||||||
|
"parameters": {
|
||||||
|
"Right": 2
|
||||||
|
},
|
||||||
|
"nullable": []
|
||||||
|
},
|
||||||
|
"hash": "9be7f66630e64787e55946dff428d28035747b66e57260bc9cd4634a71a037a6"
|
||||||
|
}
|
12
src/database/.sqlx/query-9fa86328c40ce0469f755efb4876010092b7bc9f240a5d43dc69f9d0b1b5b7ce.json
generated
Normal file
12
src/database/.sqlx/query-9fa86328c40ce0469f755efb4876010092b7bc9f240a5d43dc69f9d0b1b5b7ce.json
generated
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
{
|
||||||
|
"db_name": "MySQL",
|
||||||
|
"query": "DELETE FROM Users WHERE id = ?",
|
||||||
|
"describe": {
|
||||||
|
"columns": [],
|
||||||
|
"parameters": {
|
||||||
|
"Right": 1
|
||||||
|
},
|
||||||
|
"nullable": []
|
||||||
|
},
|
||||||
|
"hash": "9fa86328c40ce0469f755efb4876010092b7bc9f240a5d43dc69f9d0b1b5b7ce"
|
||||||
|
}
|
12
src/database/.sqlx/query-b5814b93236d587957a103e61726b0b9ae811ba6bff0617871e76de3ef0ff662.json
generated
Normal file
12
src/database/.sqlx/query-b5814b93236d587957a103e61726b0b9ae811ba6bff0617871e76de3ef0ff662.json
generated
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
{
|
||||||
|
"db_name": "MySQL",
|
||||||
|
"query": "UPDATE Packages SET url = ? WHERE id = ?",
|
||||||
|
"describe": {
|
||||||
|
"columns": [],
|
||||||
|
"parameters": {
|
||||||
|
"Right": 2
|
||||||
|
},
|
||||||
|
"nullable": []
|
||||||
|
},
|
||||||
|
"hash": "b5814b93236d587957a103e61726b0b9ae811ba6bff0617871e76de3ef0ff662"
|
||||||
|
}
|
12
src/database/.sqlx/query-c1abf048d65d421717f20343bb0ef4fcd78f8571cfe2347c147124763bd17491.json
generated
Normal file
12
src/database/.sqlx/query-c1abf048d65d421717f20343bb0ef4fcd78f8571cfe2347c147124763bd17491.json
generated
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
{
|
||||||
|
"db_name": "MySQL",
|
||||||
|
"query": "UPDATE Packages SET description = ? WHERE id = ?",
|
||||||
|
"describe": {
|
||||||
|
"columns": [],
|
||||||
|
"parameters": {
|
||||||
|
"Right": 2
|
||||||
|
},
|
||||||
|
"nullable": []
|
||||||
|
},
|
||||||
|
"hash": "c1abf048d65d421717f20343bb0ef4fcd78f8571cfe2347c147124763bd17491"
|
||||||
|
}
|
12
src/database/.sqlx/query-c2b00adbcb3c35a6ffa6b2bce08a738a9b3cd1ca4aa4c843909c7e14f7ef3e06.json
generated
Normal file
12
src/database/.sqlx/query-c2b00adbcb3c35a6ffa6b2bce08a738a9b3cd1ca4aa4c843909c7e14f7ef3e06.json
generated
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
{
|
||||||
|
"db_name": "MySQL",
|
||||||
|
"query": "DELETE FROM Users WHERE email = ?",
|
||||||
|
"describe": {
|
||||||
|
"columns": [],
|
||||||
|
"parameters": {
|
||||||
|
"Right": 1
|
||||||
|
},
|
||||||
|
"nullable": []
|
||||||
|
},
|
||||||
|
"hash": "c2b00adbcb3c35a6ffa6b2bce08a738a9b3cd1ca4aa4c843909c7e14f7ef3e06"
|
||||||
|
}
|
12
src/database/.sqlx/query-c8de918b432ce82bc7bf1d09a378f9b092d74c2298ac126f7edbb7d59c536910.json
generated
Normal file
12
src/database/.sqlx/query-c8de918b432ce82bc7bf1d09a378f9b092d74c2298ac126f7edbb7d59c536910.json
generated
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
{
|
||||||
|
"db_name": "MySQL",
|
||||||
|
"query": "UPDATE Packages SET package_base = ? WHERE id = ?",
|
||||||
|
"describe": {
|
||||||
|
"columns": [],
|
||||||
|
"parameters": {
|
||||||
|
"Right": 2
|
||||||
|
},
|
||||||
|
"nullable": []
|
||||||
|
},
|
||||||
|
"hash": "c8de918b432ce82bc7bf1d09a378f9b092d74c2298ac126f7edbb7d59c536910"
|
||||||
|
}
|
12
src/database/.sqlx/query-cc8f7e13c6aedf6aa4d6d4fc39db7aa98b84baf911e7f779641c1dc514c676cd.json
generated
Normal file
12
src/database/.sqlx/query-cc8f7e13c6aedf6aa4d6d4fc39db7aa98b84baf911e7f779641c1dc514c676cd.json
generated
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
{
|
||||||
|
"db_name": "MySQL",
|
||||||
|
"query": "UPDATE Users SET last_used = ? WHERE id = ?",
|
||||||
|
"describe": {
|
||||||
|
"columns": [],
|
||||||
|
"parameters": {
|
||||||
|
"Right": 2
|
||||||
|
},
|
||||||
|
"nullable": []
|
||||||
|
},
|
||||||
|
"hash": "cc8f7e13c6aedf6aa4d6d4fc39db7aa98b84baf911e7f779641c1dc514c676cd"
|
||||||
|
}
|
12
src/database/.sqlx/query-cf79e2f6038dddd055d535d2c41dd8dccd1a4e6a763963590c904c25abf33137.json
generated
Normal file
12
src/database/.sqlx/query-cf79e2f6038dddd055d535d2c41dd8dccd1a4e6a763963590c904c25abf33137.json
generated
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
{
|
||||||
|
"db_name": "MySQL",
|
||||||
|
"query": "UPDATE Users SET created_at = ? WHERE id = ?",
|
||||||
|
"describe": {
|
||||||
|
"columns": [],
|
||||||
|
"parameters": {
|
||||||
|
"Right": 2
|
||||||
|
},
|
||||||
|
"nullable": []
|
||||||
|
},
|
||||||
|
"hash": "cf79e2f6038dddd055d535d2c41dd8dccd1a4e6a763963590c904c25abf33137"
|
||||||
|
}
|
12
src/database/.sqlx/query-d289747c7c7fba86e2b66174e2d1546f10e8213d36b6b3cd25016f829e9d731b.json
generated
Normal file
12
src/database/.sqlx/query-d289747c7c7fba86e2b66174e2d1546f10e8213d36b6b3cd25016f829e9d731b.json
generated
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
{
|
||||||
|
"db_name": "MySQL",
|
||||||
|
"query": "UPDATE PackageBases SET updated_at = ? WHERE id = ?",
|
||||||
|
"describe": {
|
||||||
|
"columns": [],
|
||||||
|
"parameters": {
|
||||||
|
"Right": 2
|
||||||
|
},
|
||||||
|
"nullable": []
|
||||||
|
},
|
||||||
|
"hash": "d289747c7c7fba86e2b66174e2d1546f10e8213d36b6b3cd25016f829e9d731b"
|
||||||
|
}
|
12
src/database/.sqlx/query-d474dd848d0ef8832afd4d1302fa562a3c4a4569032e8636d664043b5dc96661.json
generated
Normal file
12
src/database/.sqlx/query-d474dd848d0ef8832afd4d1302fa562a3c4a4569032e8636d664043b5dc96661.json
generated
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
{
|
||||||
|
"db_name": "MySQL",
|
||||||
|
"query": "DELETE FROM Packages WHERE id = ?",
|
||||||
|
"describe": {
|
||||||
|
"columns": [],
|
||||||
|
"parameters": {
|
||||||
|
"Right": 1
|
||||||
|
},
|
||||||
|
"nullable": []
|
||||||
|
},
|
||||||
|
"hash": "d474dd848d0ef8832afd4d1302fa562a3c4a4569032e8636d664043b5dc96661"
|
||||||
|
}
|
12
src/database/.sqlx/query-daf98e6f1013c4993f7329f6fa690e92bccd89d1ff90131719c40626088dabd1.json
generated
Normal file
12
src/database/.sqlx/query-daf98e6f1013c4993f7329f6fa690e92bccd89d1ff90131719c40626088dabd1.json
generated
Normal file
@ -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"
|
||||||
|
}
|
12
src/database/.sqlx/query-dfc2574c39f3f5a9afc1bdb642d8bf8a5ce85e7f84fa0dadb53c88cce63e5634.json
generated
Normal file
12
src/database/.sqlx/query-dfc2574c39f3f5a9afc1bdb642d8bf8a5ce85e7f84fa0dadb53c88cce63e5634.json
generated
Normal file
@ -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"
|
||||||
|
}
|
12
src/database/.sqlx/query-e8ee44281a87c6e7147332dd5548971cb804a1ab1edcdae8bf009ac39059c2bb.json
generated
Normal file
12
src/database/.sqlx/query-e8ee44281a87c6e7147332dd5548971cb804a1ab1edcdae8bf009ac39059c2bb.json
generated
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
{
|
||||||
|
"db_name": "MySQL",
|
||||||
|
"query": "UPDATE Packages SET name = ? WHERE id = ?",
|
||||||
|
"describe": {
|
||||||
|
"columns": [],
|
||||||
|
"parameters": {
|
||||||
|
"Right": 2
|
||||||
|
},
|
||||||
|
"nullable": []
|
||||||
|
},
|
||||||
|
"hash": "e8ee44281a87c6e7147332dd5548971cb804a1ab1edcdae8bf009ac39059c2bb"
|
||||||
|
}
|
12
src/database/.sqlx/query-f4963ad77bcbc0af4fc929f1f66b7ee842c26c44da32ae9bbbc06c466a908ccf.json
generated
Normal file
12
src/database/.sqlx/query-f4963ad77bcbc0af4fc929f1f66b7ee842c26c44da32ae9bbbc06c466a908ccf.json
generated
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
{
|
||||||
|
"db_name": "MySQL",
|
||||||
|
"query": "DELETE FROM Packages WHERE name = ?",
|
||||||
|
"describe": {
|
||||||
|
"columns": [],
|
||||||
|
"parameters": {
|
||||||
|
"Right": 1
|
||||||
|
},
|
||||||
|
"nullable": []
|
||||||
|
},
|
||||||
|
"hash": "f4963ad77bcbc0af4fc929f1f66b7ee842c26c44da32ae9bbbc06c466a908ccf"
|
||||||
|
}
|
12
src/database/.sqlx/query-f656bd1abb82c10af4e0e21b4a04a364988f5329356282f2ae0098dbfcaec671.json
generated
Normal file
12
src/database/.sqlx/query-f656bd1abb82c10af4e0e21b4a04a364988f5329356282f2ae0098dbfcaec671.json
generated
Normal file
@ -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"
|
edition = "2024"
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
thiserror = "2.0.11"
|
derive_more = { version = "1.0.0", features = ["deref", "into"] }
|
||||||
derive_more = { version = "1.0.0", features = ["deref", "deref_mut", "from", "into"] }
|
|
||||||
garde = { version = "0.22.0", features = ["email", "url", "derive"] }
|
|
||||||
|
|
||||||
chrono = { version = "0.4.39", default-features = false, features = [
|
chrono = { version = "0.4.39", default-features = false, features = [
|
||||||
"std",
|
"std",
|
||||||
@ -18,3 +16,6 @@ sqlx = { version = "0.8.3", default-features = false, features = [
|
|||||||
"chrono",
|
"chrono",
|
||||||
"runtime-tokio",
|
"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 created_at = Utc::now();
|
||||||
let id = sqlx::query!(
|
let id = sqlx::query!(
|
||||||
"INSERT INTO PackageBases (name, description, created_at, updated_at) VALUES (?, ?, ?, ?)",
|
"INSERT INTO PackageBases (name, description, created_at, updated_at) VALUES (?, ?, ?, ?)",
|
||||||
data.name.0,
|
data.name.as_str(),
|
||||||
data.description.0,
|
data.description.as_ref(),
|
||||||
created_at, created_at,
|
created_at, created_at,
|
||||||
)
|
)
|
||||||
.execute(&*connection)
|
.execute(&*connection)
|
||||||
@ -28,8 +28,8 @@ where
|
|||||||
|
|
||||||
Ok(Self::Existing {
|
Ok(Self::Existing {
|
||||||
id,
|
id,
|
||||||
name: data.name.into_inner().0,
|
name: data.name.into(),
|
||||||
description: data.description.into_inner().0,
|
description: data.description.into(),
|
||||||
created_at,
|
created_at,
|
||||||
updated_at: created_at,
|
updated_at: created_at,
|
||||||
})
|
})
|
||||||
@ -52,14 +52,14 @@ where
|
|||||||
Field::Name(name) => {
|
Field::Name(name) => {
|
||||||
sqlx::query!(
|
sqlx::query!(
|
||||||
"UPDATE PackageBases SET name = ? WHERE id = ?",
|
"UPDATE PackageBases SET name = ? WHERE id = ?",
|
||||||
name.0,
|
name.as_str(),
|
||||||
existing.id
|
existing.id
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
Field::Description(description) => {
|
Field::Description(description) => {
|
||||||
sqlx::query!(
|
sqlx::query!(
|
||||||
"UPDATE PackageBases SET description = ? WHERE id = ?",
|
"UPDATE PackageBases SET description = ? WHERE id = ?",
|
||||||
description.0,
|
description.as_ref(),
|
||||||
existing.id
|
existing.id
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
@ -78,8 +78,8 @@ where
|
|||||||
.await?;
|
.await?;
|
||||||
|
|
||||||
match data {
|
match data {
|
||||||
Field::Name(valid) => existing.name = valid.into_inner().0,
|
Field::Name(s) => existing.name = s.into(),
|
||||||
Field::Description(valid) => existing.description = valid.into_inner().0,
|
Field::Description(o) => existing.description = o.into(),
|
||||||
Field::CreatedAt(date_time) => existing.created_at = date_time,
|
Field::CreatedAt(date_time) => existing.created_at = date_time,
|
||||||
Field::UpdatedAt(date_time) => existing.updated_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) \
|
(package_base, name, version, description, url, flagged_at, created_at, updated_at) \
|
||||||
VALUES (?, ?, ?, ?, ?, ?, ?, ?)",
|
VALUES (?, ?, ?, ?, ?, ?, ?, ?)",
|
||||||
data.package_base.id,
|
data.package_base.id,
|
||||||
data.name.0,
|
data.name.as_str(),
|
||||||
data.version.0,
|
data.version.as_str(),
|
||||||
data.description.0,
|
data.description.as_ref(),
|
||||||
data.url.0,
|
data.url.as_ref(),
|
||||||
data.flagged_at,
|
data.flagged_at,
|
||||||
created_at,
|
created_at,
|
||||||
created_at,
|
created_at,
|
||||||
@ -36,10 +36,10 @@ where
|
|||||||
Ok(Self::Existing {
|
Ok(Self::Existing {
|
||||||
id,
|
id,
|
||||||
package_base: data.package_base.id,
|
package_base: data.package_base.id,
|
||||||
name: data.name.into_inner().0,
|
name: data.name.into(),
|
||||||
version: data.version.into_inner().0,
|
version: data.version.into(),
|
||||||
description: data.description.into_inner().0,
|
description: data.description.into(),
|
||||||
url: data.url.into_inner().0,
|
url: data.url.into(),
|
||||||
flagged_at: data.flagged_at,
|
flagged_at: data.flagged_at,
|
||||||
created_at,
|
created_at,
|
||||||
updated_at: created_at,
|
updated_at: created_at,
|
||||||
@ -54,9 +54,13 @@ where
|
|||||||
.await
|
.await
|
||||||
}
|
}
|
||||||
Unique::Name(name) => {
|
Unique::Name(name) => {
|
||||||
sqlx::query_as!(Package, "SELECT * FROM Packages WHERE name = ?", name.0)
|
sqlx::query_as!(
|
||||||
.fetch_optional(connection)
|
Package,
|
||||||
.await
|
"SELECT * FROM Packages WHERE name = ?",
|
||||||
|
name.as_str()
|
||||||
|
)
|
||||||
|
.fetch_optional(connection)
|
||||||
|
.await
|
||||||
}
|
}
|
||||||
}?)
|
}?)
|
||||||
}
|
}
|
||||||
@ -70,7 +74,7 @@ where
|
|||||||
Field::Name(name) => {
|
Field::Name(name) => {
|
||||||
sqlx::query!(
|
sqlx::query!(
|
||||||
"UPDATE Packages SET name = ? WHERE id = ?",
|
"UPDATE Packages SET name = ? WHERE id = ?",
|
||||||
name.0,
|
name.as_str(),
|
||||||
existing.id
|
existing.id
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
@ -84,21 +88,21 @@ where
|
|||||||
Field::Version(version) => {
|
Field::Version(version) => {
|
||||||
sqlx::query!(
|
sqlx::query!(
|
||||||
"UPDATE Packages SET version = ? WHERE id = ?",
|
"UPDATE Packages SET version = ? WHERE id = ?",
|
||||||
version.0,
|
version.as_str(),
|
||||||
existing.id
|
existing.id
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
Field::Description(description) => {
|
Field::Description(description) => {
|
||||||
sqlx::query!(
|
sqlx::query!(
|
||||||
"UPDATE Packages SET description = ? WHERE id = ?",
|
"UPDATE Packages SET description = ? WHERE id = ?",
|
||||||
description.0,
|
description.as_ref(),
|
||||||
existing.id
|
existing.id
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
Field::URL(url) => {
|
Field::URL(url) => {
|
||||||
sqlx::query!(
|
sqlx::query!(
|
||||||
"UPDATE Packages SET url = ? WHERE id = ?",
|
"UPDATE Packages SET url = ? WHERE id = ?",
|
||||||
url.0,
|
url.as_ref(),
|
||||||
existing.id
|
existing.id
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
@ -122,11 +126,11 @@ where
|
|||||||
.await?;
|
.await?;
|
||||||
|
|
||||||
match data {
|
match data {
|
||||||
Field::Name(valid) => existing.name = valid.into_inner().0,
|
Field::Name(s) => existing.name = s.into(),
|
||||||
Field::PackageBase(base) => existing.package_base = base.id,
|
Field::PackageBase(s) => existing.package_base = s.id,
|
||||||
Field::Version(valid) => existing.version = valid.into_inner().0,
|
Field::Version(s) => existing.version = s.into(),
|
||||||
Field::Description(valid) => existing.description = valid.into_inner().0,
|
Field::Description(o) => existing.description = o.into(),
|
||||||
Field::URL(valid) => existing.url = valid.into_inner().0,
|
Field::URL(o) => existing.url = o.into(),
|
||||||
Field::FlaggedAt(date_time) => existing.flagged_at = date_time,
|
Field::FlaggedAt(date_time) => existing.flagged_at = date_time,
|
||||||
Field::CreatedAt(date_time) => existing.created_at = date_time,
|
Field::CreatedAt(date_time) => existing.created_at = date_time,
|
||||||
Field::UpdatedAt(date_time) => existing.updated_at = date_time,
|
Field::UpdatedAt(date_time) => existing.updated_at = date_time,
|
||||||
@ -139,7 +143,7 @@ where
|
|||||||
match data {
|
match data {
|
||||||
Unique::Id(id) => sqlx::query!("DELETE FROM Packages WHERE id = ?", id),
|
Unique::Id(id) => sqlx::query!("DELETE FROM Packages WHERE id = ?", id),
|
||||||
Unique::Name(name) => {
|
Unique::Name(name) => {
|
||||||
sqlx::query!("DELETE FROM Packages WHERE name = ?", name.0)
|
sqlx::query!("DELETE FROM Packages WHERE name = ?", name.as_str())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
.execute(&*connection)
|
.execute(&*connection)
|
||||||
|
@ -18,9 +18,9 @@ where
|
|||||||
let created_at = Utc::now();
|
let created_at = Utc::now();
|
||||||
let id = sqlx::query!(
|
let id = sqlx::query!(
|
||||||
"INSERT INTO Users (name, email, password, last_used, created_at, updated_at) VALUES (?, ?, ?, ?, ?, ?)",
|
"INSERT INTO Users (name, email, password, last_used, created_at, updated_at) VALUES (?, ?, ?, ?, ?, ?)",
|
||||||
data.name.0,
|
data.name.as_str(),
|
||||||
data.email.0,
|
data.email.as_str(),
|
||||||
data.password.0,
|
data.password.as_str(),
|
||||||
data.last_used,
|
data.last_used,
|
||||||
created_at,
|
created_at,
|
||||||
created_at,
|
created_at,
|
||||||
@ -31,9 +31,9 @@ where
|
|||||||
|
|
||||||
Ok(Self::Existing {
|
Ok(Self::Existing {
|
||||||
id,
|
id,
|
||||||
name: data.name.into_inner().0,
|
name: data.name.into(),
|
||||||
email: data.email.into_inner().0,
|
email: data.email.into(),
|
||||||
password: data.password.into_inner().0,
|
password: data.password.into(),
|
||||||
last_used: data.last_used,
|
last_used: data.last_used,
|
||||||
created_at,
|
created_at,
|
||||||
updated_at: created_at,
|
updated_at: created_at,
|
||||||
@ -48,12 +48,12 @@ where
|
|||||||
.await
|
.await
|
||||||
}
|
}
|
||||||
Unique::Name(name) => {
|
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)
|
.fetch_optional(connection)
|
||||||
.await
|
.await
|
||||||
}
|
}
|
||||||
Unique::Email(email) => {
|
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)
|
.fetch_optional(connection)
|
||||||
.await
|
.await
|
||||||
}
|
}
|
||||||
@ -69,21 +69,21 @@ where
|
|||||||
Field::Name(name) => {
|
Field::Name(name) => {
|
||||||
sqlx::query!(
|
sqlx::query!(
|
||||||
"UPDATE Users SET name = ? WHERE id = ?",
|
"UPDATE Users SET name = ? WHERE id = ?",
|
||||||
name.0,
|
name.as_str(),
|
||||||
existing.id
|
existing.id
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
Field::Email(email) => {
|
Field::Email(email) => {
|
||||||
sqlx::query!(
|
sqlx::query!(
|
||||||
"UPDATE Users SET email = ? WHERE id = ?",
|
"UPDATE Users SET email = ? WHERE id = ?",
|
||||||
email.0,
|
email.as_str(),
|
||||||
existing.id
|
existing.id
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
Field::Password(password) => {
|
Field::Password(password) => {
|
||||||
sqlx::query!(
|
sqlx::query!(
|
||||||
"UPDATE Users SET password = ? WHERE id = ?",
|
"UPDATE Users SET password = ? WHERE id = ?",
|
||||||
password.0,
|
password.as_str(),
|
||||||
existing.id
|
existing.id
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
@ -109,9 +109,9 @@ where
|
|||||||
.await?;
|
.await?;
|
||||||
|
|
||||||
match data {
|
match data {
|
||||||
Field::Name(valid) => existing.name = valid.into_inner().0,
|
Field::Name(valid) => existing.name = valid.into(),
|
||||||
Field::Email(valid) => existing.email = valid.into_inner().0,
|
Field::Email(valid) => existing.email = valid.into(),
|
||||||
Field::Password(valid) => existing.password = valid.into_inner().0,
|
Field::Password(valid) => existing.password = valid.into(),
|
||||||
Field::LastUsed(date_time) => existing.last_used = date_time,
|
Field::LastUsed(date_time) => existing.last_used = date_time,
|
||||||
Field::CreatedAt(date_time) => existing.created_at = date_time,
|
Field::CreatedAt(date_time) => existing.created_at = date_time,
|
||||||
Field::UpdatedAt(date_time) => existing.updated_at = date_time,
|
Field::UpdatedAt(date_time) => existing.updated_at = date_time,
|
||||||
@ -124,10 +124,10 @@ where
|
|||||||
match data {
|
match data {
|
||||||
Unique::Id(id) => sqlx::query!("DELETE FROM Users WHERE id = ?", id),
|
Unique::Id(id) => sqlx::query!("DELETE FROM Users WHERE id = ?", id),
|
||||||
Unique::Name(name) => {
|
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) => {
|
Unique::Email(email) => {
|
||||||
sqlx::query!("DELETE FROM Users WHERE email = ?", email.0)
|
sqlx::query!("DELETE FROM Users WHERE email = ?", email.as_str())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
.execute(&*connection)
|
.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 adapter;
|
||||||
pub mod atomic;
|
pub mod atomic;
|
||||||
pub mod connect;
|
pub mod connect;
|
||||||
pub mod port;
|
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;
|
async fn delete(connection: &mut C, data: Self::Unique) -> Result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const TOO_LONG: &str = "too long";
|
||||||
|
|
||||||
pub mod base;
|
pub mod base;
|
||||||
pub mod package;
|
pub mod package;
|
||||||
pub mod user;
|
pub mod user;
|
||||||
|
@ -1,8 +1,7 @@
|
|||||||
pub use super::{CRUD, Result};
|
pub use super::{CRUD, Result};
|
||||||
|
|
||||||
pub use chrono::{DateTime, Utc};
|
pub use chrono::{DateTime, Utc};
|
||||||
use derive_more::{Deref, From, Into};
|
use derive_more::{Deref, Into};
|
||||||
use garde::{Valid, Validate};
|
|
||||||
|
|
||||||
#[allow(async_fn_in_trait)]
|
#[allow(async_fn_in_trait)]
|
||||||
pub trait BaseRepository<C>:
|
pub trait BaseRepository<C>:
|
||||||
@ -13,24 +12,45 @@ pub trait BaseRepository<C>:
|
|||||||
// #[derive(Deref, Into, Clone, Copy)]
|
// #[derive(Deref, Into, Clone, Copy)]
|
||||||
// pub struct Id(pub(crate) u64);
|
// pub struct Id(pub(crate) u64);
|
||||||
|
|
||||||
#[derive(Validate, Deref, From, Into)]
|
#[derive(Clone, Deref, Into)]
|
||||||
#[garde(transparent)]
|
pub struct Name(String);
|
||||||
pub struct Name(#[garde(length(chars, max = 127))] pub String);
|
impl TryFrom<String> for Name {
|
||||||
|
type Error = &'static str;
|
||||||
|
|
||||||
#[derive(Validate, Deref, From, Into)]
|
fn try_from(value: String) -> std::result::Result<Self, Self::Error> {
|
||||||
#[garde(transparent)]
|
if value.chars().count() > 127 {
|
||||||
pub struct Description(#[garde(length(chars, max = 510))] pub Option<String>);
|
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 {
|
pub enum Field {
|
||||||
Name(Valid<Name>),
|
Name(Name),
|
||||||
Description(Valid<Description>),
|
Description(Description),
|
||||||
CreatedAt(DateTime<Utc>),
|
CreatedAt(DateTime<Utc>),
|
||||||
UpdatedAt(DateTime<Utc>),
|
UpdatedAt(DateTime<Utc>),
|
||||||
}
|
}
|
||||||
|
|
||||||
pub struct New {
|
pub struct New {
|
||||||
pub name: Valid<Name>,
|
pub name: Name,
|
||||||
pub description: Valid<Description>,
|
pub description: Description,
|
||||||
}
|
}
|
||||||
|
|
||||||
pub struct Base {
|
pub struct Base {
|
||||||
|
@ -1,8 +1,7 @@
|
|||||||
pub use super::{CRUD, Result, base::Base};
|
pub use super::{CRUD, Result, base::Base};
|
||||||
|
|
||||||
pub use chrono::{DateTime, Utc};
|
pub use chrono::{DateTime, Utc};
|
||||||
use derive_more::{Deref, From, Into};
|
use derive_more::{Deref, Into};
|
||||||
use garde::{Valid, Validate};
|
|
||||||
|
|
||||||
#[allow(async_fn_in_trait)]
|
#[allow(async_fn_in_trait)]
|
||||||
pub trait PackageRepository<C>:
|
pub trait PackageRepository<C>:
|
||||||
@ -10,33 +9,75 @@ pub trait PackageRepository<C>:
|
|||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Validate, Deref, From, Into)]
|
#[derive(Clone, Deref, Into)]
|
||||||
#[garde(transparent)]
|
pub struct Name(String);
|
||||||
pub struct Name(#[garde(length(chars, max = 127))] pub String);
|
impl TryFrom<String> for Name {
|
||||||
|
type Error = &'static str;
|
||||||
|
|
||||||
#[derive(Validate, Deref, From, Into)]
|
fn try_from(value: String) -> std::result::Result<Self, Self::Error> {
|
||||||
#[garde(transparent)]
|
if value.chars().count() > 127 {
|
||||||
pub struct Version(#[garde(length(chars, max = 127))] pub String);
|
Err(super::TOO_LONG)
|
||||||
|
} else {
|
||||||
|
Ok(Self(value))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#[derive(Validate, Deref, From, Into)]
|
#[derive(Clone, Deref, Into)]
|
||||||
#[garde(transparent)]
|
pub struct Version(String);
|
||||||
pub struct Description(#[garde(length(chars, max = 255))] pub Option<String>);
|
impl TryFrom<String> for Version {
|
||||||
|
type Error = &'static str;
|
||||||
|
|
||||||
#[derive(Validate, Deref, From, Into)]
|
fn try_from(value: String) -> std::result::Result<Self, Self::Error> {
|
||||||
#[garde(transparent)]
|
if value.chars().count() > 127 {
|
||||||
pub struct URL(#[garde(length(chars, max = 510))] pub Option<String>);
|
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 {
|
pub enum Unique {
|
||||||
Id(u64),
|
Id(u64),
|
||||||
Name(Valid<Name>),
|
Name(Name),
|
||||||
}
|
}
|
||||||
|
|
||||||
pub enum Field {
|
pub enum Field {
|
||||||
PackageBase(Base),
|
PackageBase(Base),
|
||||||
Name(Valid<Name>),
|
Name(Name),
|
||||||
Version(Valid<Version>),
|
Version(Version),
|
||||||
Description(Valid<Description>),
|
Description(Description),
|
||||||
URL(Valid<URL>),
|
URL(URL),
|
||||||
FlaggedAt(Option<DateTime<Utc>>),
|
FlaggedAt(Option<DateTime<Utc>>),
|
||||||
CreatedAt(DateTime<Utc>),
|
CreatedAt(DateTime<Utc>),
|
||||||
UpdatedAt(DateTime<Utc>),
|
UpdatedAt(DateTime<Utc>),
|
||||||
@ -44,10 +85,10 @@ pub enum Field {
|
|||||||
|
|
||||||
pub struct New {
|
pub struct New {
|
||||||
pub package_base: Base,
|
pub package_base: Base,
|
||||||
pub name: Valid<Name>,
|
pub name: Name,
|
||||||
pub version: Valid<Version>,
|
pub version: Version,
|
||||||
pub description: Valid<Description>,
|
pub description: Description,
|
||||||
pub url: Valid<URL>,
|
pub url: URL,
|
||||||
pub flagged_at: Option<DateTime<Utc>>,
|
pub flagged_at: Option<DateTime<Utc>>,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,8 +1,7 @@
|
|||||||
pub use super::{CRUD, Result};
|
pub use super::{CRUD, Result};
|
||||||
|
|
||||||
pub use chrono::{DateTime, Utc};
|
pub use chrono::{DateTime, Utc};
|
||||||
use derive_more::{Deref, From, Into};
|
use derive_more::{Deref, Into};
|
||||||
use garde::{Valid, Validate};
|
|
||||||
|
|
||||||
#[allow(async_fn_in_trait)]
|
#[allow(async_fn_in_trait)]
|
||||||
pub trait UserRepository<C>:
|
pub trait UserRepository<C>:
|
||||||
@ -10,37 +9,67 @@ pub trait UserRepository<C>:
|
|||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Validate, Deref, From, Into)]
|
#[derive(Clone, Deref, Into)]
|
||||||
#[garde(transparent)]
|
pub struct Name(String);
|
||||||
pub struct Name(#[garde(length(chars, max = 31))] pub String);
|
impl TryFrom<String> for Name {
|
||||||
|
type Error = &'static str;
|
||||||
|
|
||||||
#[derive(Validate, Deref, From, Into)]
|
fn try_from(value: String) -> std::result::Result<Self, Self::Error> {
|
||||||
#[garde(transparent)]
|
if value.chars().count() > 31 {
|
||||||
pub struct Email(#[garde(length(chars, max = 255))] pub String);
|
Err(super::TOO_LONG)
|
||||||
|
} else {
|
||||||
|
Ok(Self(value))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#[derive(Validate, Deref, From, Into)]
|
#[derive(Clone, Deref, Into)]
|
||||||
#[garde(transparent)]
|
pub struct Email(String);
|
||||||
pub struct Password(#[garde(length(chars, max = 255))] pub 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 {
|
pub enum Unique {
|
||||||
Id(u64),
|
Id(u64),
|
||||||
Name(Valid<Name>),
|
Name(Name),
|
||||||
Email(Valid<Email>),
|
Email(Email),
|
||||||
}
|
}
|
||||||
|
|
||||||
pub enum Field {
|
pub enum Field {
|
||||||
Name(Valid<Name>),
|
Name(Name),
|
||||||
Email(Valid<Email>),
|
Email(Email),
|
||||||
Password(Valid<Password>),
|
Password(Password),
|
||||||
LastUsed(Option<DateTime<Utc>>),
|
LastUsed(Option<DateTime<Utc>>),
|
||||||
CreatedAt(DateTime<Utc>),
|
CreatedAt(DateTime<Utc>),
|
||||||
UpdatedAt(DateTime<Utc>),
|
UpdatedAt(DateTime<Utc>),
|
||||||
}
|
}
|
||||||
|
|
||||||
pub struct New {
|
pub struct New {
|
||||||
pub name: Valid<Name>,
|
pub name: Name,
|
||||||
pub email: Valid<Email>,
|
pub email: Email,
|
||||||
pub password: Valid<Password>,
|
pub password: Password,
|
||||||
pub last_used: Option<DateTime<Utc>>,
|
pub last_used: Option<DateTime<Utc>>,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user