MCPcopy Create free account
hub / github.com/chirpstack/chirpstack / add_device

Function add_device

chirpstack/src/storage/multicast.rs:291–331  ·  view source on GitHub ↗
(group_id: &Uuid, dev_eui: &EUI64)

Source from the content-addressed store, hash-verified

289}
290
291pub async fn add_device(group_id: &Uuid, dev_eui: &EUI64) -> Result<(), Error> {
292 let mut c = get_async_db_conn().await?;
293 c.transaction::<(), Error, _>(async |c| {
294 let device_query = device::dsl::device.find(&dev_eui);
295 #[cfg(feature = "postgres")]
296 let device_query = device_query.for_update();
297 let d: super::device::Device = device_query
298 .get_result(c)
299 .await
300 .map_err(|e| Error::from_diesel(e, dev_eui.to_string()))?;
301
302 let fields_group_id = fields::Uuid::from(group_id);
303
304 let multicast_group_query = multicast_group::dsl::multicast_group.find(&fields_group_id);
305 #[cfg(feature = "postgres")]
306 let multicast_group_query = multicast_group_query.for_update();
307 let mg: MulticastGroup = multicast_group_query
308 .get_result(c)
309 .await
310 .map_err(|e| Error::from_diesel(e, group_id.to_string()))?;
311
312 if d.application_id != mg.application_id {
313 // Device not found within the same application.
314 return Err(Error::NotFound(dev_eui.to_string()));
315 }
316
317 let _ = diesel::insert_into(multicast_group_device::table)
318 .values((
319 multicast_group_device::multicast_group_id.eq(&fields_group_id),
320 multicast_group_device::dev_eui.eq(&dev_eui),
321 multicast_group_device::created_at.eq(Utc::now()),
322 ))
323 .execute(c)
324 .await
325 .map_err(|e| Error::from_diesel(e, "".into()))?;
326 Ok(())
327 })
328 .await?;
329 info!(multicast_group_id = %group_id, dev_eui = %dev_eui, "Device added to multicast-group");
330 Ok(())
331}
332
333pub async fn remove_device(group_id: &Uuid, dev_eui: &EUI64) -> Result<(), Error> {
334 let ra = diesel::delete(

Callers 2

test_multicast_groupFunction · 0.70
test_deviceFunction · 0.70

Calls 3

to_stringMethod · 0.80
get_async_db_connFunction · 0.70
intoMethod · 0.45

Tested by 2

test_multicast_groupFunction · 0.56
test_deviceFunction · 0.56