bios_basic/spi/api/
spi_ci_bs_api.rs1use 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#[poem_openapi::OpenApi(prefix_path = "/ci/manage/bs", tag = "crate::ApiTag::Interface")]
23impl SpiCiBsApi {
24 #[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 #[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 #[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 #[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 #[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 #[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 #[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}