bios_iam/console_app/api/
iam_ca_account_api.rs1use tardis::web::context_extractor::TardisContextExtractor;
2use tardis::web::poem_openapi;
3use tardis::web::poem_openapi::{param::Path, param::Query};
4use tardis::web::web_resp::{TardisApiResult, TardisPage, TardisResp};
5
6use bios_basic::rbum::dto::rbum_filer_dto::{RbumBasicFilterReq, RbumItemRelFilterReq};
7use bios_basic::rbum::rbum_enumeration::RbumRelFromKind;
8use bios_basic::rbum::serv::rbum_item_serv::RbumItemCrudOperation;
9
10use crate::basic::dto::iam_account_dto::{IamAccountDetailAggResp, IamAccountSummaryAggResp};
11use crate::basic::dto::iam_filer_dto::IamAccountFilterReq;
12use crate::basic::serv::iam_account_serv::IamAccountServ;
13use crate::basic::serv::iam_app_serv::IamAppServ;
14use crate::iam_constants;
15use crate::iam_enumeration::IamRelKind;
16use bios_basic::helper::request_helper::try_set_real_ip_from_req_to_ctx;
17use tardis::web::poem::Request;
18
19#[derive(Clone, Default)]
20
21pub struct IamCaAccountApi;
22
23#[poem_openapi::OpenApi(prefix_path = "/ca/account", tag = "bios_basic::ApiTag::App")]
26impl IamCaAccountApi {
27 #[oai(path = "/:id", method = "get")]
30 async fn get(&self, id: Path<String>, ctx: TardisContextExtractor, request: &Request) -> TardisApiResult<IamAccountDetailAggResp> {
31 try_set_real_ip_from_req_to_ctx(request, &ctx.0).await?;
32 let funs = iam_constants::get_tardis_inst();
33 let result = IamAccountServ::get_account_detail_aggs(&id.0, &IamAccountFilterReq::default(), false, true, &funs, &ctx.0).await?;
34 ctx.0.execute_task().await?;
35 TardisResp::ok(result)
36 }
37
38 #[oai(path = "/", method = "get")]
41 async fn paginate(
42 &self,
43 ids: Query<Option<String>>,
44 name: Query<Option<String>>,
45 role_ids: Query<Option<String>>,
46 page_number: Query<u32>,
47 page_size: Query<u32>,
48 desc_by_create: Query<Option<bool>>,
49 desc_by_update: Query<Option<bool>>,
50 ctx: TardisContextExtractor,
51 request: &Request,
52 ) -> TardisApiResult<TardisPage<IamAccountSummaryAggResp>> {
53 try_set_real_ip_from_req_to_ctx(request, &ctx.0).await?;
54 let funs = iam_constants::get_tardis_inst();
55 let rel2 = role_ids.0.map(|role_ids| {
56 let role_ids = role_ids.split(',').map(|r| r.to_string()).collect::<Vec<_>>();
57 RbumItemRelFilterReq {
58 rel_by_from: true,
59 tag: Some(IamRelKind::IamAccountRole.to_string()),
60 from_rbum_kind: Some(RbumRelFromKind::Item),
61 rel_item_ids: Some(role_ids),
62 own_paths: Some(ctx.0.clone().own_paths),
63 ..Default::default()
64 }
65 });
66 let result = IamAccountServ::paginate_account_summary_aggs(
67 &IamAccountFilterReq {
68 basic: RbumBasicFilterReq {
69 ids: ids.0.map(|ids| ids.split(',').map(|id| id.to_string()).collect::<Vec<String>>()),
70 name: name.0,
71 ..Default::default()
73 },
74 rel: IamAppServ::with_app_rel_filter(&ctx.0, &funs)?,
75 rel2,
76 ..Default::default()
77 },
78 false,
79 true,
80 page_number.0,
81 page_size.0,
82 desc_by_create.0,
83 desc_by_update.0,
84 &funs,
85 &ctx.0,
86 )
87 .await?;
88 ctx.0.execute_task().await?;
89 TardisResp::ok(result)
90 }
91
92 #[oai(path = "/total", method = "get")]
95 async fn count(&self, ctx: TardisContextExtractor, request: &Request) -> TardisApiResult<u64> {
96 try_set_real_ip_from_req_to_ctx(request, &ctx.0).await?;
97 let funs = iam_constants::get_tardis_inst();
98 let result = IamAccountServ::count_items(&IamAccountFilterReq::default(), &funs, &ctx.0).await?;
99 ctx.0.execute_task().await?;
100 TardisResp::ok(result)
101 }
102}