Skip to content

Commit df4df17

Browse files
committed
backend: remove charger from bridge state when the charger is removed.
1 parent 965b6b5 commit df4df17

File tree

3 files changed

+24
-3
lines changed

3 files changed

+24
-3
lines changed

backend/src/routes/charger/remove.rs

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ use crate::{
2626
error::Error,
2727
routes::charger::charger_belongs_to_user,
2828
utils::{get_connection, web_block_unpacked},
29-
AppState,
29+
AppState, BridgeState,
3030
};
3131

3232
#[derive(Debug, Deserialize, Serialize, ToSchema)]
@@ -81,6 +81,20 @@ pub async fn delete_charger(charger: i32, state: &web::Data<AppState>) -> actix_
8181
Ok(())
8282
}
8383

84+
pub fn remove_charger_from_state(charger: i32, state: &web::Data<BridgeState>) {
85+
let socket = {
86+
let mut map = state.charger_management_map_with_id.lock().unwrap();
87+
map.remove(&charger)
88+
};
89+
90+
if let Some(socket) = socket {
91+
let socket = socket.lock().unwrap();
92+
let remote_address = socket.get_remote_address();
93+
let mut map = state.charger_management_map.lock().unwrap();
94+
let _ = map.remove(&remote_address);
95+
}
96+
}
97+
8498
#[utoipa::path(
8599
context_path = "/charger",
86100
request_body = DeleteChargerSchema,
@@ -97,6 +111,7 @@ pub async fn remove(
97111
state: web::Data<AppState>,
98112
uid: crate::models::uuid::Uuid,
99113
data: web::Json<DeleteChargerSchema>,
114+
bridge_state: web::Data<BridgeState>,
100115
) -> Result<impl Responder, actix_web::Error> {
101116

102117
if !charger_belongs_to_user(&state, uid.clone().into(), data.charger.clone()).await? {
@@ -106,6 +121,7 @@ pub async fn remove(
106121
delete_all_keys(data.charger.clone(), &state).await?;
107122
delete_all_allowed_users(data.charger.clone(), &state).await?;
108123
delete_charger(data.charger, &state).await?;
124+
remove_charger_from_state(data.charger, &bridge_state);
109125

110126
Ok(HttpResponse::Ok())
111127
}

backend/src/routes/user/delete.rs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ use diesel::{prelude::*, result::Error::NotFound};
44
use serde::{Deserialize, Serialize};
55
use utoipa::ToSchema;
66

7-
use crate::{error::Error, routes::{auth::login::{validate_password, FindBy}, charger::remove::{delete_all_allowed_users, delete_all_keys, delete_charger}, user::logout::delete_all_refresh_tokens}, utils::{get_connection, web_block_unpacked}, AppState};
7+
use crate::{error::Error, routes::{auth::login::{validate_password, FindBy}, charger::remove::{delete_all_allowed_users, delete_all_keys, delete_charger, remove_charger_from_state}, user::logout::delete_all_refresh_tokens}, utils::{get_connection, web_block_unpacked}, AppState, BridgeState};
88

99
#[derive(ToSchema, Serialize, Deserialize)]
1010
pub struct DeleteUserSchema {
@@ -47,7 +47,7 @@ async fn get_all_chargers_for_user(user_id: uuid::Uuid, state: &web::Data<AppSta
4747
)
4848
)]
4949
#[delete("/delete")]
50-
pub async fn delete_user(state: web::Data<AppState>, user_id: crate::models::uuid::Uuid, payload: web::Json<DeleteUserSchema>) -> actix_web::Result<impl Responder> {
50+
pub async fn delete_user(state: web::Data<AppState>, bridge_state: web::Data<BridgeState>, user_id: crate::models::uuid::Uuid, payload: web::Json<DeleteUserSchema>) -> actix_web::Result<impl Responder> {
5151
let user_id = user_id.into();
5252

5353
let conn = get_connection(&state)?;
@@ -59,6 +59,7 @@ pub async fn delete_user(state: web::Data<AppState>, user_id: crate::models::uui
5959
delete_all_keys(id, &state).await?;
6060
delete_all_allowed_users(id, &state).await?;
6161
delete_charger(id, &state).await?;
62+
remove_charger_from_state(id, &bridge_state);
6263
}
6364

6465
delete_all_refresh_tokens(user_id, &state).await?;

backend/src/udp_server/socket.rs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -214,4 +214,8 @@ impl ManagementSocket {
214214
pub fn id(&self) -> i32 {
215215
self.charger_id
216216
}
217+
218+
pub fn get_remote_address(&self) -> SocketAddr {
219+
self.remote_addr
220+
}
217221
}

0 commit comments

Comments
 (0)