From f8a25bae5ee57ac7292bdc5088e8916aa23a27be Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E8=BF=90=E5=AE=B6?= Date: Thu, 3 Oct 2024 09:03:30 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E5=AE=8F=E8=B7=AF=E7=94=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- library/src/core/config.rs | 1 + library/src/typed_router.rs | 2 - macro/src/lib.rs | 33 +++++++++----- macro/src/route.rs | 3 +- server/src/controller/account_controller.rs | 10 ++-- server/src/controller/feedback_controller.rs | 9 ++-- server/src/controller/mod.rs | 48 ++++---------------- server/src/tasks/mod.rs | 2 +- 8 files changed, 40 insertions(+), 68 deletions(-) diff --git a/library/src/core/config.rs b/library/src/core/config.rs index 53528b3..44d2113 100644 --- a/library/src/core/config.rs +++ b/library/src/core/config.rs @@ -17,6 +17,7 @@ pub struct Server { pub name: String, pub prefix_url: String, pub port: u32, + pub debug: bool, } #[derive(Clone, Debug, Deserialize)] diff --git a/library/src/typed_router.rs b/library/src/typed_router.rs index b36f8c1..fd35d8f 100644 --- a/library/src/typed_router.rs +++ b/library/src/typed_router.rs @@ -27,9 +27,7 @@ where type State = S; fn typed_route(self, handler: TypedHandler) -> Self { - tracing::info!("start add router"); let (path, method_router) = handler(); - tracing::info!("adding typed route: {} - {:?}", path, method_router); self.route(path, method_router) } } \ No newline at end of file diff --git a/macro/src/lib.rs b/macro/src/lib.rs index b5dc16a..41eb281 100644 --- a/macro/src/lib.rs +++ b/macro/src/lib.rs @@ -5,7 +5,7 @@ extern crate syn; extern crate proc_macro; use proc_macro::TokenStream; // 用于生成代码 -use syn::{parse_macro_input, parse_quote, DeriveInput}; // 用于解析宏输入 +use syn::{parse_macro_input, DeriveInput}; // 用于解析宏输入 mod responsable; mod route; @@ -21,18 +21,27 @@ pub fn responsable(input: TokenStream) -> TokenStream { responsable::gen_responsable(input) } -// #[proc_macro_attribute] -// pub fn route(attr: TokenStream, item: TokenStream) -> TokenStream { -// route::gen_route(attr, item) -// // item -// } - -#[proc_macro_attribute] -pub fn route(attr: TokenStream, item: TokenStream) -> TokenStream { - route::gen_route(attr, item) -} - #[proc_macro_attribute] pub fn get(attr: TokenStream, item: TokenStream) -> TokenStream { route::gen_get_route(attr, item) +} + +#[proc_macro_attribute] +pub fn post(attr: TokenStream, item: TokenStream) -> TokenStream { + route::gen_post_route(attr, item) +} + +#[proc_macro_attribute] +pub fn put(attr: TokenStream, item: TokenStream) -> TokenStream { + route::gen_put_route(attr, item) +} + +#[proc_macro_attribute] +pub fn delete(attr: TokenStream, item: TokenStream) -> TokenStream { + route::gen_delete_route(attr, item) +} + +#[proc_macro_attribute] +pub fn option(attr: TokenStream, item: TokenStream) -> TokenStream { + route::gen_option_route(attr, item) } \ No newline at end of file diff --git a/macro/src/route.rs b/macro/src/route.rs index 0bfa007..5f0651e 100644 --- a/macro/src/route.rs +++ b/macro/src/route.rs @@ -34,7 +34,7 @@ impl Args { )) } } - + pub fn get_route(&self) -> syn::Result { match self.vars.get(0) { Some(var) => Ok(var.clone()), @@ -46,6 +46,7 @@ impl Args { } } +#[allow(dead_code)] pub fn gen_route(attr: TokenStream, item: TokenStream) -> TokenStream { let args = parse_macro_input!(attr as Args); let func = parse_macro_input!(item as ItemFn); diff --git a/server/src/controller/account_controller.rs b/server/src/controller/account_controller.rs index 29e493a..3a9953e 100644 --- a/server/src/controller/account_controller.rs +++ b/server/src/controller/account_controller.rs @@ -1,11 +1,11 @@ use domain::{dto::account::{AuthenticateGooleAccountReq, AuthenticateWithPassword, RefreshToken}, vo::account::{LoginAccount, RefreshTokenResult}}; use library::{context::Context, model::response::ResResult, extractor::body_extractor::JsonBody}; +use macros::post; use crate::service; -/// post: /account/google -/// /// google账号登录 +#[post("/account/google")] pub async fn authenticate_google( context: Context, JsonBody(req): JsonBody @@ -13,9 +13,8 @@ pub async fn authenticate_google( service::account_service::authenticate_google(context, req).await } -/// post: /account/sys -/// /// 账号密码登录 +#[post("/account/sys")] pub async fn authenticate_with_password( context: Context, JsonBody(req): JsonBody @@ -23,9 +22,8 @@ pub async fn authenticate_with_password( service::sys_account_service::authenticate_with_password(context, req).await } -/// post: /account/refresh-token -/// /// 刷新token +#[post("/account/refresh-token")] pub async fn refresh_token( context: Context, JsonBody(refresh_token): JsonBody diff --git a/server/src/controller/feedback_controller.rs b/server/src/controller/feedback_controller.rs index e75e2e7..8652052 100644 --- a/server/src/controller/feedback_controller.rs +++ b/server/src/controller/feedback_controller.rs @@ -8,13 +8,12 @@ use library::extractor::path_extractor::PathVar; use library::model::response::ResResult; use library::extractor::body_extractor::JsonBody; use library::extractor::query_extractor::QueryParams; -use macros::get; +use macros::{get, post}; use crate::service; -/// post: /feedback -/// /// 添加反馈信息 +#[post("/feedback")] pub async fn add_feedback( context: Context, JsonBody(req): JsonBody, @@ -22,9 +21,8 @@ pub async fn add_feedback( service::feedback_service::add_feedback(context, req).await } -/// get: /feedback -/// /// 获取反馈信息列表 +#[get("/feedback")] pub async fn get_feedback_list_by_page( context: Context, QueryParams(page_params): QueryParams, @@ -37,7 +35,6 @@ pub async fn get_feedback_list_by_page( .await } -// #[route(get, "/feedback/:page/:pageSize")] #[get("/feedback/:page/:pageSize")] pub async fn get_feedback_list( context: Context, diff --git a/server/src/controller/mod.rs b/server/src/controller/mod.rs index d4a5558..e5b8064 100644 --- a/server/src/controller/mod.rs +++ b/server/src/controller/mod.rs @@ -1,48 +1,16 @@ -use axum::{routing::{get, post, MethodRouter}, Router}; +use axum::Router; use library::typed_router::TypedRouter; pub mod account_controller; pub mod feedback_controller; pub fn init() -> Router { - // let a = feedback_controller::get_feedback_list; - - // axum::routing::method_routing::MethodRouter::new() - - - let router = Router::new() - .route( - "/account/google", - post(account_controller::authenticate_google), - ) - .route( - "/account/sys", - post(account_controller::authenticate_with_password), - ) - .route( - "/account/refresh-token", - post(account_controller::refresh_token) - ) - .route( - "/feedback", - post(feedback_controller::add_feedback) - .get(feedback_controller::get_feedback_list_by_page) - ) - .typed_route(route) - // .typed_route(feedback_controller::get_feedback_list) - // .merge(feedback_controller::get_feedback_list::route()) - // .typed_route(route) - // .route( - // "/feedback/:page/:pageSize", - // get(feedback_controller::get_feedback_list) - // ) - ; - return router; + Router::new() + .typed_route(account_controller::authenticate_google) + .typed_route(account_controller::authenticate_with_password) + .typed_route(account_controller::refresh_token) + .typed_route(feedback_controller::add_feedback) + .typed_route(feedback_controller::get_feedback_list_by_page) + .typed_route(feedback_controller::get_feedback_list) } -fn route() -> (&'static str, MethodRouter) { - pub async fn route() -> String { - return "hello world".to_string(); - } - ("/feedback1", axum::routing::get(route)) -} \ No newline at end of file diff --git a/server/src/tasks/mod.rs b/server/src/tasks/mod.rs index 9eb4df9..d24a587 100644 --- a/server/src/tasks/mod.rs +++ b/server/src/tasks/mod.rs @@ -7,6 +7,6 @@ pub fn get_tasks() -> Vec { vec!(Task { name: "google_iap".to_string(), job: Box::new(google_tasks::xxx_task), - trigger: "0 0/1 * * * ?".to_string(), + trigger: "0 0 0/1 * * ?".to_string(), }) } \ No newline at end of file