Bladeren bron

修复device/remove行为,修复auth带绑定的注册时的行为,调整所有insert含deadline语句取消手动填充

zii 1 maand geleden
bovenliggende
commit
e701ca603d
3 gewijzigde bestanden met toevoegingen van 46 en 42 verwijderingen
  1. 29 21
      src/api/auth.rs
  2. 15 19
      src/api/device.rs
  3. 2 2
      src/api/flow_task.rs

+ 29 - 21
src/api/auth.rs

@@ -119,13 +119,13 @@ pub async fn auth(
                 } else{
                     if let Some(mq) = state.mq_detail{
                         if let Err(e)=mq.db_mq_map.execute(
-                            "insert into pub (clientid,topic,deadline)values(?,?,9223372036854775807),(?,?,9223372036854775807)", 
+                            "insert into pub (clientid,topic)values(?,?),(?,?)", 
                             (mqid.clone(),format!("{}/cmd",sn),mqid.clone(),format!("/wf/Iot/device/{sn}"))).await{
                             log(Warning, format!("on register with device: {e}"));
                         };
                         
                         if let Err(e)=mq.db_mq_map.execute(
-                            "insert into sub (clientid,topic,deadline)values(?,?,9223372036854775807),(?,?,9223372036854775807)", 
+                            "insert into sub (clientid,topic)values(?,?),(?,?)", 
                             (mqid.clone(),format!("{}/state",sn),mqid.clone(),format!("/wf/Iot/client/{sn}"))).await{
                             log(Warning, format!("on register with device: {e}"));
                         };
@@ -180,27 +180,35 @@ pub async fn auth(
         // 未注册时绑定设备
         if let Some(sn)= q.state.strip_prefix("did="){
             log(Debuging, format!("got did:  {}",sn));
-            if let Err(e) = state.db_lite.execute("update device set belongto=? where sn=? and belongto=0", (uid,sn)).await{
-                println!("{e}");
-            }else if let Ok(did) = state.db_lite.query("select id from device where sn=?", [sn], |r|{r.get::<usize,i64>(0)}).await{
-            //  if let Some(did)=state.db_lite.last_insert_rowid().await.ok(){  // 错误位置:update不会给last_insert_rowid
-                if let Err(e) = state.db_lite.execute("insert into map_user_device (uid, did)values(?,?)", (uid,did)).await{
-                    println!("{e}");
+            match state.db_lite.execute("update device set belongto=? where sn=? and belongto=0", (uid,sn)).await{
+                Err(e)=>{println!("{e}")},
+                Ok(n ) => {
+                    if n!=0{  // 设备绑定成功,update至少一条则记录并订阅
+                        if let Ok(did) = state.db_lite.query(
+                            "select id from device where sn=? and belongto=?",
+                            (sn,uid), |r|{r.get::<usize,i64>(0)}).await{
+                            if let Err(e) = state.db_lite.execute(
+                                "insert into map_user_device (uid, did)values(?,?)", 
+                                (uid,did)).await{
+                                println!("{e}");
+                            }
+                            if let Some(mq) = state.mq_detail{
+                                if let Err(e)=mq.db_mq_map.execute(
+                                    "insert into pub (clientid,topic)values(?,?),(?,?)", 
+                                    (mqid.clone(),format!("{}/cmd",sn),mqid.clone(),format!("/wf/Iot/device/{sn}"))).await{
+                                    log(Warning, format!("on register with device: {e}"));
+                                };
+                                
+                                if let Err(e)=mq.db_mq_map.execute(
+                                    "insert into sub (clientid,topic)values(?,?),(?,?)", 
+                                    (mqid.clone(),format!("{}/state",sn),mqid.clone(),format!("/wf/Iot/client/{sn}"))).await{
+                                    log(Warning, format!("on register with device: {e}"));
+                                };
+                            }
+                        }
+                    }
                 }
             };
-            if let Some(mq) = state.mq_detail{
-                if let Err(e)=mq.db_mq_map.execute(
-                    "insert into pub (clientid,topic,deadline)values(?,?,9223372036854775807),(?,?,9223372036854775807)", 
-                    (mqid.clone(),format!("{}/cmd",sn),mqid.clone(),format!("/wf/Iot/device/{sn}"))).await{
-                    log(Warning, format!("on register with device: {e}"));
-                };
-                
-                if let Err(e)=mq.db_mq_map.execute(
-                    "insert into sub (clientid,topic,deadline)values(?,?,9223372036854775807),(?,?,9223372036854775807)", 
-                    (mqid.clone(),format!("{}/state",sn),mqid.clone(),format!("/wf/Iot/client/{sn}"))).await{
-                    log(Warning, format!("on register with device: {e}"));
-                };
-            }
         }
         log(Debug, "register success".to_string());
         // 注册成功 函数末尾发生跳转到主页

+ 15 - 19
src/api/device.rs

@@ -93,7 +93,7 @@ pub async fn d_cancel_share(
     State(state): State<AppState>,
     Json(d): axum::extract::Json<Dshare>
 ) -> Json<JsonBack> {
-    let (uid,_) = match check_token(&state, d.token).await {
+    let (uid,mqid) = match check_token(&state, d.token).await {
         Ok(id) => {id},
         Err(_) => {
             return token_fail();
@@ -104,6 +104,20 @@ pub async fn d_cancel_share(
         [uid,d.id]).await {
             if n ==0 {
                 return Json(JsonBack{errcode: 3000, errmsg: Some(format!("取消分享失败: 该设备不属于当前用户"))});
+            } else if let Some(s) = state.mq_detail {
+                 let sn = if let Ok(sn)= state.db_lite.query(
+                    "select sn from device where id=? and belongto=?", 
+                    [d.id,uid], |r|{r.get::<usize,String>(0)}).await{
+                        sn
+                    }else{
+                        return Json(JsonBack{errcode: 3000, errmsg: Some(format!("删除设备失败: 设备不存在"))});
+                    };
+                if let Err(e)=s.db_mq_map.execute("delete from pub where clientid=? and topic in (?,?)", (mqid.clone(),format!("{sn}/cmd",),format!("/wf/Iot/device/{sn}",))).await{
+                    log(Error, format!("删除设备失败: {e}"));
+                }
+                if let Err(e)=s.db_mq_map.execute("delete from sub where clientid=? and topic in (?,?)", (mqid,format!("{sn}/state",),format!("/wf/Iot/client/{sn}",))).await{
+                    log(Error, format!("删除设备失败: {e}"));
+                } 
             }
     }else {
         return Json(JsonBack{errcode: 3000, errmsg: Some(format!("删除用户设备关系失败"))});
@@ -130,17 +144,6 @@ pub async fn d_remove(
         return Json(JsonBack{errcode: 3000, errmsg: Some(format!("删除设备失败: 设备不存在"))});
     };
     
-    let mqnew = if let Ok(sn)= state.db_lite.query(
-        "select mqid from user where id=?", [d.id], |r|{r.get::<usize,String>(0)}).await{
-            sn
-    }else{
-        return Json(JsonBack{errcode: 3000, errmsg: Some(format!("删除设备失败: 设备不存在"))});
-    };
-    if let Err(e) = state.db_lite.execute(
-        "update device set belongto=0 where id=? and belongto=?",
-        [d.id, uid]).await {
-        return Json(JsonBack{errcode: 3000, errmsg: Some(format!("更改设备从属失败: {e}"))});
-    }
     if let Err(e) = state.db_lite.execute(
         "delete from map_user_device where did=? and uid=?",
         [d.id, uid]).await {
@@ -154,13 +157,6 @@ pub async fn d_remove(
         if let Err(e)=s.db_mq_map.execute("delete from sub where clientid=? and topic in (?,?)", (mqid,format!("{sn}/state",),format!("/wf/Iot/client/{sn}",))).await{
             log(Error, format!("删除设备失败: {e}"));
         } 
-        // 插入新关系
-        if let Err(e)=s.db_mq_map.execute("insert into pub (clientid,topic)values(?,?,9223372036854775807),(?,?,9223372036854775807)", (mqnew.clone(),format!("{sn}/cmd",),mqnew.clone(),format!("/wf/Iot/device/{sn}",))).await{
-            log(Error, format!("添加设备失败: {e}"));
-        }
-        if let Err(e)=s.db_mq_map.execute("insert into sub (clientid,topic)values(?,?,9223372036854775807),(?,?,9223372036854775807)", (mqnew.clone(),format!("{sn}/state",),mqnew,format!("/wf/Iot/client/{sn}",))).await{
-            log(Error, format!("添加设备失败: {e}"));
-        }
     }
 
     errcode0()

+ 2 - 2
src/api/flow_task.rs

@@ -143,10 +143,10 @@ pub async fn checkout_flow_task_of_share_device(
             Ok(_) => {
                 if let Some(ref s)=state.mq_detail{
                     // 插入新关系
-                    if let Err(e)=s.db_mq_map.execute("insert into pub (clientid,topic)values(?,?,9223372036854775807),(?,?,9223372036854775807)", (mqid.clone(),format!("{sn}/cmd",),mqid.clone(),format!("/wf/Iot/device/{sn}",))).await{
+                    if let Err(e)=s.db_mq_map.execute("insert into pub (clientid,topic)values(?,?),(?,?)", (mqid.clone(),format!("{sn}/cmd",),mqid.clone(),format!("/wf/Iot/device/{sn}",))).await{
                         log(Error, format!("添加设备失败: {e}"));
                     }
-                    if let Err(e)=s.db_mq_map.execute("insert into sub (clientid,topic)values(?,?,9223372036854775807),(?,?,9223372036854775807)", (mqid.clone(),format!("{sn}/state",),mqid,format!("/wf/Iot/client/{sn}",))).await{
+                    if let Err(e)=s.db_mq_map.execute("insert into sub (clientid,topic)values(?,?),(?,?)", (mqid.clone(),format!("{sn}/state",),mqid,format!("/wf/Iot/client/{sn}",))).await{
                         log(Error, format!("添加设备失败: {e}"));
                     }
                 }