Skip to main content

bios_basic/spi/api/
spi_ci_bs_api.rs

1//! SPI common operation interface
2//!
3//! SPI公共操作接口
4use tardis::web::context_extractor::TardisContextExtractor;
5use tardis::web::poem::Request;
6use tardis::web::poem_openapi;
7use tardis::web::poem_openapi::param::{Path, Query};
8use tardis::web::poem_openapi::payload::Json;
9use tardis::web::web_resp::{TardisApiResult, TardisPage, TardisResp, Void};
10
11use crate::rbum::dto::rbum_filer_dto::RbumBasicFilterReq;
12use crate::rbum::serv::rbum_item_serv::RbumItemCrudOperation;
13use crate::spi::dto::spi_bs_dto::{SpiBsAddReq, SpiBsDetailResp, SpiBsFilterReq, SpiBsModifyReq, SpiBsSummaryResp};
14use crate::spi::serv::spi_bs_serv::SpiBsServ;
15use crate::TardisFunInstExtractor;
16#[derive(Default, Clone, Copy, Debug)]
17pub struct SpiCiBsApi;
18
19/// Interface Console Backend Service API
20///
21/// 接口控制台后端服务API
22#[poem_openapi::OpenApi(prefix_path = "/ci/manage/bs", tag = "crate::ApiTag::Interface")]
23impl SpiCiBsApi {
24    /// Add backend service
25    ///
26    /// 添加后端服务实例
27    ///
28    /// # Parameters
29    /// - add_req: add request
30    ///
31    /// # Returns
32    /// Backend service id
33    #[oai(path = "/", method = "post")]
34    async fn add(&self, mut add_req: Json<SpiBsAddReq>, ctx: TardisContextExtractor, request: &Request) -> TardisApiResult<String> {
35        let mut funs = request.tardis_fun_inst();
36        funs.begin().await?;
37        let result = SpiBsServ::add_item(&mut add_req.0, &funs, &ctx.0).await?;
38        funs.commit().await?;
39        TardisResp::ok(result)
40    }
41
42    /// Modify backend service
43    ///
44    /// 修改后端服务
45    ///
46    /// # Parameters
47    /// - id: Backend service id
48    /// - modify_req: modify request
49    #[oai(path = "/:id", method = "patch")]
50    async fn modify(&self, id: Path<String>, mut modify_req: Json<SpiBsModifyReq>, ctx: TardisContextExtractor, request: &Request) -> TardisApiResult<Void> {
51        let mut funs = request.tardis_fun_inst();
52        funs.begin().await?;
53        SpiBsServ::modify_item(&id.0, &mut modify_req.0, &funs, &ctx.0).await?;
54        funs.commit().await?;
55        TardisResp::ok(Void {})
56    }
57
58    /// Get backend service
59    ///
60    /// 获取后端服务
61    ///
62    /// # Parameters
63    /// - id: Backend service id
64    ///
65    /// # Returns
66    /// Backend service detail
67    #[oai(path = "/:id", method = "get")]
68    async fn get(&self, id: Path<String>, ctx: TardisContextExtractor, request: &Request) -> TardisApiResult<SpiBsDetailResp> {
69        let funs = request.tardis_fun_inst();
70        let result = SpiBsServ::get_bs(&id.0, &funs, &ctx.0).await?;
71        TardisResp::ok(result)
72    }
73
74    /// Find backend services
75    ///
76    /// 查找后端服务
77    ///
78    /// # Parameters
79    /// - id: Backend service id
80    /// - name: Backend service name
81    /// - page_number: Page number, start from 1
82    /// - page_size: Page size
83    /// - desc_by_create: Desc by create time
84    /// - desc_by_update: Desc by update time
85    ///
86    /// # Returns
87    /// Backend service list
88    #[oai(path = "/", method = "get")]
89    async fn paginate(
90        &self,
91        id: Query<Option<String>>,
92        name: Query<Option<String>>,
93        page_number: Query<u32>,
94        page_size: Query<u32>,
95        desc_by_create: Query<Option<bool>>,
96        desc_by_update: Query<Option<bool>>,
97        ctx: TardisContextExtractor,
98        request: &Request,
99    ) -> TardisApiResult<TardisPage<SpiBsSummaryResp>> {
100        let funs = request.tardis_fun_inst();
101        let result = SpiBsServ::paginate_items(
102            &SpiBsFilterReq {
103                basic: RbumBasicFilterReq {
104                    ids: id.0.map(|id| vec![id]),
105                    name: name.0,
106                    ..Default::default()
107                },
108                domain_code: Some(funs.module_code().to_string()),
109                ..Default::default()
110            },
111            page_number.0,
112            page_size.0,
113            desc_by_create.0,
114            desc_by_update.0,
115            &funs,
116            &ctx.0,
117        )
118        .await?;
119        TardisResp::ok(result)
120    }
121
122    /// Delete backend service
123    ///
124    /// 删除后端服务
125    ///
126    /// # Parameters
127    /// - id: Backend service id
128    #[oai(path = "/:id", method = "delete")]
129    async fn delete(&self, id: Path<String>, ctx: TardisContextExtractor, request: &Request) -> TardisApiResult<Void> {
130        let mut funs = request.tardis_fun_inst();
131        funs.begin().await?;
132        SpiBsServ::delete_item_with_all_rels(&id.0, &funs, &ctx.0).await?;
133        funs.commit().await?;
134        TardisResp::ok(Void {})
135    }
136
137    /// Bind Backend Service to App/Tenant
138    ///
139    /// 绑定后端服务到应用/租户
140    ///
141    /// # Parameters
142    /// - id: Backend service id
143    /// - app_tenant_id: App/Tenant id
144    #[oai(path = "/:id/rel/:app_tenant_id", method = "put")]
145    async fn add_rel(&self, id: Path<String>, app_tenant_id: Path<String>, ctx: TardisContextExtractor, request: &Request) -> TardisApiResult<Void> {
146        let mut funs = request.tardis_fun_inst();
147        funs.begin().await?;
148        SpiBsServ::add_rel(&id.0, &app_tenant_id.0, &funs, &ctx.0).await?;
149        funs.commit().await?;
150        TardisResp::ok(Void {})
151    }
152
153    /// Unbind Backend Service from App/Tenant
154    ///
155    /// 解绑后端服务与应用/租户
156    ///
157    /// # Parameters
158    /// - id: Backend service id
159    /// - app_tenant_id: App/Tenant id
160    #[oai(path = "/:id/rel/:app_tenant_id", method = "delete")]
161    async fn delete_rel(&self, id: Path<String>, app_tenant_id: Path<String>, ctx: TardisContextExtractor, request: &Request) -> TardisApiResult<Void> {
162        let mut funs = request.tardis_fun_inst();
163        funs.begin().await?;
164        SpiBsServ::delete_rel(&id.0, &app_tenant_id.0, &funs, &ctx.0).await?;
165        funs.commit().await?;
166        TardisResp::ok(Void {})
167    }
168}