diff --git a/crates/database/queries/users/get_one_by_id.sql b/crates/database/queries/users/get_one_by_id.sql new file mode 100644 index 0000000..8301739 --- /dev/null +++ b/crates/database/queries/users/get_one_by_id.sql @@ -0,0 +1,14 @@ +select id, + created_at as "created_at: DateTime", + updated_at as "updated_at: DateTime", + is_admin as "is_admin: bool", + username, + name, + email, + password, + password_recover, + paper_key, + is_archived as "is_archived: bool" +from users + +where id is (?) diff --git a/crates/database/sqlx-data.json b/crates/database/sqlx-data.json index e77720a..00bbbe7 100644 --- a/crates/database/sqlx-data.json +++ b/crates/database/sqlx-data.json @@ -185,5 +185,83 @@ } }, "query": "select u.id,\n u.created_at as \"created_at: DateTime\",\n u.updated_at as \"updated_at: DateTime\",\n u.is_admin as \"is_admin: bool\",\n u.username,\n u.name,\n u.email,\n u.password,\n u.password_recover,\n u.paper_key,\n u.is_archived as \"is_archived: bool\"\nfrom users u\n\n inner join settings s on u.id = s.first_admin\n\nwhere u.is_admin is 1\n and u.is_archived is 0\n and u.id is s.first_admin\n\nlimit 1" + }, + "f4edf4567542eaead2e0db14b0d4197c5d3c1bc02da1897b571bf63bfcb4526a": { + "describe": { + "columns": [ + { + "name": "id", + "ordinal": 0, + "type_info": "Text" + }, + { + "name": "created_at: DateTime", + "ordinal": 1, + "type_info": "Text" + }, + { + "name": "updated_at: DateTime", + "ordinal": 2, + "type_info": "Text" + }, + { + "name": "is_admin: bool", + "ordinal": 3, + "type_info": "Int64" + }, + { + "name": "username", + "ordinal": 4, + "type_info": "Text" + }, + { + "name": "name", + "ordinal": 5, + "type_info": "Text" + }, + { + "name": "email", + "ordinal": 6, + "type_info": "Text" + }, + { + "name": "password", + "ordinal": 7, + "type_info": "Text" + }, + { + "name": "password_recover", + "ordinal": 8, + "type_info": "Text" + }, + { + "name": "paper_key", + "ordinal": 9, + "type_info": "Text" + }, + { + "name": "is_archived: bool", + "ordinal": 10, + "type_info": "Int64" + } + ], + "nullable": [ + false, + false, + false, + false, + false, + true, + true, + true, + true, + true, + false + ], + "parameters": { + "Right": 1 + } + }, + "query": "select id,\n created_at as \"created_at: DateTime\",\n updated_at as \"updated_at: DateTime\",\n is_admin as \"is_admin: bool\",\n username,\n name,\n email,\n password,\n password_recover,\n paper_key,\n is_archived as \"is_archived: bool\"\nfrom users\n\nwhere id is (?)\n" } } \ No newline at end of file diff --git a/crates/database/src/tables/users.rs b/crates/database/src/tables/users.rs index 6283664..e687e60 100644 --- a/crates/database/src/tables/users.rs +++ b/crates/database/src/tables/users.rs @@ -41,4 +41,14 @@ impl Users { Ok((query.rows_affected() == 1).then_some(())) } + + pub async fn get_one_by_id( + conn: impl SqliteExecutor<'_>, + id: &str, + ) -> Result, Error> { + sqlx::query_file_as!(Self, "queries/users/get_one_by_id.sql", id) + .fetch_optional(conn) + .await + .map_err(handle_error) + } } diff --git a/crates/users/src/database.rs b/crates/users/src/database.rs index b30c964..77dd943 100644 --- a/crates/users/src/database.rs +++ b/crates/users/src/database.rs @@ -42,4 +42,13 @@ impl User { .await?, ) } + + pub async fn get_by_id( + conn: impl SqliteExecutor<'_>, + id: &UserID, + ) -> Result, Error> { + Ok(DatabaseUsers::get_one_by_id(conn, &id.0) + .await? + .map(Self::from)) + } }