From 361e64b746e4d04bb425b96c2f95125e7f578996 Mon Sep 17 00:00:00 2001 From: ZzIsGod1019 <1498852723@qq.com> Date: Tue, 26 Mar 2024 14:09:53 +0800 Subject: [PATCH] fix: remove cc unsafe_fill_ctx (#663) --- .../flow/src/api/cc/flow_cc_inst_api.rs | 45 +++--- .../flow/src/api/cc/flow_cc_model_api.rs | 52 +++---- .../flow/src/api/cc/flow_cc_state_api.rs | 28 ++-- middleware/flow/src/api/ci.rs | 1 + .../flow/src/api/ci/flow_ci_inst_api.rs | 132 +++++++++++++++++- .../flow/src/api/ci/flow_ci_model_api.rs | 47 ++++++- .../flow/src/api/ci/flow_ci_state_api.rs | 101 ++++++++++++++ 7 files changed, 319 insertions(+), 87 deletions(-) create mode 100644 middleware/flow/src/api/ci/flow_ci_state_api.rs diff --git a/middleware/flow/src/api/cc/flow_cc_inst_api.rs b/middleware/flow/src/api/cc/flow_cc_inst_api.rs index 3e08d81ed..f1e66e677 100644 --- a/middleware/flow/src/api/cc/flow_cc_inst_api.rs +++ b/middleware/flow/src/api/cc/flow_cc_inst_api.rs @@ -1,6 +1,5 @@ use std::collections::HashMap; -use bios_basic::helper::bios_ctx_helper::unsafe_fill_ctx; use tardis::web::context_extractor::TardisContextExtractor; use tardis::web::poem::Request; use tardis::web::poem_openapi; @@ -23,9 +22,8 @@ pub struct FlowCcInstApi; impl FlowCcInstApi { /// Start Instance / 启动实例 #[oai(path = "/", method = "post")] - async fn start(&self, add_req: Json, mut ctx: TardisContextExtractor, request: &Request) -> TardisApiResult { + async fn start(&self, add_req: Json, ctx: TardisContextExtractor, _request: &Request) -> TardisApiResult { let mut funs = flow_constants::get_tardis_inst(); - unsafe_fill_ctx(request, &funs, &mut ctx.0).await?; funs.begin().await?; let result = FlowInstServ::start(&add_req.0, None, &funs, &ctx.0).await?; funs.commit().await?; @@ -34,9 +32,8 @@ impl FlowCcInstApi { /// Abort Instance / 中止实例 #[oai(path = "/:flow_inst_id", method = "put")] - async fn abort(&self, flow_inst_id: Path, abort_req: Json, mut ctx: TardisContextExtractor, request: &Request) -> TardisApiResult { + async fn abort(&self, flow_inst_id: Path, abort_req: Json, ctx: TardisContextExtractor, _request: &Request) -> TardisApiResult { let mut funs = flow_constants::get_tardis_inst(); - unsafe_fill_ctx(request, &funs, &mut ctx.0).await?; funs.begin().await?; FlowInstServ::abort(&flow_inst_id.0, &abort_req.0, &funs, &ctx.0).await?; funs.commit().await?; @@ -45,9 +42,8 @@ impl FlowCcInstApi { /// Get Instance By Instance Id / 获取实例信息 #[oai(path = "/:flow_inst_id", method = "get")] - async fn get(&self, flow_inst_id: Path, mut ctx: TardisContextExtractor, request: &Request) -> TardisApiResult { + async fn get(&self, flow_inst_id: Path, ctx: TardisContextExtractor, _request: &Request) -> TardisApiResult { let funs = flow_constants::get_tardis_inst(); - unsafe_fill_ctx(request, &funs, &mut ctx.0).await?; let result = FlowInstServ::get(&flow_inst_id.0, &funs, &ctx.0).await?; TardisResp::ok(result) } @@ -62,11 +58,10 @@ impl FlowCcInstApi { with_sub: Query>, page_number: Query, page_size: Query, - mut ctx: TardisContextExtractor, - request: &Request, + ctx: TardisContextExtractor, + _request: &Request, ) -> TardisApiResult> { let funs = flow_constants::get_tardis_inst(); - unsafe_fill_ctx(request, &funs, &mut ctx.0).await?; let result = FlowInstServ::paginate(flow_model_id.0, tag.0, finish.0, with_sub.0, page_number.0, page_size.0, &funs, &ctx.0).await?; TardisResp::ok(result) } @@ -77,11 +72,10 @@ impl FlowCcInstApi { &self, flow_inst_id: Path, next_req: Json, - mut ctx: TardisContextExtractor, - request: &Request, + ctx: TardisContextExtractor, + _request: &Request, ) -> TardisApiResult> { let funs = flow_constants::get_tardis_inst(); - unsafe_fill_ctx(request, &funs, &mut ctx.0).await?; let result = FlowInstServ::find_next_transitions(&flow_inst_id.0, &next_req.0, &funs, &ctx.0).await?; TardisResp::ok(result) } @@ -91,11 +85,10 @@ impl FlowCcInstApi { async fn find_state_and_next_transitions( &self, find_req: Json>, - mut ctx: TardisContextExtractor, - request: &Request, + ctx: TardisContextExtractor, + _request: &Request, ) -> TardisApiResult> { let funs = flow_constants::get_tardis_inst(); - unsafe_fill_ctx(request, &funs, &mut ctx.0).await?; let result = FlowInstServ::find_state_and_next_transitions(&find_req.0, &funs, &ctx.0).await?; TardisResp::ok(result) } @@ -106,11 +99,10 @@ impl FlowCcInstApi { &self, flow_inst_id: Path, transfer_req: Json, - mut ctx: TardisContextExtractor, - request: &Request, + ctx: TardisContextExtractor, + _request: &Request, ) -> TardisApiResult { let mut funs = flow_constants::get_tardis_inst(); - unsafe_fill_ctx(request, &funs, &mut ctx.0).await?; let mut transfer = transfer_req.0; FlowInstServ::check_transfer_vars(&flow_inst_id.0, &mut transfer, &funs, &ctx.0).await?; funs.begin().await?; @@ -125,11 +117,10 @@ impl FlowCcInstApi { &self, flow_inst_ids: Path, transfer_req: Json, - mut ctx: TardisContextExtractor, - request: &Request, + ctx: TardisContextExtractor, + _request: &Request, ) -> TardisApiResult> { let mut funs = flow_constants::get_tardis_inst(); - unsafe_fill_ctx(request, &funs, &mut ctx.0).await?; let mut result = vec![]; let flow_inst_ids: Vec<_> = flow_inst_ids.split(',').collect(); let raw_transfer_req = transfer_req.0; @@ -153,11 +144,10 @@ impl FlowCcInstApi { &self, flow_inst_id: Path, modify_req: Json, - mut ctx: TardisContextExtractor, - request: &Request, + ctx: TardisContextExtractor, + _request: &Request, ) -> TardisApiResult { let mut funs = flow_constants::get_tardis_inst(); - unsafe_fill_ctx(request, &funs, &mut ctx.0).await?; funs.begin().await?; FlowInstServ::modify_assigned(&flow_inst_id.0, &modify_req.0.current_assigned, &funs, &ctx.0).await?; funs.commit().await?; @@ -170,11 +160,10 @@ impl FlowCcInstApi { &self, flow_inst_id: Path, modify_req: Json, - mut ctx: TardisContextExtractor, - request: &Request, + ctx: TardisContextExtractor, + _request: &Request, ) -> TardisApiResult { let mut funs = flow_constants::get_tardis_inst(); - unsafe_fill_ctx(request, &funs, &mut ctx.0).await?; funs.begin().await?; FlowInstServ::modify_current_vars(&flow_inst_id.0, &modify_req.0.vars, &funs, &ctx.0).await?; funs.commit().await?; diff --git a/middleware/flow/src/api/cc/flow_cc_model_api.rs b/middleware/flow/src/api/cc/flow_cc_model_api.rs index 6a3f8f60a..626c14030 100644 --- a/middleware/flow/src/api/cc/flow_cc_model_api.rs +++ b/middleware/flow/src/api/cc/flow_cc_model_api.rs @@ -1,6 +1,5 @@ use std::collections::HashMap; -use bios_basic::helper::bios_ctx_helper::unsafe_fill_ctx; use bios_basic::rbum::dto::rbum_filer_dto::RbumBasicFilterReq; use bios_basic::rbum::serv::rbum_item_serv::RbumItemCrudOperation; use tardis::web::context_extractor::TardisContextExtractor; @@ -27,9 +26,8 @@ pub struct FlowCcModelApi; impl FlowCcModelApi { /// Add Model / 添加模型 #[oai(path = "/", method = "post")] - async fn add(&self, mut add_req: Json, mut ctx: TardisContextExtractor, request: &Request) -> TardisApiResult { + async fn add(&self, mut add_req: Json, ctx: TardisContextExtractor, _request: &Request) -> TardisApiResult { let mut funs = flow_constants::get_tardis_inst(); - unsafe_fill_ctx(request, &funs, &mut ctx.0).await?; funs.begin().await?; let result = FlowModelServ::add_item(&mut add_req.0, &funs, &ctx.0).await?; funs.commit().await?; @@ -38,9 +36,8 @@ impl FlowCcModelApi { /// Modify Model By Model Id / 修改模型 #[oai(path = "/:flow_model_id", method = "patch")] - async fn modify(&self, flow_model_id: Path, mut modify_req: Json, mut ctx: TardisContextExtractor, request: &Request) -> TardisApiResult { + async fn modify(&self, flow_model_id: Path, mut modify_req: Json, ctx: TardisContextExtractor, _request: &Request) -> TardisApiResult { let mut funs = flow_constants::get_tardis_inst(); - unsafe_fill_ctx(request, &funs, &mut ctx.0).await?; funs.begin().await?; FlowModelServ::modify_model(&flow_model_id.0, &mut modify_req.0, &funs, &ctx.0).await?; funs.commit().await?; @@ -49,9 +46,8 @@ impl FlowCcModelApi { /// Get Model By Model Id / 获取模型 #[oai(path = "/:flow_model_id", method = "get")] - async fn get(&self, flow_model_id: Path, mut ctx: TardisContextExtractor, request: &Request) -> TardisApiResult { + async fn get(&self, flow_model_id: Path, ctx: TardisContextExtractor, _request: &Request) -> TardisApiResult { let funs = flow_constants::get_tardis_inst(); - unsafe_fill_ctx(request, &funs, &mut ctx.0).await?; let result = FlowModelServ::get_item_detail_aggs(&flow_model_id.0, &funs, &ctx.0).await?; TardisResp::ok(result) } @@ -70,11 +66,10 @@ impl FlowCcModelApi { page_size: Query, desc_by_create: Query>, desc_by_update: Query>, - mut ctx: TardisContextExtractor, - request: &Request, + ctx: TardisContextExtractor, + _request: &Request, ) -> TardisApiResult> { let funs = flow_constants::get_tardis_inst(); - unsafe_fill_ctx(request, &funs, &mut ctx.0).await?; let result = FlowModelServ::paginate_items( &FlowModelFilterReq { basic: RbumBasicFilterReq { @@ -104,11 +99,10 @@ impl FlowCcModelApi { &self, tag_ids: Query, temp_id: Query>, - mut ctx: TardisContextExtractor, - request: &Request, + ctx: TardisContextExtractor, + _request: &Request, ) -> TardisApiResult> { let mut funs = flow_constants::get_tardis_inst(); - unsafe_fill_ctx(request, &funs, &mut ctx.0).await?; funs.begin().await?; let tag_ids: Vec<_> = tag_ids.split(',').collect(); let result = FlowModelServ::get_models(tag_ids, temp_id.0, &funs, &ctx.0).await?; @@ -122,9 +116,8 @@ impl FlowCcModelApi { /// /// 仅在模型没被使用时有效 #[oai(path = "/:flow_model_id", method = "delete")] - async fn delete(&self, flow_model_id: Path, mut ctx: TardisContextExtractor, request: &Request) -> TardisApiResult { + async fn delete(&self, flow_model_id: Path, ctx: TardisContextExtractor, _request: &Request) -> TardisApiResult { let mut funs = flow_constants::get_tardis_inst(); - unsafe_fill_ctx(request, &funs, &mut ctx.0).await?; funs.begin().await?; FlowModelServ::delete_item(&flow_model_id.0, &funs, &ctx.0).await?; funs.commit().await?; @@ -133,9 +126,8 @@ impl FlowCcModelApi { /// Bind State By Model Id / 绑定状态 #[oai(path = "/:flow_model_id/bind_state", method = "post")] - async fn bind_state(&self, flow_model_id: Path, req: Json, mut ctx: TardisContextExtractor, request: &Request) -> TardisApiResult { + async fn bind_state(&self, flow_model_id: Path, req: Json, ctx: TardisContextExtractor, _request: &Request) -> TardisApiResult { let mut funs = flow_constants::get_tardis_inst(); - unsafe_fill_ctx(request, &funs, &mut ctx.0).await?; funs.begin().await?; FlowModelServ::bind_state(&FlowRelKind::FlowModelState, &flow_model_id.0, &req.0, &funs, &ctx.0).await?; funs.commit().await?; @@ -144,9 +136,8 @@ impl FlowCcModelApi { /// Unbind State By Model Id / 解绑状态 #[oai(path = "/:flow_model_id/unbind_state", method = "post")] - async fn unbind_state(&self, flow_model_id: Path, req: Json, mut ctx: TardisContextExtractor, request: &Request) -> TardisApiResult { + async fn unbind_state(&self, flow_model_id: Path, req: Json, ctx: TardisContextExtractor, _request: &Request) -> TardisApiResult { let mut funs = flow_constants::get_tardis_inst(); - unsafe_fill_ctx(request, &funs, &mut ctx.0).await?; funs.begin().await?; FlowModelServ::unbind_state(&FlowRelKind::FlowModelState, &flow_model_id.0, &req, &funs, &ctx.0).await?; funs.commit().await?; @@ -155,9 +146,8 @@ impl FlowCcModelApi { /// Resort states / 状态重新排序 #[oai(path = "/:flow_model_id/resort_state", method = "post")] - async fn resort_state(&self, flow_model_id: Path, req: Json, mut ctx: TardisContextExtractor, request: &Request) -> TardisApiResult { + async fn resort_state(&self, flow_model_id: Path, req: Json, ctx: TardisContextExtractor, _request: &Request) -> TardisApiResult { let mut funs = flow_constants::get_tardis_inst(); - unsafe_fill_ctx(request, &funs, &mut ctx.0).await?; funs.begin().await?; FlowModelServ::resort_state(&FlowRelKind::FlowModelState, &flow_model_id.0, &req.0, &funs, &ctx.0).await?; funs.commit().await?; @@ -170,11 +160,10 @@ impl FlowCcModelApi { &self, flow_model_id: Path, req: Json, - mut ctx: TardisContextExtractor, - request: &Request, + ctx: TardisContextExtractor, + _request: &Request, ) -> TardisApiResult { let mut funs = flow_constants::get_tardis_inst(); - unsafe_fill_ctx(request, &funs, &mut ctx.0).await?; funs.begin().await?; FlowModelServ::resort_transition(&flow_model_id.0, &req.0, &funs, &ctx.0).await?; funs.commit().await?; @@ -186,11 +175,10 @@ impl FlowCcModelApi { async fn add_custom_model( &self, req: Json, - mut ctx: TardisContextExtractor, - request: &Request, + ctx: TardisContextExtractor, + _request: &Request, ) -> TardisApiResult> { let mut funs = flow_constants::get_tardis_inst(); - unsafe_fill_ctx(request, &funs, &mut ctx.0).await?; funs.begin().await?; let proj_template_id = req.0.proj_template_id.unwrap_or_default(); let mut result = vec![]; @@ -208,11 +196,10 @@ impl FlowCcModelApi { &self, tag: Query, rel_template_id: Query>, - mut ctx: TardisContextExtractor, - request: &Request, + ctx: TardisContextExtractor, + _request: &Request, ) -> TardisApiResult> { let funs = flow_constants::get_tardis_inst(); - unsafe_fill_ctx(request, &funs, &mut ctx.0).await?; let result = FlowModelServ::find_rel_states(tag.0.split(',').collect(), rel_template_id.0, &funs, &ctx.0).await?; TardisResp::ok(result) @@ -225,11 +212,10 @@ impl FlowCcModelApi { flow_model_id: Path, state_id: Path, req: Json, - mut ctx: TardisContextExtractor, - request: &Request, + ctx: TardisContextExtractor, + _request: &Request, ) -> TardisApiResult { let mut funs = flow_constants::get_tardis_inst(); - unsafe_fill_ctx(request, &funs, &mut ctx.0).await?; funs.begin().await?; FlowModelServ::modify_rel_state(&flow_model_id.0, &state_id.0, &req.0, &funs, &ctx.0).await?; funs.commit().await?; diff --git a/middleware/flow/src/api/cc/flow_cc_state_api.rs b/middleware/flow/src/api/cc/flow_cc_state_api.rs index 6e5d852c8..e1f154c1e 100644 --- a/middleware/flow/src/api/cc/flow_cc_state_api.rs +++ b/middleware/flow/src/api/cc/flow_cc_state_api.rs @@ -1,4 +1,3 @@ -use bios_basic::helper::bios_ctx_helper::unsafe_fill_ctx; use bios_basic::rbum::dto::rbum_filer_dto::RbumBasicFilterReq; use bios_basic::rbum::helper::rbum_scope_helper; use bios_basic::rbum::rbum_enumeration::RbumScopeLevelKind; @@ -24,9 +23,8 @@ pub struct FlowCcStateApi; impl FlowCcStateApi { /// Add State / 添加状态 #[oai(path = "/", method = "post")] - async fn add(&self, mut add_req: Json, mut ctx: TardisContextExtractor, request: &Request) -> TardisApiResult { + async fn add(&self, mut add_req: Json, ctx: TardisContextExtractor, _request: &Request) -> TardisApiResult { let mut funs = flow_constants::get_tardis_inst(); - unsafe_fill_ctx(request, &funs, &mut ctx.0).await?; funs.begin().await?; let result = FlowStateServ::add_item(&mut add_req.0, &funs, &ctx.0).await?; funs.commit().await?; @@ -35,9 +33,8 @@ impl FlowCcStateApi { /// Modify State By State Id / 修改状态 #[oai(path = "/:id", method = "patch")] - async fn modify(&self, id: Path, mut modify_req: Json, mut ctx: TardisContextExtractor, request: &Request) -> TardisApiResult { + async fn modify(&self, id: Path, mut modify_req: Json, ctx: TardisContextExtractor, _request: &Request) -> TardisApiResult { let mut funs = flow_constants::get_tardis_inst(); - unsafe_fill_ctx(request, &funs, &mut ctx.0).await?; funs.begin().await?; FlowStateServ::modify_item(&id.0, &mut modify_req.0, &funs, &ctx.0).await?; funs.commit().await?; @@ -46,9 +43,8 @@ impl FlowCcStateApi { /// Get State By State Id / 获取状态 #[oai(path = "/:id", method = "get")] - async fn get(&self, id: Path, mut ctx: TardisContextExtractor, request: &Request) -> TardisApiResult { + async fn get(&self, id: Path, ctx: TardisContextExtractor, _request: &Request) -> TardisApiResult { let funs = flow_constants::get_tardis_inst(); - unsafe_fill_ctx(request, &funs, &mut ctx.0).await?; let result = FlowStateServ::get_item( &id.0, &FlowStateFilterReq { @@ -83,11 +79,10 @@ impl FlowCcStateApi { page_size: Query, desc_by_create: Query>, desc_by_update: Query>, - mut ctx: TardisContextExtractor, - request: &Request, + ctx: TardisContextExtractor, + _request: &Request, ) -> TardisApiResult> { let funs = flow_constants::get_tardis_inst(); - unsafe_fill_ctx(request, &funs, &mut ctx.0).await?; let (scope_level, with_sub_own_paths) = if let Some(is_global) = is_global.0 { if is_global { @@ -136,9 +131,8 @@ impl FlowCcStateApi { /// /// 仅在状态没被使用时有效 #[oai(path = "/:id", method = "delete")] - async fn delete(&self, id: Path, mut ctx: TardisContextExtractor, request: &Request) -> TardisApiResult { + async fn delete(&self, id: Path, ctx: TardisContextExtractor, _request: &Request) -> TardisApiResult { let mut funs = flow_constants::get_tardis_inst(); - unsafe_fill_ctx(request, &funs, &mut ctx.0).await?; funs.begin().await?; FlowStateServ::delete_item(&id.0, &funs, &ctx.0).await?; funs.commit().await?; @@ -152,11 +146,10 @@ impl FlowCcStateApi { ids: Query>>, tag: Query>, app_ids: Query>, - mut ctx: TardisContextExtractor, - request: &Request, + ctx: TardisContextExtractor, + _request: &Request, ) -> TardisApiResult> { let funs = flow_constants::get_tardis_inst(); - unsafe_fill_ctx(request, &funs, &mut ctx.0).await?; let resp = FlowStateServ::find_names( ids.0, tag.0, @@ -173,11 +166,10 @@ impl FlowCcStateApi { async fn count_group_by_state( &self, req: Json, - mut ctx: TardisContextExtractor, - request: &Request, + ctx: TardisContextExtractor, + _request: &Request, ) -> TardisApiResult> { let mut funs = flow_constants::get_tardis_inst(); - unsafe_fill_ctx(request, &funs, &mut ctx.0).await?; funs.begin().await?; let result = FlowStateServ::count_group_by_state(&req.0, &funs, &ctx.0).await?; funs.commit().await?; diff --git a/middleware/flow/src/api/ci.rs b/middleware/flow/src/api/ci.rs index f029bad7b..1fccedcb3 100644 --- a/middleware/flow/src/api/ci.rs +++ b/middleware/flow/src/api/ci.rs @@ -1,2 +1,3 @@ pub mod flow_ci_inst_api; pub mod flow_ci_model_api; +pub mod flow_ci_state_api; \ No newline at end of file diff --git a/middleware/flow/src/api/ci/flow_ci_inst_api.rs b/middleware/flow/src/api/ci/flow_ci_inst_api.rs index 5d4c78fad..12814fb95 100644 --- a/middleware/flow/src/api/ci/flow_ci_inst_api.rs +++ b/middleware/flow/src/api/ci/flow_ci_inst_api.rs @@ -1,12 +1,16 @@ +use std::collections::HashMap; + use bios_basic::helper::bios_ctx_helper::unsafe_fill_ctx; use tardis::web::context_extractor::TardisContextExtractor; +use tardis::web::poem::web::Path; use tardis::web::poem::Request; use tardis::web::poem_openapi::payload::Json; use tardis::web::poem_openapi::{self, param::Query}; use tardis::web::web_resp::{TardisApiResult, TardisResp, Void}; use tardis::{log, tokio}; -use crate::dto::flow_inst_dto::{FlowInstBatchBindReq, FlowInstBatchBindResp, FlowInstBindReq, FlowInstDetailResp, FlowInstStartReq}; +use crate::dto::flow_external_dto::FlowExternalCallbackOp; +use crate::dto::flow_inst_dto::{FlowInstAbortReq, FlowInstBatchBindReq, FlowInstBatchBindResp, FlowInstBindReq, FlowInstDetailResp, FlowInstFindStateAndTransitionsReq, FlowInstFindStateAndTransitionsResp, FlowInstModifyAssignedReq, FlowInstModifyCurrentVarsReq, FlowInstStartReq, FlowInstTransferReq, FlowInstTransferResp}; use crate::flow_constants; use crate::serv::flow_inst_serv::FlowInstServ; #[derive(Clone)] @@ -15,6 +19,132 @@ pub struct FlowCiInstApi; /// Flow Config process API #[poem_openapi::OpenApi(prefix_path = "/ci/inst")] impl FlowCiInstApi { + /// Start Instance / 启动实例 + #[oai(path = "/", method = "post")] + async fn start(&self, add_req: Json, mut ctx: TardisContextExtractor, request: &Request) -> TardisApiResult { + let mut funs = flow_constants::get_tardis_inst(); + unsafe_fill_ctx(request, &funs, &mut ctx.0).await?; + funs.begin().await?; + let result = FlowInstServ::start(&add_req.0, None, &funs, &ctx.0).await?; + funs.commit().await?; + TardisResp::ok(result) + } + + /// Get Instance By Instance Id / 获取实例信息 + #[oai(path = "/:flow_inst_id", method = "get")] + async fn get(&self, flow_inst_id: Path, mut ctx: TardisContextExtractor, request: &Request) -> TardisApiResult { + let funs = flow_constants::get_tardis_inst(); + unsafe_fill_ctx(request, &funs, &mut ctx.0).await?; + let result = FlowInstServ::get(&flow_inst_id.0, &funs, &ctx.0).await?; + TardisResp::ok(result) + } + + /// Find the state and transfer information of the specified model in batch / 批量获取指定模型的状态及流转信息 + #[oai(path = "/batch/state_transitions", method = "put")] + async fn find_state_and_next_transitions( + &self, + find_req: Json>, + mut ctx: TardisContextExtractor, + request: &Request, + ) -> TardisApiResult> { + let funs = flow_constants::get_tardis_inst(); + unsafe_fill_ctx(request, &funs, &mut ctx.0).await?; + let result = FlowInstServ::find_state_and_next_transitions(&find_req.0, &funs, &ctx.0).await?; + TardisResp::ok(result) + } + + /// Abort Instance / 中止实例 + #[oai(path = "/:flow_inst_id", method = "put")] + async fn abort(&self, flow_inst_id: Path, abort_req: Json, mut ctx: TardisContextExtractor, request: &Request) -> TardisApiResult { + let mut funs = flow_constants::get_tardis_inst(); + unsafe_fill_ctx(request, &funs, &mut ctx.0).await?; + funs.begin().await?; + FlowInstServ::abort(&flow_inst_id.0, &abort_req.0, &funs, &ctx.0).await?; + funs.commit().await?; + TardisResp::ok(Void {}) + } + + /// Transfer State By State Id / 流转 + #[oai(path = "/:flow_inst_id/transition/transfer", method = "put")] + async fn transfer( + &self, + flow_inst_id: Path, + transfer_req: Json, + mut ctx: TardisContextExtractor, + request: &Request, + ) -> TardisApiResult { + let mut funs = flow_constants::get_tardis_inst(); + unsafe_fill_ctx(request, &funs, &mut ctx.0).await?; + let mut transfer = transfer_req.0; + FlowInstServ::check_transfer_vars(&flow_inst_id.0, &mut transfer, &funs, &ctx.0).await?; + funs.begin().await?; + let result = FlowInstServ::transfer(&flow_inst_id.0, &transfer, false, FlowExternalCallbackOp::Default, &funs, &ctx.0).await?; + funs.commit().await?; + TardisResp::ok(result) + } + + /// Batch transfer State By State Id / 批量流转 + #[oai(path = "/batch/:flow_inst_ids/transition/transfer", method = "put")] + async fn batch_transfer( + &self, + flow_inst_ids: Path, + transfer_req: Json, + mut ctx: TardisContextExtractor, + request: &Request, + ) -> TardisApiResult> { + let mut funs = flow_constants::get_tardis_inst(); + unsafe_fill_ctx(request, &funs, &mut ctx.0).await?; + let mut result = vec![]; + let flow_inst_ids: Vec<_> = flow_inst_ids.split(',').collect(); + let raw_transfer_req = transfer_req.0; + let mut flow_inst_id_transfer_map = HashMap::new(); + funs.begin().await?; + for flow_inst_id in &flow_inst_ids { + let mut transfer_req = raw_transfer_req.clone(); + FlowInstServ::check_transfer_vars(flow_inst_id, &mut transfer_req, &funs, &ctx.0).await?; + flow_inst_id_transfer_map.insert(flow_inst_id, transfer_req); + } + for (flow_inst_id, transfer_req) in flow_inst_id_transfer_map { + result.push(FlowInstServ::transfer(flow_inst_id, &transfer_req, false, FlowExternalCallbackOp::Default, &funs, &ctx.0).await?); + } + funs.commit().await?; + TardisResp::ok(result) + } + + /// Modify Assigned / 同步执行人信息 + #[oai(path = "/:flow_inst_id/transition/modify_assigned", method = "post")] + async fn modify_assigned( + &self, + flow_inst_id: Path, + modify_req: Json, + mut ctx: TardisContextExtractor, + request: &Request, + ) -> TardisApiResult { + let mut funs = flow_constants::get_tardis_inst(); + unsafe_fill_ctx(request, &funs, &mut ctx.0).await?; + funs.begin().await?; + FlowInstServ::modify_assigned(&flow_inst_id.0, &modify_req.0.current_assigned, &funs, &ctx.0).await?; + funs.commit().await?; + TardisResp::ok(Void {}) + } + + /// Modify list of variables / 同步当前变量列表 + #[oai(path = "/:flow_inst_id/modify_current_vars", method = "patch")] + async fn modify_current_vars( + &self, + flow_inst_id: Path, + modify_req: Json, + mut ctx: TardisContextExtractor, + request: &Request, + ) -> TardisApiResult { + let mut funs = flow_constants::get_tardis_inst(); + unsafe_fill_ctx(request, &funs, &mut ctx.0).await?; + funs.begin().await?; + FlowInstServ::modify_current_vars(&flow_inst_id.0, &modify_req.0.vars, &funs, &ctx.0).await?; + funs.commit().await?; + TardisResp::ok(Void {}) + } + /// Bind Single Instance / 绑定单个实例 #[oai(path = "/bind", method = "post")] async fn bind(&self, add_req: Json, mut ctx: TardisContextExtractor, request: &Request) -> TardisApiResult { diff --git a/middleware/flow/src/api/ci/flow_ci_model_api.rs b/middleware/flow/src/api/ci/flow_ci_model_api.rs index 593800214..13b1b4e6b 100644 --- a/middleware/flow/src/api/ci/flow_ci_model_api.rs +++ b/middleware/flow/src/api/ci/flow_ci_model_api.rs @@ -2,17 +2,13 @@ use bios_basic::helper::bios_ctx_helper::unsafe_fill_ctx; use bios_basic::rbum::dto::rbum_filer_dto::RbumBasicFilterReq; use bios_basic::rbum::serv::rbum_item_serv::RbumItemCrudOperation; use tardis::web::context_extractor::TardisContextExtractor; -use tardis::web::poem::web::Query; +use tardis::web::poem::web::{Json, Query}; use tardis::web::poem::Request; use tardis::web::poem_openapi; -use tardis::web::poem_openapi::payload::Json; -use tardis::web::web_resp::{TardisApiResult, TardisResp, Void}; -use tardis::{log, tokio}; +use tardis::web::web_resp::{TardisApiResult, TardisResp}; -use crate::dto::flow_inst_dto::{FlowInstBatchBindReq, FlowInstBatchBindResp, FlowInstBindReq, FlowInstDetailResp, FlowInstStartReq}; -use crate::dto::flow_model_dto::{FlowModelAggResp, FlowModelFilterReq}; +use crate::dto::flow_model_dto::{FlowModelAddCustomModelReq, FlowModelAddCustomModelResp, FlowModelAggResp, FlowModelFilterReq, FlowModelFindRelStateResp}; use crate::flow_constants; -use crate::serv::flow_inst_serv::FlowInstServ; use crate::serv::flow_model_serv::FlowModelServ; #[derive(Clone)] pub struct FlowCiModelApi; @@ -52,4 +48,41 @@ impl FlowCiModelApi { TardisResp::ok(result) } + + /// find rel states by model_id / 获取关联状态 + #[oai(path = "/find_rel_status", method = "get")] + async fn find_rel_states( + &self, + tag: Query, + rel_template_id: Query>, + mut ctx: TardisContextExtractor, + request: &Request, + ) -> TardisApiResult> { + let funs = flow_constants::get_tardis_inst(); + unsafe_fill_ctx(request, &funs, &mut ctx.0).await?; + let result = FlowModelServ::find_rel_states(tag.0.split(',').collect(), rel_template_id.0, &funs, &ctx.0).await?; + + TardisResp::ok(result) + } + + /// add custom model by template_id / 添加自定义模型 + #[oai(path = "/add_custom_model", method = "post")] + async fn add_custom_model( + &self, + req: Json, + mut ctx: TardisContextExtractor, + request: &Request, + ) -> TardisApiResult> { + let mut funs = flow_constants::get_tardis_inst(); + unsafe_fill_ctx(request, &funs, &mut ctx.0).await?; + funs.begin().await?; + let proj_template_id = req.0.proj_template_id.unwrap_or_default(); + let mut result = vec![]; + for item in req.0.bind_model_objs { + let model_id = FlowModelServ::add_custom_model(&item.tag, &proj_template_id, None, &funs, &ctx.0).await.ok(); + result.push(FlowModelAddCustomModelResp { tag: item.tag, model_id }); + } + funs.commit().await?; + TardisResp::ok(result) + } } diff --git a/middleware/flow/src/api/ci/flow_ci_state_api.rs b/middleware/flow/src/api/ci/flow_ci_state_api.rs new file mode 100644 index 000000000..b1ebc9853 --- /dev/null +++ b/middleware/flow/src/api/ci/flow_ci_state_api.rs @@ -0,0 +1,101 @@ +use bios_basic::helper::bios_ctx_helper::unsafe_fill_ctx; +use bios_basic::rbum::dto::rbum_filer_dto::RbumBasicFilterReq; +use bios_basic::rbum::helper::rbum_scope_helper; +use bios_basic::rbum::rbum_enumeration::RbumScopeLevelKind; +use bios_basic::rbum::serv::rbum_item_serv::RbumItemCrudOperation; +use tardis::web::context_extractor::TardisContextExtractor; +use tardis::web::poem::web::{Json, Query}; +use tardis::web::poem::Request; +use tardis::web::poem_openapi; +use tardis::web::web_resp::{TardisApiResult, TardisPage, TardisResp}; + +use crate::dto::flow_state_dto::{FlowStateCountGroupByStateReq, FlowStateCountGroupByStateResp, FlowStateFilterReq, FlowStateKind, FlowStateSummaryResp, FlowSysStateKind}; +use crate::flow_constants; +use crate::serv::flow_state_serv::FlowStateServ; +#[derive(Clone)] +pub struct FlowCiStateApi; + +/// Flow Config process API +#[poem_openapi::OpenApi(prefix_path = "/ci/state")] +impl FlowCiStateApi { + /// Find States / 获取状态列表 + #[oai(path = "/", method = "get")] + #[allow(clippy::too_many_arguments)] + async fn paginate( + &self, + ids: Query>, + name: Query>, + tag: Query>, + sys_state: Query>, + state_kind: Query>, + enabled: Query>, + template: Query>, + with_sub: Query>, + is_global: Query>, + page_number: Query, + page_size: Query, + desc_by_create: Query>, + desc_by_update: Query>, + mut ctx: TardisContextExtractor, + request: &Request, + ) -> TardisApiResult> { + let funs = flow_constants::get_tardis_inst(); + unsafe_fill_ctx(request, &funs, &mut ctx.0).await?; + + let (scope_level, with_sub_own_paths) = if let Some(is_global) = is_global.0 { + if is_global { + // get global state + (Some(RbumScopeLevelKind::Root), false) + } else { + // get custom state + (Some(rbum_scope_helper::get_scope_level_by_context(&ctx.0)?), true) + } + } else { + // get all state + (None, with_sub.0.unwrap_or(false)) + }; + + let result = FlowStateServ::paginate_items( + &FlowStateFilterReq { + basic: RbumBasicFilterReq { + ids: ids.0.map(|ids| ids.split(',').map(|id| id.to_string()).collect::>()), + name: name.0, + with_sub_own_paths, + enabled: enabled.0, + scope_level, + ..Default::default() + }, + tag: tag.0, + sys_state: sys_state.0, + state_kind: state_kind.0, + template: template.0, + ..Default::default() + }, + page_number.0, + page_size.0, + desc_by_create.0, + desc_by_update.0, + &funs, + &ctx.0, + ) + .await?; + + TardisResp::ok(result) + } + + /// Count Group By State / 按状态分组统计 + #[oai(path = "/count_group_by_state", method = "post")] + async fn count_group_by_state( + &self, + req: Json, + mut ctx: TardisContextExtractor, + request: &Request, + ) -> TardisApiResult> { + let mut funs = flow_constants::get_tardis_inst(); + unsafe_fill_ctx(request, &funs, &mut ctx.0).await?; + funs.begin().await?; + let result = FlowStateServ::count_group_by_state(&req.0, &funs, &ctx.0).await?; + funs.commit().await?; + TardisResp::ok(result) + } +}