nature/manager_lib/
web_controller.rs1use std::convert::TryInto;
2use std::num::ParseIntError;
3
4use actix_web::{get, HttpResponse, post, web};
5use actix_web::web::Json;
6use crate::common::*;
7
8use crate::db::{D_M, D_TE, INS_RANGE, InstanceDaoImpl, MetaDao, RawMeta, RawRelation, TaskErrDao};
9use crate::domain::*;
10use crate::domain::task::TaskCondition;
11use crate::manager_lib::meta_service::MetaService;
12use crate::manager_lib::relation_service::RelationService;
13use crate::manager_lib::task_err_service::TaskErrService;
14use crate::util::js_convert::{to_js_option_output, to_js_vec_output};
15use crate::util::web_result;
16use crate::vo::{InsCondVO, InstanceVO};
17
18#[post("/instance/byId")]
20async fn get_by_id(para: Json<InsCond>) -> HttpResponse {
21 debug!("/instance/byId : {:?}", ¶.0);
22 let x = InstanceDaoImpl::select_by_id(para.0).await;
23 web_result(x)
24}
25
26#[post("/instance/byIdJS")]
27async fn get_by_id_js(para: Json<InsCondVO>) -> HttpResponse {
28 debug!("/instance/byIdJS : {:?}", ¶.0);
29 let cond = para.0.try_into();
30 if cond.is_err() { return web_result(cond); }
31 let x = InstanceDaoImpl::select_by_id(cond.unwrap()).await;
32 let rtn: Result<Option<InstanceVO>> = to_js_option_output(x);
33 web_result(rtn)
34}
35
36#[post("/instance/downstream")]
37async fn get_downstream_instance(from: String) -> HttpResponse {
38 debug!("/instance/downstream : {:?}", &from);
39 let x = InstanceDaoImpl::select_downstream(&from).await;
40 web_result(x)
41}
42
43#[post("/instance/downstreamJS")]
44async fn get_downstream_instance_js(from: String) -> HttpResponse {
45 debug!("/instance/downstreamJS : {:?}", &from);
46 let x = InstanceDaoImpl::select_downstream(&from).await;
47 let rtn: Result<Vec<InstanceVO>> = to_js_vec_output(x);
48 web_result(rtn)
49}
50
51#[post("/instance/byKey")]
53async fn get_by_key_range(para: Json<InsCond>) -> HttpResponse {
54 debug!("/instance/byKey : {:?}", ¶.0);
55 let x = INS_RANGE.clone().get_by_key_range(¶.0).await;
56 web_result(x)
57}
58
59#[post("/instance/byKeyJS")]
61async fn get_by_key_range_js(para: Json<InsCondVO>) -> HttpResponse {
62 debug!("/instance/byKeyJS : {:?}", ¶.0);
63 let cond = para.0.try_into();
64 if cond.is_err() { return web_result(cond); }
65 let x = INS_RANGE.clone().get_by_key_range(&cond.unwrap()).await;
66 let rtn: Result<Vec<InstanceVO>> = to_js_vec_output(x);
67 web_result(rtn)
68}
69
70#[get("/metaIdGreatThan/{from}/{limit}")]
74async fn meta_id_great_than(path: web::Path<(i32, i32)>) -> HttpResponse {
75 let (from, limit) = path.into_inner();
76 let range = MetaService::id_great_than(from, limit).await;
77 web_result(range)
78}
79
80#[post("/meta/add")]
82async fn meta_add(path: web::Path<RawMeta>) -> HttpResponse {
83 let rtn = D_M.insert(&path.into_inner()).await;
84 web_result(rtn)
85}
86
87#[get("/meta/delete/{name}")]
88async fn meta_delete(path: web::Path<String>) -> HttpResponse {
89 let meta = Meta::from_string(&path.into_inner());
90 if meta.is_err() {
91 return web_result::<String>(Err(meta.err().unwrap()));
92 }
93 let rtn = D_M.delete(&meta.unwrap()).await;
94 web_result(rtn)
95}
96
97#[post("/meta/update")]
98async fn meta_update(raw: Json<RawMeta>) -> HttpResponse {
99 let rtn = D_M.edit(&raw).await;
100 web_result(rtn)
101}
102
103#[get("/metaUsed/{name}")]
105async fn meta_used(path: web::Path<String>) -> HttpResponse {
106 HttpResponse::Ok().body(format!("get from: {}", path.into_inner()))
108}
109
110#[get("/relationIdGreatThan/{from}/{limit}")]
114async fn relation_id_great_than(path: web::Path<(i32, i32)>) -> HttpResponse {
115 let (from, limit) = path.into_inner();
116 let range = RelationService::id_great_than(from, limit).await;
117 web_result(range)
118}
119
120#[post("/relationUpdate")]
121async fn relation_update(_relation: Json<RawRelation>) -> HttpResponse {
122 HttpResponse::Ok().body(format!("get from: {}", "from"))
124}
125
126#[post("/failed")]
128async fn failed_from(para: Json<TaskCondition>) -> HttpResponse {
129 let rtn = D_TE.get(¶.0).await;
130 web_result(rtn)
131}
132
133#[post("/failed/num")]
134async fn failed_num_from(para: Json<TaskCondition>) -> HttpResponse {
135 debug!("/failed/num : {:?}", ¶.0);
136 let x = D_TE.get_num(¶.0.task_for).await;
137 web_result(x)
138}
139
140#[post("/failed/delete")]
141async fn failed_delete(task_ids: Json<Vec<String>>) -> HttpResponse {
142 let has_err = task_ids.0.iter().find(|x| x.parse::<u64>().is_err());
143 if has_err.is_some() {
144 return web_result::<Result<i32>>(Err(NatureError::VerifyError("input err".to_string())));
145 }
146 let ids = task_ids.0.join(",");
147 let rtn = D_TE.delete(&ids).await;
148 web_result(rtn)
149}
150
151#[post("/failed/deleteFor")]
152async fn failed_delete_for(task_for: String) -> HttpResponse {
153 let rtn = D_TE.delete_for(&task_for).await;
154 web_result(rtn)
155}
156
157#[post("/failed/reset")]
159async fn failed_reset(task_ids: Json<Vec<String>>) -> HttpResponse {
160 let ids: Vec<std::result::Result<u64, ParseIntError>> = task_ids.iter().map(|x| x.parse::<u64>()).collect();
161 if ids.iter().find(|x| x.is_err()).is_some() {
162 return web_result::<Result<i32>>(Err(NatureError::VerifyError("input err".to_string())));
163 }
164 let ids: Vec<u64> = ids.into_iter().map(|x| x.unwrap()).collect();
165 let rtn = TaskErrService::move_to_task(ids).await;
166 web_result(rtn)
167}
168
169
170pub fn manager_config(cfg: &mut web::ServiceConfig) {
171 cfg.service(meta_id_great_than)
172 .service(meta_add)
173 .service(meta_used)
174 .service(meta_delete)
175 .service(meta_update)
176 .service(get_by_id)
177 .service(get_by_id_js)
178 .service(get_by_key_range)
179 .service(get_by_key_range_js)
180 .service(get_downstream_instance)
181 .service(get_downstream_instance_js)
182 .service(relation_id_great_than)
183 .service(relation_update)
184 .service(failed_from)
185 .service(failed_num_from)
186 .service(failed_delete)
187 .service(failed_delete_for)
188 .service(failed_reset)
189 ;
190}