From c241e16883ba1eccfea8b2cdb91408f6ef2f6c79 Mon Sep 17 00:00:00 2001 From: matresnan <1358168412@qq.com> Date: Mon, 18 Aug 2025 11:03:17 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=B7=BB=E5=8A=A0=E6=8E=88=E6=9D=83?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E7=9B=AE=E5=BD=95=E5=BF=BD=E7=95=A5=E5=92=8C?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E5=BA=93=E6=9F=A5=E8=AF=A2=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 添加 authorize_data/ 目录到 .gitignore 文件中以忽略该目录的版本控制 - 更新授权数据库文件内容 - 添加通过项目和设备ID查询数据库存在的功能,并将InsertArgs结构体设为公共可见。 - 添加创建令牌时检查项目和设备ID是否已存在的逻辑,并返回相应的状态信息。 --- .gitignore | 1 + src/authorize_data/database.db | Bin 20480 -> 20480 bytes src/db.rs | 20 ++++++++++++++- src/main.rs | 44 ++++++++++++++++++++++++--------- 4 files changed, 52 insertions(+), 13 deletions(-) diff --git a/.gitignore b/.gitignore index ea8c4bf..a3bb07f 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ /target +authorize_data/ diff --git a/src/authorize_data/database.db b/src/authorize_data/database.db index a288a2de313464f7ade5845f95dfd4083bc03762..da9065eff9bd2dec3566ab2f8c63ddf11aa7398b 100644 GIT binary patch delta 235 zcmZozz}T>Wae_1>^F$eEQDz3cE+?K~a8IYH~?#dUjN#n}2|FzJH;Yfqzj} zX>oc=SyEO~Ql624k*ThMg|4BQf}y#Uk)f5L2~5by7%l{{Wae_1>+e8^>Q8os>ssdiVR0bB_T?~Bt`Eq%8@o8-q6ma9+Jd2l&k<*Tm zU0hzCvBi7xNoxsG3R@@jsy$yfQ+1T}dX7#LXizA*6b z<*(v5=lcRQKa(+8k#5=8d(__0Ffgz`9{>k%wQtl444s&WEdfV>J?BJG4g+8;QzQ; b(BL^gKQAM*JY!;MNk)EAW>qT7A_D~g8fR=s diff --git a/src/db.rs b/src/db.rs index d1deaf9..3739dd4 100644 --- a/src/db.rs +++ b/src/db.rs @@ -14,7 +14,7 @@ pub struct Authorize { pub insert_time: String, } -pub(crate) struct InsertArgs { +pub struct InsertArgs { pub project: String, pub token: String, pub device_id: String, @@ -64,6 +64,24 @@ impl Db { Ok(Db { client }) } + /// 通过project和device_id查询是否存在数据库 + pub async fn exists_project( + &self, + project: &str, + device_id: &str, + ) -> Result, Box> { + let row = Authorize::all() + .where_col(|a| a.project.equal(project)) + .where_col(|a| a.device_id.equal(device_id)) + .limit(1) + .run(&self.client) + .await? + .into_inners() + .into_iter() + .next(); + Ok(row) + } + /// 判断 token 是否存在 pub async fn verify_token( &self, diff --git a/src/main.rs b/src/main.rs index 7c0df36..6d4a176 100644 --- a/src/main.rs +++ b/src/main.rs @@ -67,7 +67,27 @@ async fn main() -> Result<(), Box> { async fn create_token( State(state): State, Query(args): Query, -) -> (StatusCode, Json) { +) -> (StatusCode, Json) { + let exists = state + .db + .exists_project(&args.project, &args.device_id) + .await + .unwrap(); + match exists { + Some(info) => { + return ( + StatusCode::OK, + Json(CreateTokenInfo { + code: 404, + project: info.project, + device_id: info.device_id, + token: info.token, + msg: "token已存在,请勿重复创建".to_owned(), + }), + ) + } + None => (), + } let str_time = get_current_datetime(); let exp_time = add_day(&str_time, 7).unwrap(); @@ -85,11 +105,11 @@ async fn create_token( ( StatusCode::OK, - Json(CreateResult { + Json(CreateTokenInfo { code: 200, project: args.project, device_id: args.device_id, - token: token, + token, msg: "token创建成功".to_owned(), }), ) @@ -150,15 +170,6 @@ struct CreateToken { device_id: String, } -#[derive(Serialize)] -struct CreateResult { - code: i16, - project: String, - device_id: String, - token: String, - msg: String, -} - #[derive(Clone)] struct AppState { db: Arc, @@ -197,3 +208,12 @@ enum TokenResponse { Success(TokenInfo), Error(QueryError), } + +#[derive(Serialize)] +struct CreateTokenInfo { + code: i16, + project: String, + device_id: String, + token: String, + msg: String, +}