Merge pull request #2 from ttulka/refactor_api_to_use_enums

Improve enum usage and formatting
This commit is contained in:
Tomas Tulka 2025-01-27 14:15:17 +01:00 committed by GitHub
commit 802b2e7f02
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 95 additions and 59 deletions

View File

@ -9,6 +9,7 @@ use tonic::{Request, Response, Status};
use uuid::Uuid;
use chirpstack_api::api::device_service_server::DeviceService;
use chirpstack_api::api::list_devices_request::OrderBy;
use chirpstack_api::{api, common, internal};
use lrwn::{AES128Key, DevAddr, EUI64};
@ -277,17 +278,23 @@ impl DeviceService for Device {
},
};
let order_by = match req.order_by {
1 => device::OrderBy::DevEui,
2 => device::OrderBy::LastSeenAt,
3 => device::OrderBy::DeviceProfileName,
_ => device::OrderBy::Name,
let order_by = match req.order_by() {
OrderBy::Name => device::OrderBy::Name,
OrderBy::DevEui => device::OrderBy::DevEui,
OrderBy::LastSeenAt => device::OrderBy::LastSeenAt,
OrderBy::DeviceProfileName => device::OrderBy::DeviceProfileName,
};
let count = device::get_count(&filters).await.map_err(|e| e.status())?;
let items = device::list(req.limit as i64, req.offset as i64, &filters, order_by, req.order_by_desc)
.await
.map_err(|e| e.status())?;
let items = device::list(
req.limit as i64,
req.offset as i64,
&filters,
order_by,
req.order_by_desc,
)
.await
.map_err(|e| e.status())?;
let mut resp = Response::new(api::ListDevicesResponse {
total_count: count as u32,

View File

@ -7,6 +7,7 @@ use tonic::{Request, Response, Status};
use uuid::Uuid;
use chirpstack_api::api::gateway_service_server::GatewayService;
use chirpstack_api::api::list_gateways_request::OrderBy;
use chirpstack_api::{api, common};
use lrwn::EUI64;
@ -236,16 +237,22 @@ impl GatewayService for Gateway {
Some(req.search.to_string())
},
};
let order_by = match req.order_by{
1 => gateway::OrderBy::GatewayId,
2 => gateway::OrderBy::LastSeenAt,
_ => gateway::OrderBy::Name,
let order_by = match req.order_by() {
OrderBy::Name => gateway::OrderBy::Name,
OrderBy::GatewayId => gateway::OrderBy::GatewayId,
OrderBy::LastSeenAt => gateway::OrderBy::LastSeenAt,
};
let count = gateway::get_count(&filters).await.map_err(|e| e.status())?;
let result = gateway::list(req.limit as i64, req.offset as i64, &filters, order_by, req.order_by_desc)
.await
.map_err(|e| e.status())?;
let result = gateway::list(
req.limit as i64,
req.offset as i64,
&filters,
order_by,
req.order_by_desc,
)
.await
.map_err(|e| e.status())?;
let mut resp = Response::new(api::ListGatewaysResponse {
total_count: count as u32,

View File

@ -216,12 +216,13 @@ pub struct Filters {
pub search: Option<String>,
}
#[derive(Clone, Debug)]
#[derive(Clone, Debug, Default)]
pub enum OrderBy {
#[default]
Name,
DevEui,
LastSeenAt,
DeviceProfileName
DeviceProfileName,
}
#[derive(QueryableByName, PartialEq, Eq, Debug)]
@ -659,29 +660,33 @@ pub async fn list(
}
let descending: bool = order_by_desc;
match order_by{
OrderBy::Name if !descending =>
q = q.order_by(device::dsl::name),
OrderBy::Name if descending =>
q = q.order_by(device::dsl::name.desc()),
OrderBy::DevEui if !descending =>
q = q.order_by(device::dsl::dev_eui),
OrderBy::DevEui if descending =>
q = q.order_by(device::dsl::dev_eui.desc()),
OrderBy::LastSeenAt if !descending =>
q = q.order_by(device::dsl::last_seen_at)
.then_order_by(device::dsl::name),
OrderBy::LastSeenAt if descending =>
q = q.order_by(device::dsl::last_seen_at.desc())
.then_order_by(device::dsl::name),
OrderBy::DeviceProfileName if !descending =>
q = q.order_by(device_profile::dsl::name.asc())
.then_order_by(device::dsl::name),
OrderBy::DeviceProfileName if descending =>
q = q.order_by(device_profile::dsl::name.desc())
.then_order_by(device::dsl::name),
_ => q = q.order_by(device::dsl::name)
};
match order_by {
OrderBy::Name if !descending => q = q.order_by(device::dsl::name),
OrderBy::Name if descending => q = q.order_by(device::dsl::name.desc()),
OrderBy::DevEui if !descending => q = q.order_by(device::dsl::dev_eui),
OrderBy::DevEui if descending => q = q.order_by(device::dsl::dev_eui.desc()),
OrderBy::LastSeenAt if !descending => {
q = q
.order_by(device::dsl::last_seen_at)
.then_order_by(device::dsl::name)
}
OrderBy::LastSeenAt if descending => {
q = q
.order_by(device::dsl::last_seen_at.desc())
.then_order_by(device::dsl::name)
}
OrderBy::DeviceProfileName if !descending => {
q = q
.order_by(device_profile::dsl::name.asc())
.then_order_by(device::dsl::name)
}
OrderBy::DeviceProfileName if descending => {
q = q
.order_by(device_profile::dsl::name.desc())
.then_order_by(device::dsl::name)
}
_ => q = q.order_by(device::dsl::name),
};
q.limit(limit)
.offset(offset)
@ -1039,7 +1044,15 @@ pub mod test {
let count = get_count(&tst.filters).await.unwrap() as usize;
assert_eq!(tst.count, count);
let items = list(tst.limit, tst.offset, &tst.filters, tst.order, tst.order_by_desc).await.unwrap();
let items = list(
tst.limit,
tst.offset,
&tst.filters,
tst.order,
tst.order_by_desc,
)
.await
.unwrap();
assert_eq!(
tst.devs
.iter()

View File

@ -110,8 +110,9 @@ pub struct Filters {
pub search: Option<String>,
}
#[derive(Clone, Debug)]
#[derive(Clone, Debug, Default)]
pub enum OrderBy {
#[default]
Name,
GatewayId,
LastSeenAt,
@ -360,24 +361,24 @@ pub async fn list(
);
}
let descending: bool = order_by_desc;
let descending: bool = order_by_desc;
match order_by {
OrderBy::Name if !descending=>
q = q.order_by(gateway::dsl::name),
OrderBy::Name if descending =>
q = q.order_by(gateway::dsl::name.desc()),
OrderBy::GatewayId if !descending =>
q = q.order_by(gateway::dsl::gateway_id),
OrderBy::GatewayId if descending =>
q = q.order_by(gateway::dsl::gateway_id.desc()),
OrderBy::LastSeenAt if !descending =>
q = q.order_by(gateway::dsl::last_seen_at)
.then_order_by(gateway::dsl::name),
OrderBy::LastSeenAt if descending =>
q = q.order_by(gateway::dsl::last_seen_at.desc())
.then_order_by(gateway::dsl::name),
_ => q = q.order_by(gateway::dsl::name)
OrderBy::Name if !descending => q = q.order_by(gateway::dsl::name),
OrderBy::Name if descending => q = q.order_by(gateway::dsl::name.desc()),
OrderBy::GatewayId if !descending => q = q.order_by(gateway::dsl::gateway_id),
OrderBy::GatewayId if descending => q = q.order_by(gateway::dsl::gateway_id.desc()),
OrderBy::LastSeenAt if !descending => {
q = q
.order_by(gateway::dsl::last_seen_at)
.then_order_by(gateway::dsl::name)
}
OrderBy::LastSeenAt if descending => {
q = q
.order_by(gateway::dsl::last_seen_at.desc())
.then_order_by(gateway::dsl::name)
}
_ => q = q.order_by(gateway::dsl::name),
};
let items = q
@ -759,7 +760,15 @@ pub mod test {
let count = get_count(&tst.filters).await.unwrap() as usize;
assert_eq!(tst.count, count);
let items = list(tst.limit, tst.offset, &tst.filters, tst.order, tst.order_by_desc).await.unwrap();
let items = list(
tst.limit,
tst.offset,
&tst.filters,
tst.order,
tst.order_by_desc,
)
.await
.unwrap();
assert_eq!(
tst.gws
.iter()