feat: 优化数据库查询并新增项目令牌查询功能及路由
- 优化数据库查询逻辑,修复可变引用问题并新增项目令牌查询功能。 - 添加一个新的路由 `/all` 和对应的处理函数 `get_project_token`,用于查询项目令牌信息,并定义相关的请求参数和响应结构体。
This commit is contained in:
24
src/db.rs
24
src/db.rs
@@ -19,7 +19,7 @@ pub struct Authorize {
|
|||||||
|
|
||||||
#[derive(Debug, WeldsModel)]
|
#[derive(Debug, WeldsModel)]
|
||||||
pub struct Projects {
|
pub struct Projects {
|
||||||
pub project: String,
|
pub project: String,
|
||||||
}
|
}
|
||||||
|
|
||||||
/// 包装类,内部持有 SQLite 连接
|
/// 包装类,内部持有 SQLite 连接
|
||||||
@@ -152,14 +152,14 @@ impl Db {
|
|||||||
token: &str,
|
token: &str,
|
||||||
state: i8,
|
state: i8,
|
||||||
) -> Result<bool, Box<dyn std::error::Error + Send + Sync>> {
|
) -> Result<bool, Box<dyn std::error::Error + Send + Sync>> {
|
||||||
let rows = Authorize::all()
|
let mut rows = Authorize::all()
|
||||||
.where_col(|a| a.token.equal(token))
|
.where_col(|a| a.token.equal(token))
|
||||||
.run(&self.client)
|
.run(&self.client)
|
||||||
.await?;
|
.await?;
|
||||||
if rows.is_empty() {
|
if rows.is_empty() {
|
||||||
return Ok(false);
|
return Ok(false);
|
||||||
}
|
}
|
||||||
for mut row in rows {
|
for row in &mut rows {
|
||||||
row.disable = state;
|
row.disable = state;
|
||||||
row.save(&self.client).await?;
|
row.save(&self.client).await?;
|
||||||
}
|
}
|
||||||
@@ -202,10 +202,18 @@ impl Db {
|
|||||||
|
|
||||||
// 用Projects结构体来收集查询到的结果
|
// 用Projects结构体来收集查询到的结果
|
||||||
let result: Vec<Projects> = rows.collect_into()?;
|
let result: Vec<Projects> = rows.collect_into()?;
|
||||||
let mut projects:Vec<String> = Vec::new();
|
Ok(result.into_iter().map(|r| r.project).collect())
|
||||||
for row in result {
|
}
|
||||||
projects.push(row.project);
|
|
||||||
}
|
pub async fn query_project_token(
|
||||||
Ok(projects)
|
&self,
|
||||||
|
project: &str,
|
||||||
|
) -> Result<Vec<Authorize>, Box<dyn std::error::Error + Send + Sync>> {
|
||||||
|
let rows = Authorize::all()
|
||||||
|
.where_col(|a| a.project.equal(project))
|
||||||
|
.run(&self.client)
|
||||||
|
.await?;
|
||||||
|
|
||||||
|
Ok(rows.into_iter().map(|r| r.into_inner()).collect())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
27
src/main.rs
27
src/main.rs
@@ -36,6 +36,7 @@ async fn main() -> Result<(), Box<dyn std::error::Error>> {
|
|||||||
.route("/reset", get(update_token_status))
|
.route("/reset", get(update_token_status))
|
||||||
.route("/renewal", get(renewal_token))
|
.route("/renewal", get(renewal_token))
|
||||||
.route("/project", get(get_projects))
|
.route("/project", get(get_projects))
|
||||||
|
.route("/all", get(get_project_token))
|
||||||
.with_state(state);
|
.with_state(state);
|
||||||
|
|
||||||
let listener = tokio::net::TcpListener::bind("0.0.0.0:3009").await?;
|
let listener = tokio::net::TcpListener::bind("0.0.0.0:3009").await?;
|
||||||
@@ -230,6 +231,21 @@ async fn get_projects(
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async fn get_project_token(
|
||||||
|
State(state): State<AppState>,
|
||||||
|
Query(args): Query<QueryProject>,
|
||||||
|
) -> (StatusCode, Json<ProjectToken>) {
|
||||||
|
let items = state.db.query_project_token(&args.project).await.unwrap();
|
||||||
|
|
||||||
|
(
|
||||||
|
StatusCode::OK,
|
||||||
|
Json(ProjectToken {
|
||||||
|
code: 200,
|
||||||
|
data: items,
|
||||||
|
}),
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
fn get_current_datetime() -> String {
|
fn get_current_datetime() -> String {
|
||||||
Local::now().format("%Y-%m-%d %H:%M:%S").to_string()
|
Local::now().format("%Y-%m-%d %H:%M:%S").to_string()
|
||||||
}
|
}
|
||||||
@@ -284,6 +300,11 @@ struct RenewalToken {
|
|||||||
days: i64,
|
days: i64,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[derive(Deserialize)]
|
||||||
|
struct QueryProject {
|
||||||
|
project: String,
|
||||||
|
}
|
||||||
|
|
||||||
#[derive(Serialize)]
|
#[derive(Serialize)]
|
||||||
struct VerifyResult {
|
struct VerifyResult {
|
||||||
code: i16,
|
code: i16,
|
||||||
@@ -334,3 +355,9 @@ struct ProjectResponse {
|
|||||||
code: i32,
|
code: i32,
|
||||||
projects: Vec<String>,
|
projects: Vec<String>,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[derive(Serialize)]
|
||||||
|
struct ProjectToken {
|
||||||
|
code: i32,
|
||||||
|
data: Vec<db::Authorize>,
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user