()
| 48 | } |
| 49 | |
| 50 | pub async fn run() -> Result<()> { |
| 51 | storage::setup().await?; |
| 52 | |
| 53 | info!("Migrating device-profile templates to device profiles"); |
| 54 | |
| 55 | info!("Querying vendors"); |
| 56 | let vendors: Vec<String> = device_profile_template::table |
| 57 | .select(device_profile_template::vendor) |
| 58 | .group_by(device_profile_template::vendor) |
| 59 | .load(&mut get_async_db_conn().await?) |
| 60 | .await?; |
| 61 | |
| 62 | for vendor in &vendors { |
| 63 | info!(vendor = %vendor, "Creating vendor"); |
| 64 | |
| 65 | let v = device_profile::upsert_vendor(device_profile::Vendor { |
| 66 | name: vendor.clone(), |
| 67 | ..Default::default() |
| 68 | }) |
| 69 | .await?; |
| 70 | |
| 71 | info!(vendor = %vendor, "Querying vendor devices"); |
| 72 | let devices: Vec<String> = device_profile_template::table |
| 73 | .select(device_profile_template::name) |
| 74 | .filter(device_profile_template::vendor.eq(vendor)) |
| 75 | .group_by(device_profile_template::name) |
| 76 | .load(&mut get_async_db_conn().await?) |
| 77 | .await?; |
| 78 | |
| 79 | for device in &devices { |
| 80 | info!(vendor = %vendor, device = %device, "Creating device"); |
| 81 | |
| 82 | let d = device_profile::upsert_device(device_profile::Device { |
| 83 | vendor_id: v.id, |
| 84 | name: device.clone(), |
| 85 | ..Default::default() |
| 86 | }) |
| 87 | .await?; |
| 88 | |
| 89 | info!(vendor = %vendor, device = %device, "Querying device profiles"); |
| 90 | let dps: Vec<DeviceProfileTemplate> = device_profile_template::table |
| 91 | .filter( |
| 92 | device_profile_template::vendor |
| 93 | .eq(vendor) |
| 94 | .and(device_profile_template::name.eq(device)), |
| 95 | ) |
| 96 | .load(&mut get_async_db_conn().await?) |
| 97 | .await?; |
| 98 | |
| 99 | for dp in &dps { |
| 100 | info!(vendor = %vendor, device = %device, firmware = %dp.firmware, region = %dp.region, "Creating device profile"); |
| 101 | |
| 102 | let _ = device_profile::create(device_profile::DeviceProfile { |
| 103 | name: dp.name.clone(), |
| 104 | region: dp.region, |
| 105 | mac_version: dp.mac_version, |
| 106 | reg_params_revision: dp.reg_params_revision, |
| 107 | adr_algorithm_id: "default".into(), |
nothing calls this directly
no test coverage detected