From d22ec819884032d61e52752d52a727c264831696 Mon Sep 17 00:00:00 2001 From: Fleeym <61891787+Fleeym@users.noreply.github.com> Date: Thu, 6 Jun 2024 00:07:51 +0300 Subject: [PATCH] add /v1/developers/:id --- src/endpoints/developers.rs | 30 ++++++++++++++++++++++++++++++ src/main.rs | 2 ++ src/types/models/developer.rs | 31 +++++++++++++++++++++++++++++++ 3 files changed, 63 insertions(+) diff --git a/src/endpoints/developers.rs b/src/endpoints/developers.rs index 18c5ce3..e7738b3 100644 --- a/src/endpoints/developers.rs +++ b/src/endpoints/developers.rs @@ -289,6 +289,36 @@ pub async fn get_me(auth: Auth) -> Result { })) } +#[derive(Deserialize)] +struct GetDeveloperPath { + id: i32, +} + +#[get("v1/developers/{id}")] +pub async fn get_developer( + data: web::Data, + path: web::Path, +) -> Result { + let mut pool = data.db.acquire().await.or(Err(ApiError::DbAcquireError))?; + let result = Developer::get_one(path.id, &mut pool).await?; + + if result.is_none() { + return Err(ApiError::NotFound("Developer not found".to_string())); + } + + let result = result.unwrap(); + Ok(web::Json(ApiResponse { + error: "".to_string(), + payload: DeveloperProfile { + id: result.id, + username: result.username, + display_name: result.display_name, + verified: result.verified, + admin: result.admin, + }, + })) +} + #[put("v1/developers/{id}")] pub async fn update_developer( auth: Auth, diff --git a/src/main.rs b/src/main.rs index 5ab7b4d..acf1856 100644 --- a/src/main.rs +++ b/src/main.rs @@ -107,8 +107,10 @@ async fn main() -> anyhow::Result<()> { .service(endpoints::auth::github::poll_github_login) .service(endpoints::auth::github::start_github_login) .service(endpoints::developers::developer_index) + .service(endpoints::developers::get_developer) .service(endpoints::developers::add_developer_to_mod) .service(endpoints::developers::remove_dev_from_mod) + .service(endpoints::developers::delete_token) .service(endpoints::developers::delete_tokens) .service(endpoints::developers::update_profile) .service(endpoints::developers::get_own_mods) diff --git a/src/types/models/developer.rs b/src/types/models/developer.rs index 8029e32..8c96040 100644 --- a/src/types/models/developer.rs +++ b/src/types/models/developer.rs @@ -124,6 +124,37 @@ impl Developer { count, }) } + + pub async fn get_one( + id: i32, + pool: &mut PgConnection, + ) -> Result, ApiError> { + let result = match sqlx::query_as!( + FetchedDeveloper, + "SELECT + id, + username, + display_name, + verified, + admin + FROM developers + WHERE id = $1 + ", + id + ) + .fetch_optional(&mut *pool) + .await + { + Ok(d) => d, + Err(e) => { + log::error!("{}", e); + return Err(ApiError::DbError); + } + }; + + Ok(result) + } + pub async fn create( github_id: i64, username: String,