From 3ed32d77d68143a09d781826d27dcbcbc055a648 Mon Sep 17 00:00:00 2001 From: TommyLike Date: Mon, 29 May 2023 09:16:19 +0800 Subject: [PATCH] Fix list private keys issue --- .../database/model/datakey/repository.rs | 33 ++++++++++++------- 1 file changed, 22 insertions(+), 11 deletions(-) diff --git a/src/infra/database/model/datakey/repository.rs b/src/infra/database/model/datakey/repository.rs index 1bc46a2..6f0f701 100644 --- a/src/infra/database/model/datakey/repository.rs +++ b/src/infra/database/model/datakey/repository.rs @@ -104,9 +104,12 @@ impl Repository for DataKeyRepository { async fn get_all_keys(&self) -> Result> { let dtos: Vec = sqlx::query_as( - "SELECT D.*, U.email AS user_email \ - FROM data_key D INNER JOIN user U ON D.user = U.id \ - WHERE D.key_state != ?") + "SELECT D.*, U.email AS user_email, GROUP_CONCAT(R.user_email) as request_delete_users \ + FROM data_key D \ + INNER JOIN user U ON D.user = U.id \ + LEFT JOIN request_delete R ON D.id = R.key_id \ + WHERE D.key_state != ? \ + GROUP BY D.id") .bind(KeyState::Deleted.to_string()) .fetch_all(&self.db_pool) .await?; @@ -118,9 +121,12 @@ impl Repository for DataKeyRepository { } async fn get_private_keys(&self, user_id: i32) -> Result> { let dtos: Vec = sqlx::query_as( - "SELECT D.*, U.email AS user_email \ - FROM data_key D INNER JOIN user U ON D.user = U.id \ - WHERE D.key_state != ? and D.visibility = ? and D.user = ?") + "SELECT D.*, U.email AS user_email, GROUP_CONCAT(R.user_email) as request_delete_users \ + FROM data_key D \ + INNER JOIN user U ON D.user = U.id \ + LEFT JOIN request_delete R ON D.id = R.key_id \ + WHERE D.key_state != ? and D.visibility = ? and D.user = ? \ + GROUP BY D.id") .bind(KeyState::Deleted.to_string()) .bind(Visibility::Private.to_string()) .bind(user_id) @@ -136,7 +142,8 @@ impl Repository for DataKeyRepository { async fn get_by_id(&self, id: i32) -> Result { let dto: DataKeyDTO = sqlx::query_as( "SELECT D.*, U.email AS user_email, GROUP_CONCAT(R.user_email) as request_delete_users \ - FROM data_key D INNER JOIN user U ON D.user = U.id \ + FROM data_key D \ + INNER JOIN user U ON D.user = U.id \ LEFT JOIN request_delete R ON D.id = R.key_id \ WHERE D.id = ? AND D.key_state != ? \ GROUP BY D.id") @@ -150,7 +157,8 @@ impl Repository for DataKeyRepository { async fn get_by_name(&self, name: &String) -> Result { let dto: DataKeyDTO = sqlx::query_as( "SELECT D.*, U.email AS user_email GROUP_CONCAT(R.user_email) as request_delete_users \ - FROM data_key D INNER JOIN user U ON D.user = U.id \ + FROM data_key D \ + INNER JOIN user U ON D.user = U.id \ LEFT JOIN request_delete R ON D.id = R.key_id \ WHERE D.name = ? AND D.key_state != ? \ GROUP BY D.id") @@ -174,9 +182,12 @@ impl Repository for DataKeyRepository { async fn get_enabled_key_by_type_and_name(&self, key_type: String, name: String) -> Result { let dto: DataKeyDTO = sqlx::query_as( - "SELECT D.*, U.email AS user_email \ - FROM data_key D INNER JOIN user U ON D.user = U.id \ - WHERE D.name = ? AND D.key_type = ? AND D.key_state = ?") + "SELECT D.*, U.email AS user_email, GROUP_CONCAT(R.user_email) as request_delete_users \ + FROM data_key D \ + INNER JOIN user U ON D.user = U.id \ + LEFT JOIN request_delete R ON D.id = R.key_id \ + WHERE D.name = ? AND D.key_type = ? AND D.key_state = ? \ + GROUP BY D.id") .bind(name) .bind(key_type) .bind(KeyState::Enabled.to_string()) -- Gitee