bios_iam/console_app/api/
iam_ca_account_api.rs

1use 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/// App Console Account API
24/// 应用控制台账号API
25#[poem_openapi::OpenApi(prefix_path = "/ca/account", tag = "bios_basic::ApiTag::App")]
26impl IamCaAccountApi {
27    /// Get Account By Account Id
28    /// 根据账号ID获取账号
29    #[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    /// Find Accounts
39    /// 查找账号
40    #[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                    // enabled: Some(true),
72                    ..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    /// Count Accounts
93    /// 统计账号数量
94    #[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}