mirror of
https://github.com/chirpstack/chirpstack.git
synced 2025-04-25 05:20:07 +00:00
Immediately return PG conn after use.
Same as the previous commit, this will returns the PG connection back to the pool after usage, avoiding the risk that we are holding the conn longer than needed.
This commit is contained in:
parent
fccf762c39
commit
c62f2b6474
@ -92,12 +92,11 @@ impl Validator for ValidateActiveUser {
|
|||||||
}
|
}
|
||||||
|
|
||||||
async fn validate_user(&self, id: &Uuid) -> Result<i64, Error> {
|
async fn validate_user(&self, id: &Uuid) -> Result<i64, Error> {
|
||||||
let mut c = get_async_db_conn().await?;
|
|
||||||
let count = user::dsl::user
|
let count = user::dsl::user
|
||||||
.select(dsl::count_star())
|
.select(dsl::count_star())
|
||||||
.find(id)
|
.find(id)
|
||||||
.filter(user::dsl::is_active.eq(true))
|
.filter(user::dsl::is_active.eq(true))
|
||||||
.first(&mut c)
|
.first(&mut get_async_db_conn().await?)
|
||||||
.await?;
|
.await?;
|
||||||
Ok(count)
|
Ok(count)
|
||||||
}
|
}
|
||||||
@ -118,7 +117,6 @@ impl Validator for ValidateIsAdmin {
|
|||||||
}
|
}
|
||||||
|
|
||||||
async fn validate_user(&self, id: &Uuid) -> Result<i64, Error> {
|
async fn validate_user(&self, id: &Uuid) -> Result<i64, Error> {
|
||||||
let mut c = get_async_db_conn().await?;
|
|
||||||
let count = user::dsl::user
|
let count = user::dsl::user
|
||||||
.select(dsl::count_star())
|
.select(dsl::count_star())
|
||||||
.find(id)
|
.find(id)
|
||||||
@ -127,7 +125,7 @@ impl Validator for ValidateIsAdmin {
|
|||||||
.eq(true)
|
.eq(true)
|
||||||
.and(user::dsl::is_admin.eq(true)),
|
.and(user::dsl::is_admin.eq(true)),
|
||||||
)
|
)
|
||||||
.first(&mut c)
|
.first(&mut get_async_db_conn().await?)
|
||||||
.await?;
|
.await?;
|
||||||
Ok(count)
|
Ok(count)
|
||||||
}
|
}
|
||||||
@ -144,22 +142,20 @@ impl ValidateActiveUserOrKey {
|
|||||||
#[async_trait]
|
#[async_trait]
|
||||||
impl Validator for ValidateActiveUserOrKey {
|
impl Validator for ValidateActiveUserOrKey {
|
||||||
async fn validate_key(&self, id: &Uuid) -> Result<i64, Error> {
|
async fn validate_key(&self, id: &Uuid) -> Result<i64, Error> {
|
||||||
let mut c = get_async_db_conn().await?;
|
|
||||||
let count = api_key::dsl::api_key
|
let count = api_key::dsl::api_key
|
||||||
.select(dsl::count_star())
|
.select(dsl::count_star())
|
||||||
.find(&id)
|
.find(&id)
|
||||||
.first(&mut c)
|
.first(&mut get_async_db_conn().await?)
|
||||||
.await?;
|
.await?;
|
||||||
Ok(count)
|
Ok(count)
|
||||||
}
|
}
|
||||||
|
|
||||||
async fn validate_user(&self, id: &Uuid) -> Result<i64, Error> {
|
async fn validate_user(&self, id: &Uuid) -> Result<i64, Error> {
|
||||||
let mut c = get_async_db_conn().await?;
|
|
||||||
let count = user::dsl::user
|
let count = user::dsl::user
|
||||||
.select(dsl::count_star())
|
.select(dsl::count_star())
|
||||||
.find(id)
|
.find(id)
|
||||||
.filter(user::dsl::is_active.eq(true))
|
.filter(user::dsl::is_active.eq(true))
|
||||||
.first(&mut c)
|
.first(&mut get_async_db_conn().await?)
|
||||||
.await?;
|
.await?;
|
||||||
Ok(count)
|
Ok(count)
|
||||||
}
|
}
|
||||||
@ -178,7 +174,6 @@ impl ValidateUsersAccess {
|
|||||||
#[async_trait]
|
#[async_trait]
|
||||||
impl Validator for ValidateUsersAccess {
|
impl Validator for ValidateUsersAccess {
|
||||||
async fn validate_user(&self, id: &Uuid) -> Result<i64, Error> {
|
async fn validate_user(&self, id: &Uuid) -> Result<i64, Error> {
|
||||||
let mut c = get_async_db_conn().await?;
|
|
||||||
let mut q = user::dsl::user
|
let mut q = user::dsl::user
|
||||||
.select(dsl::count_star())
|
.select(dsl::count_star())
|
||||||
.find(&id)
|
.find(&id)
|
||||||
@ -195,17 +190,16 @@ impl Validator for ValidateUsersAccess {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Ok(q.first(&mut c).await?)
|
Ok(q.first(&mut get_async_db_conn().await?).await?)
|
||||||
}
|
}
|
||||||
|
|
||||||
async fn validate_key(&self, id: &Uuid) -> Result<i64, Error> {
|
async fn validate_key(&self, id: &Uuid) -> Result<i64, Error> {
|
||||||
let mut c = get_async_db_conn().await?;
|
|
||||||
// admin api key
|
// admin api key
|
||||||
let count = api_key::dsl::api_key
|
let count = api_key::dsl::api_key
|
||||||
.select(dsl::count_star())
|
.select(dsl::count_star())
|
||||||
.find(&id)
|
.find(&id)
|
||||||
.filter(api_key::dsl::is_admin.eq(true))
|
.filter(api_key::dsl::is_admin.eq(true))
|
||||||
.first(&mut c)
|
.first(&mut get_async_db_conn().await?)
|
||||||
.await?;
|
.await?;
|
||||||
Ok(count)
|
Ok(count)
|
||||||
}
|
}
|
||||||
@ -225,7 +219,6 @@ impl ValidateUserAccess {
|
|||||||
#[async_trait]
|
#[async_trait]
|
||||||
impl Validator for ValidateUserAccess {
|
impl Validator for ValidateUserAccess {
|
||||||
async fn validate_user(&self, id: &Uuid) -> Result<i64, Error> {
|
async fn validate_user(&self, id: &Uuid) -> Result<i64, Error> {
|
||||||
let mut c = get_async_db_conn().await?;
|
|
||||||
let mut q = user::dsl::user
|
let mut q = user::dsl::user
|
||||||
.select(dsl::count_star())
|
.select(dsl::count_star())
|
||||||
.find(&id)
|
.find(&id)
|
||||||
@ -251,17 +244,16 @@ impl Validator for ValidateUserAccess {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Ok(q.first(&mut c).await?)
|
Ok(q.first(&mut get_async_db_conn().await?).await?)
|
||||||
}
|
}
|
||||||
|
|
||||||
async fn validate_key(&self, id: &Uuid) -> Result<i64, Error> {
|
async fn validate_key(&self, id: &Uuid) -> Result<i64, Error> {
|
||||||
let mut c = get_async_db_conn().await?;
|
|
||||||
// admin api key
|
// admin api key
|
||||||
let count = api_key::dsl::api_key
|
let count = api_key::dsl::api_key
|
||||||
.select(dsl::count_star())
|
.select(dsl::count_star())
|
||||||
.find(&id)
|
.find(&id)
|
||||||
.filter(api_key::dsl::is_admin.eq(true))
|
.filter(api_key::dsl::is_admin.eq(true))
|
||||||
.first(&mut c)
|
.first(&mut get_async_db_conn().await?)
|
||||||
.await?;
|
.await?;
|
||||||
Ok(count)
|
Ok(count)
|
||||||
}
|
}
|
||||||
@ -287,8 +279,6 @@ impl ValidateApiKeysAccess {
|
|||||||
#[async_trait]
|
#[async_trait]
|
||||||
impl Validator for ValidateApiKeysAccess {
|
impl Validator for ValidateApiKeysAccess {
|
||||||
async fn validate_user(&self, id: &Uuid) -> Result<i64, Error> {
|
async fn validate_user(&self, id: &Uuid) -> Result<i64, Error> {
|
||||||
let mut c = get_async_db_conn().await?;
|
|
||||||
|
|
||||||
let mut q = user::dsl::user
|
let mut q = user::dsl::user
|
||||||
.select(dsl::count_star())
|
.select(dsl::count_star())
|
||||||
.filter(user::dsl::id.eq(&id).and(user::dsl::is_active.eq(true)))
|
.filter(user::dsl::id.eq(&id).and(user::dsl::is_active.eq(true)))
|
||||||
@ -327,7 +317,7 @@ impl Validator for ValidateApiKeysAccess {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
Ok(q.first(&mut c).await?)
|
Ok(q.first(&mut get_async_db_conn().await?).await?)
|
||||||
}
|
}
|
||||||
|
|
||||||
async fn validate_key(&self, _id: &Uuid) -> Result<i64, Error> {
|
async fn validate_key(&self, _id: &Uuid) -> Result<i64, Error> {
|
||||||
@ -349,8 +339,6 @@ impl ValidateApiKeyAccess {
|
|||||||
#[async_trait]
|
#[async_trait]
|
||||||
impl Validator for ValidateApiKeyAccess {
|
impl Validator for ValidateApiKeyAccess {
|
||||||
async fn validate_user(&self, id: &Uuid) -> Result<i64, Error> {
|
async fn validate_user(&self, id: &Uuid) -> Result<i64, Error> {
|
||||||
let mut c = get_async_db_conn().await?;
|
|
||||||
|
|
||||||
let mut q = user::dsl::user
|
let mut q = user::dsl::user
|
||||||
.select(dsl::count_star())
|
.select(dsl::count_star())
|
||||||
.filter(user::dsl::id.eq(id).and(user::dsl::is_active.eq(true)))
|
.filter(user::dsl::id.eq(id).and(user::dsl::is_active.eq(true)))
|
||||||
@ -380,7 +368,7 @@ impl Validator for ValidateApiKeyAccess {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
Ok(q.first(&mut c).await?)
|
Ok(q.first(&mut get_async_db_conn().await?).await?)
|
||||||
}
|
}
|
||||||
|
|
||||||
async fn validate_key(&self, _id: &Uuid) -> Result<i64, Error> {
|
async fn validate_key(&self, _id: &Uuid) -> Result<i64, Error> {
|
||||||
@ -401,8 +389,6 @@ impl ValidateTenantsAccess {
|
|||||||
#[async_trait]
|
#[async_trait]
|
||||||
impl Validator for ValidateTenantsAccess {
|
impl Validator for ValidateTenantsAccess {
|
||||||
async fn validate_user(&self, id: &Uuid) -> Result<i64, Error> {
|
async fn validate_user(&self, id: &Uuid) -> Result<i64, Error> {
|
||||||
let mut c = get_async_db_conn().await?;
|
|
||||||
|
|
||||||
let mut q = user::dsl::user
|
let mut q = user::dsl::user
|
||||||
.select(dsl::count_star())
|
.select(dsl::count_star())
|
||||||
.find(&id)
|
.find(&id)
|
||||||
@ -421,17 +407,16 @@ impl Validator for ValidateTenantsAccess {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
Ok(q.first(&mut c).await?)
|
Ok(q.first(&mut get_async_db_conn().await?).await?)
|
||||||
}
|
}
|
||||||
|
|
||||||
async fn validate_key(&self, id: &Uuid) -> Result<i64, Error> {
|
async fn validate_key(&self, id: &Uuid) -> Result<i64, Error> {
|
||||||
let mut c = get_async_db_conn().await?;
|
|
||||||
// admin api key
|
// admin api key
|
||||||
let count = api_key::dsl::api_key
|
let count = api_key::dsl::api_key
|
||||||
.select(dsl::count_star())
|
.select(dsl::count_star())
|
||||||
.find(&id)
|
.find(&id)
|
||||||
.filter(api_key::dsl::is_admin.eq(true))
|
.filter(api_key::dsl::is_admin.eq(true))
|
||||||
.first(&mut c)
|
.first(&mut get_async_db_conn().await?)
|
||||||
.await?;
|
.await?;
|
||||||
Ok(count)
|
Ok(count)
|
||||||
}
|
}
|
||||||
@ -451,8 +436,6 @@ impl ValidateTenantAccess {
|
|||||||
#[async_trait]
|
#[async_trait]
|
||||||
impl Validator for ValidateTenantAccess {
|
impl Validator for ValidateTenantAccess {
|
||||||
async fn validate_user(&self, id: &Uuid) -> Result<i64, Error> {
|
async fn validate_user(&self, id: &Uuid) -> Result<i64, Error> {
|
||||||
let mut c = get_async_db_conn().await?;
|
|
||||||
|
|
||||||
let mut q = user::dsl::user
|
let mut q = user::dsl::user
|
||||||
.select(dsl::count_star())
|
.select(dsl::count_star())
|
||||||
.filter(user::dsl::id.eq(id).and(user::dsl::is_active.eq(true)))
|
.filter(user::dsl::id.eq(id).and(user::dsl::is_active.eq(true)))
|
||||||
@ -482,12 +465,10 @@ impl Validator for ValidateTenantAccess {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
Ok(q.first(&mut c).await?)
|
Ok(q.first(&mut get_async_db_conn().await?).await?)
|
||||||
}
|
}
|
||||||
|
|
||||||
async fn validate_key(&self, id: &Uuid) -> Result<i64, Error> {
|
async fn validate_key(&self, id: &Uuid) -> Result<i64, Error> {
|
||||||
let mut c = get_async_db_conn().await?;
|
|
||||||
|
|
||||||
let mut q = api_key::dsl::api_key
|
let mut q = api_key::dsl::api_key
|
||||||
.select(dsl::count_star())
|
.select(dsl::count_star())
|
||||||
.find(id)
|
.find(id)
|
||||||
@ -512,7 +493,7 @@ impl Validator for ValidateTenantAccess {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
Ok(q.first(&mut c).await?)
|
Ok(q.first(&mut get_async_db_conn().await?).await?)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -530,7 +511,6 @@ impl ValidateTenantUsersAccess {
|
|||||||
#[async_trait]
|
#[async_trait]
|
||||||
impl Validator for ValidateTenantUsersAccess {
|
impl Validator for ValidateTenantUsersAccess {
|
||||||
async fn validate_user(&self, id: &Uuid) -> Result<i64, Error> {
|
async fn validate_user(&self, id: &Uuid) -> Result<i64, Error> {
|
||||||
let mut c = get_async_db_conn().await?;
|
|
||||||
let mut q = user::dsl::user
|
let mut q = user::dsl::user
|
||||||
.select(dsl::count_star())
|
.select(dsl::count_star())
|
||||||
.filter(user::dsl::id.eq(id).and(user::dsl::is_active.eq(true)))
|
.filter(user::dsl::id.eq(id).and(user::dsl::is_active.eq(true)))
|
||||||
@ -569,11 +549,10 @@ impl Validator for ValidateTenantUsersAccess {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
Ok(q.first(&mut c).await?)
|
Ok(q.first(&mut get_async_db_conn().await?).await?)
|
||||||
}
|
}
|
||||||
|
|
||||||
async fn validate_key(&self, id: &Uuid) -> Result<i64, Error> {
|
async fn validate_key(&self, id: &Uuid) -> Result<i64, Error> {
|
||||||
let mut c = get_async_db_conn().await?;
|
|
||||||
let mut q = api_key::dsl::api_key
|
let mut q = api_key::dsl::api_key
|
||||||
.select(dsl::count_star())
|
.select(dsl::count_star())
|
||||||
.find(id)
|
.find(id)
|
||||||
@ -594,7 +573,7 @@ impl Validator for ValidateTenantUsersAccess {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
Ok(q.first(&mut c).await?)
|
Ok(q.first(&mut get_async_db_conn().await?).await?)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -617,7 +596,6 @@ impl ValidateTenantUserAccess {
|
|||||||
#[async_trait]
|
#[async_trait]
|
||||||
impl Validator for ValidateTenantUserAccess {
|
impl Validator for ValidateTenantUserAccess {
|
||||||
async fn validate_user(&self, id: &Uuid) -> Result<i64, Error> {
|
async fn validate_user(&self, id: &Uuid) -> Result<i64, Error> {
|
||||||
let mut c = get_async_db_conn().await?;
|
|
||||||
let mut q = user::dsl::user
|
let mut q = user::dsl::user
|
||||||
.select(dsl::count_star())
|
.select(dsl::count_star())
|
||||||
.filter(user::dsl::id.eq(id).and(user::dsl::is_active.eq(true)))
|
.filter(user::dsl::id.eq(id).and(user::dsl::is_active.eq(true)))
|
||||||
@ -662,11 +640,10 @@ impl Validator for ValidateTenantUserAccess {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
Ok(q.first(&mut c).await?)
|
Ok(q.first(&mut get_async_db_conn().await?).await?)
|
||||||
}
|
}
|
||||||
|
|
||||||
async fn validate_key(&self, id: &Uuid) -> Result<i64, Error> {
|
async fn validate_key(&self, id: &Uuid) -> Result<i64, Error> {
|
||||||
let mut c = get_async_db_conn().await?;
|
|
||||||
let mut q = api_key::dsl::api_key
|
let mut q = api_key::dsl::api_key
|
||||||
.select(dsl::count_star())
|
.select(dsl::count_star())
|
||||||
.find(id)
|
.find(id)
|
||||||
@ -687,7 +664,7 @@ impl Validator for ValidateTenantUserAccess {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
Ok(q.first(&mut c).await?)
|
Ok(q.first(&mut get_async_db_conn().await?).await?)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -705,7 +682,6 @@ impl ValidateApplicationsAccess {
|
|||||||
#[async_trait]
|
#[async_trait]
|
||||||
impl Validator for ValidateApplicationsAccess {
|
impl Validator for ValidateApplicationsAccess {
|
||||||
async fn validate_user(&self, id: &Uuid) -> Result<i64, Error> {
|
async fn validate_user(&self, id: &Uuid) -> Result<i64, Error> {
|
||||||
let mut c = get_async_db_conn().await?;
|
|
||||||
let mut q = user::dsl::user
|
let mut q = user::dsl::user
|
||||||
.select(dsl::count_star())
|
.select(dsl::count_star())
|
||||||
.filter(user::dsl::id.eq(id).and(user::dsl::is_active.eq(true)))
|
.filter(user::dsl::id.eq(id).and(user::dsl::is_active.eq(true)))
|
||||||
@ -749,11 +725,10 @@ impl Validator for ValidateApplicationsAccess {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
Ok(q.first(&mut c).await?)
|
Ok(q.first(&mut get_async_db_conn().await?).await?)
|
||||||
}
|
}
|
||||||
|
|
||||||
async fn validate_key(&self, id: &Uuid) -> Result<i64, Error> {
|
async fn validate_key(&self, id: &Uuid) -> Result<i64, Error> {
|
||||||
let mut c = get_async_db_conn().await?;
|
|
||||||
let mut q = api_key::dsl::api_key
|
let mut q = api_key::dsl::api_key
|
||||||
.select(dsl::count_star())
|
.select(dsl::count_star())
|
||||||
.find(id)
|
.find(id)
|
||||||
@ -783,7 +758,7 @@ impl Validator for ValidateApplicationsAccess {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
Ok(q.first(&mut c).await?)
|
Ok(q.first(&mut get_async_db_conn().await?).await?)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -804,7 +779,6 @@ impl ValidateApplicationAccess {
|
|||||||
#[async_trait]
|
#[async_trait]
|
||||||
impl Validator for ValidateApplicationAccess {
|
impl Validator for ValidateApplicationAccess {
|
||||||
async fn validate_user(&self, id: &Uuid) -> Result<i64, Error> {
|
async fn validate_user(&self, id: &Uuid) -> Result<i64, Error> {
|
||||||
let mut c = get_async_db_conn().await?;
|
|
||||||
let mut q = user::dsl::user
|
let mut q = user::dsl::user
|
||||||
.select(dsl::count_star())
|
.select(dsl::count_star())
|
||||||
.filter(user::dsl::id.eq(id).and(user::dsl::is_active.eq(true)))
|
.filter(user::dsl::id.eq(id).and(user::dsl::is_active.eq(true)))
|
||||||
@ -858,11 +832,10 @@ impl Validator for ValidateApplicationAccess {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
Ok(q.first(&mut c).await?)
|
Ok(q.first(&mut get_async_db_conn().await?).await?)
|
||||||
}
|
}
|
||||||
|
|
||||||
async fn validate_key(&self, id: &Uuid) -> Result<i64, Error> {
|
async fn validate_key(&self, id: &Uuid) -> Result<i64, Error> {
|
||||||
let mut c = get_async_db_conn().await?;
|
|
||||||
let mut q = api_key::dsl::api_key
|
let mut q = api_key::dsl::api_key
|
||||||
.select(dsl::count_star())
|
.select(dsl::count_star())
|
||||||
.filter(api_key::dsl::id.eq(id))
|
.filter(api_key::dsl::id.eq(id))
|
||||||
@ -885,7 +858,7 @@ impl Validator for ValidateApplicationAccess {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
Ok(q.first(&mut c).await?)
|
Ok(q.first(&mut get_async_db_conn().await?).await?)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -902,7 +875,6 @@ impl ValidateDeviceProfileTemplatesAccess {
|
|||||||
#[async_trait]
|
#[async_trait]
|
||||||
impl Validator for ValidateDeviceProfileTemplatesAccess {
|
impl Validator for ValidateDeviceProfileTemplatesAccess {
|
||||||
async fn validate_user(&self, id: &Uuid) -> Result<i64, Error> {
|
async fn validate_user(&self, id: &Uuid) -> Result<i64, Error> {
|
||||||
let mut c = get_async_db_conn().await?;
|
|
||||||
let mut q = user::dsl::user
|
let mut q = user::dsl::user
|
||||||
.select(dsl::count_star())
|
.select(dsl::count_star())
|
||||||
.filter(user::dsl::id.eq(id).and(user::dsl::is_active.eq(true)))
|
.filter(user::dsl::id.eq(id).and(user::dsl::is_active.eq(true)))
|
||||||
@ -920,11 +892,10 @@ impl Validator for ValidateDeviceProfileTemplatesAccess {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
Ok(q.first(&mut c).await?)
|
Ok(q.first(&mut get_async_db_conn().await?).await?)
|
||||||
}
|
}
|
||||||
|
|
||||||
async fn validate_key(&self, id: &Uuid) -> Result<i64, Error> {
|
async fn validate_key(&self, id: &Uuid) -> Result<i64, Error> {
|
||||||
let mut c = get_async_db_conn().await?;
|
|
||||||
let mut q = api_key::dsl::api_key
|
let mut q = api_key::dsl::api_key
|
||||||
.select(dsl::count_star())
|
.select(dsl::count_star())
|
||||||
.find(id)
|
.find(id)
|
||||||
@ -942,7 +913,7 @@ impl Validator for ValidateDeviceProfileTemplatesAccess {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
Ok(q.first(&mut c).await?)
|
Ok(q.first(&mut get_async_db_conn().await?).await?)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -959,7 +930,6 @@ impl ValidateDeviceProfileTemplateAccess {
|
|||||||
#[async_trait]
|
#[async_trait]
|
||||||
impl Validator for ValidateDeviceProfileTemplateAccess {
|
impl Validator for ValidateDeviceProfileTemplateAccess {
|
||||||
async fn validate_user(&self, id: &Uuid) -> Result<i64, Error> {
|
async fn validate_user(&self, id: &Uuid) -> Result<i64, Error> {
|
||||||
let mut c = get_async_db_conn().await?;
|
|
||||||
let mut q = user::dsl::user
|
let mut q = user::dsl::user
|
||||||
.select(dsl::count_star())
|
.select(dsl::count_star())
|
||||||
.filter(user::dsl::id.eq(id).and(user::dsl::is_active.eq(true)))
|
.filter(user::dsl::id.eq(id).and(user::dsl::is_active.eq(true)))
|
||||||
@ -977,11 +947,10 @@ impl Validator for ValidateDeviceProfileTemplateAccess {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
Ok(q.first(&mut c).await?)
|
Ok(q.first(&mut get_async_db_conn().await?).await?)
|
||||||
}
|
}
|
||||||
|
|
||||||
async fn validate_key(&self, id: &Uuid) -> Result<i64, Error> {
|
async fn validate_key(&self, id: &Uuid) -> Result<i64, Error> {
|
||||||
let mut c = get_async_db_conn().await?;
|
|
||||||
let mut q = api_key::dsl::api_key
|
let mut q = api_key::dsl::api_key
|
||||||
.select(dsl::count_star())
|
.select(dsl::count_star())
|
||||||
.find(id)
|
.find(id)
|
||||||
@ -999,7 +968,7 @@ impl Validator for ValidateDeviceProfileTemplateAccess {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
Ok(q.first(&mut c).await?)
|
Ok(q.first(&mut get_async_db_conn().await?).await?)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1017,7 +986,6 @@ impl ValidateDeviceProfilesAccess {
|
|||||||
#[async_trait]
|
#[async_trait]
|
||||||
impl Validator for ValidateDeviceProfilesAccess {
|
impl Validator for ValidateDeviceProfilesAccess {
|
||||||
async fn validate_user(&self, id: &Uuid) -> Result<i64, Error> {
|
async fn validate_user(&self, id: &Uuid) -> Result<i64, Error> {
|
||||||
let mut c = get_async_db_conn().await?;
|
|
||||||
let mut q = user::dsl::user
|
let mut q = user::dsl::user
|
||||||
.select(dsl::count_star())
|
.select(dsl::count_star())
|
||||||
.filter(user::dsl::id.eq(id).and(user::dsl::is_active.eq(true)))
|
.filter(user::dsl::id.eq(id).and(user::dsl::is_active.eq(true)))
|
||||||
@ -1061,11 +1029,10 @@ impl Validator for ValidateDeviceProfilesAccess {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
Ok(q.first(&mut c).await?)
|
Ok(q.first(&mut get_async_db_conn().await?).await?)
|
||||||
}
|
}
|
||||||
|
|
||||||
async fn validate_key(&self, id: &Uuid) -> Result<i64, Error> {
|
async fn validate_key(&self, id: &Uuid) -> Result<i64, Error> {
|
||||||
let mut c = get_async_db_conn().await?;
|
|
||||||
let mut q = api_key::dsl::api_key
|
let mut q = api_key::dsl::api_key
|
||||||
.select(dsl::count_star())
|
.select(dsl::count_star())
|
||||||
.find(id)
|
.find(id)
|
||||||
@ -1086,7 +1053,7 @@ impl Validator for ValidateDeviceProfilesAccess {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
Ok(q.first(&mut c).await?)
|
Ok(q.first(&mut get_async_db_conn().await?).await?)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1107,7 +1074,6 @@ impl ValidateDeviceProfileAccess {
|
|||||||
#[async_trait]
|
#[async_trait]
|
||||||
impl Validator for ValidateDeviceProfileAccess {
|
impl Validator for ValidateDeviceProfileAccess {
|
||||||
async fn validate_user(&self, id: &Uuid) -> Result<i64, Error> {
|
async fn validate_user(&self, id: &Uuid) -> Result<i64, Error> {
|
||||||
let mut c = get_async_db_conn().await?;
|
|
||||||
let mut q = user::dsl::user
|
let mut q = user::dsl::user
|
||||||
.select(dsl::count_star())
|
.select(dsl::count_star())
|
||||||
.filter(user::dsl::id.eq(id).and(user::dsl::is_active.eq(true)))
|
.filter(user::dsl::id.eq(id).and(user::dsl::is_active.eq(true)))
|
||||||
@ -1161,11 +1127,10 @@ impl Validator for ValidateDeviceProfileAccess {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
Ok(q.first(&mut c).await?)
|
Ok(q.first(&mut get_async_db_conn().await?).await?)
|
||||||
}
|
}
|
||||||
|
|
||||||
async fn validate_key(&self, id: &Uuid) -> Result<i64, Error> {
|
async fn validate_key(&self, id: &Uuid) -> Result<i64, Error> {
|
||||||
let mut c = get_async_db_conn().await?;
|
|
||||||
let mut q = api_key::dsl::api_key
|
let mut q = api_key::dsl::api_key
|
||||||
.select(dsl::count_star())
|
.select(dsl::count_star())
|
||||||
.filter(api_key::dsl::id.eq(id))
|
.filter(api_key::dsl::id.eq(id))
|
||||||
@ -1188,7 +1153,7 @@ impl Validator for ValidateDeviceProfileAccess {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
Ok(q.first(&mut c).await?)
|
Ok(q.first(&mut get_async_db_conn().await?).await?)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1209,7 +1174,6 @@ impl ValidateDevicesAccess {
|
|||||||
#[async_trait]
|
#[async_trait]
|
||||||
impl Validator for ValidateDevicesAccess {
|
impl Validator for ValidateDevicesAccess {
|
||||||
async fn validate_user(&self, id: &Uuid) -> Result<i64, Error> {
|
async fn validate_user(&self, id: &Uuid) -> Result<i64, Error> {
|
||||||
let mut c = get_async_db_conn().await?;
|
|
||||||
let mut q = user::dsl::user
|
let mut q = user::dsl::user
|
||||||
.select(dsl::count_star())
|
.select(dsl::count_star())
|
||||||
.filter(user::dsl::id.eq(id).and(user::dsl::is_active.eq(true)))
|
.filter(user::dsl::id.eq(id).and(user::dsl::is_active.eq(true)))
|
||||||
@ -1263,11 +1227,10 @@ impl Validator for ValidateDevicesAccess {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Ok(q.first(&mut c).await?)
|
Ok(q.first(&mut get_async_db_conn().await?).await?)
|
||||||
}
|
}
|
||||||
|
|
||||||
async fn validate_key(&self, id: &Uuid) -> Result<i64, Error> {
|
async fn validate_key(&self, id: &Uuid) -> Result<i64, Error> {
|
||||||
let mut c = get_async_db_conn().await?;
|
|
||||||
let mut q = api_key::dsl::api_key
|
let mut q = api_key::dsl::api_key
|
||||||
.select(dsl::count_star())
|
.select(dsl::count_star())
|
||||||
.filter(api_key::dsl::id.eq(id))
|
.filter(api_key::dsl::id.eq(id))
|
||||||
@ -1290,7 +1253,7 @@ impl Validator for ValidateDevicesAccess {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Ok(q.first(&mut c).await?)
|
Ok(q.first(&mut get_async_db_conn().await?).await?)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1308,7 +1271,6 @@ impl ValidateDeviceAccess {
|
|||||||
#[async_trait]
|
#[async_trait]
|
||||||
impl Validator for ValidateDeviceAccess {
|
impl Validator for ValidateDeviceAccess {
|
||||||
async fn validate_user(&self, id: &Uuid) -> Result<i64, Error> {
|
async fn validate_user(&self, id: &Uuid) -> Result<i64, Error> {
|
||||||
let mut c = get_async_db_conn().await?;
|
|
||||||
let mut q = user::dsl::user
|
let mut q = user::dsl::user
|
||||||
.select(dsl::count_star())
|
.select(dsl::count_star())
|
||||||
.filter(user::dsl::id.eq(id).and(user::dsl::is_active.eq(true)))
|
.filter(user::dsl::id.eq(id).and(user::dsl::is_active.eq(true)))
|
||||||
@ -1364,11 +1326,10 @@ impl Validator for ValidateDeviceAccess {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Ok(q.first(&mut c).await?)
|
Ok(q.first(&mut get_async_db_conn().await?).await?)
|
||||||
}
|
}
|
||||||
|
|
||||||
async fn validate_key(&self, id: &Uuid) -> Result<i64, Error> {
|
async fn validate_key(&self, id: &Uuid) -> Result<i64, Error> {
|
||||||
let mut c = get_async_db_conn().await?;
|
|
||||||
let mut q = api_key::dsl::api_key
|
let mut q = api_key::dsl::api_key
|
||||||
.select(dsl::count_star())
|
.select(dsl::count_star())
|
||||||
.filter(api_key::dsl::id.eq(id))
|
.filter(api_key::dsl::id.eq(id))
|
||||||
@ -1391,7 +1352,7 @@ impl Validator for ValidateDeviceAccess {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Ok(q.first(&mut c).await?)
|
Ok(q.first(&mut get_async_db_conn().await?).await?)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1409,7 +1370,6 @@ impl ValidateDeviceQueueAccess {
|
|||||||
#[async_trait]
|
#[async_trait]
|
||||||
impl Validator for ValidateDeviceQueueAccess {
|
impl Validator for ValidateDeviceQueueAccess {
|
||||||
async fn validate_user(&self, id: &Uuid) -> Result<i64, Error> {
|
async fn validate_user(&self, id: &Uuid) -> Result<i64, Error> {
|
||||||
let mut c = get_async_db_conn().await?;
|
|
||||||
let mut q = user::dsl::user
|
let mut q = user::dsl::user
|
||||||
.select(dsl::count_star())
|
.select(dsl::count_star())
|
||||||
.filter(user::dsl::id.eq(id).and(user::dsl::is_active.eq(true)))
|
.filter(user::dsl::id.eq(id).and(user::dsl::is_active.eq(true)))
|
||||||
@ -1440,11 +1400,10 @@ impl Validator for ValidateDeviceQueueAccess {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Ok(q.first(&mut c).await?)
|
Ok(q.first(&mut get_async_db_conn().await?).await?)
|
||||||
}
|
}
|
||||||
|
|
||||||
async fn validate_key(&self, id: &Uuid) -> Result<i64, Error> {
|
async fn validate_key(&self, id: &Uuid) -> Result<i64, Error> {
|
||||||
let mut c = get_async_db_conn().await?;
|
|
||||||
let mut q = api_key::dsl::api_key
|
let mut q = api_key::dsl::api_key
|
||||||
.select(dsl::count_star())
|
.select(dsl::count_star())
|
||||||
.filter(api_key::dsl::id.eq(id))
|
.filter(api_key::dsl::id.eq(id))
|
||||||
@ -1467,7 +1426,7 @@ impl Validator for ValidateDeviceQueueAccess {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Ok(q.first(&mut c).await?)
|
Ok(q.first(&mut get_async_db_conn().await?).await?)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1485,7 +1444,6 @@ impl ValidateGatewaysAccess {
|
|||||||
#[async_trait]
|
#[async_trait]
|
||||||
impl Validator for ValidateGatewaysAccess {
|
impl Validator for ValidateGatewaysAccess {
|
||||||
async fn validate_user(&self, id: &Uuid) -> Result<i64, Error> {
|
async fn validate_user(&self, id: &Uuid) -> Result<i64, Error> {
|
||||||
let mut c = get_async_db_conn().await?;
|
|
||||||
let mut q = user::dsl::user
|
let mut q = user::dsl::user
|
||||||
.select(dsl::count_star())
|
.select(dsl::count_star())
|
||||||
.filter(user::dsl::id.eq(id).and(user::dsl::is_active.eq(true)))
|
.filter(user::dsl::id.eq(id).and(user::dsl::is_active.eq(true)))
|
||||||
@ -1529,11 +1487,10 @@ impl Validator for ValidateGatewaysAccess {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Ok(q.first(&mut c).await?)
|
Ok(q.first(&mut get_async_db_conn().await?).await?)
|
||||||
}
|
}
|
||||||
|
|
||||||
async fn validate_key(&self, id: &Uuid) -> Result<i64, Error> {
|
async fn validate_key(&self, id: &Uuid) -> Result<i64, Error> {
|
||||||
let mut c = get_async_db_conn().await?;
|
|
||||||
let mut q = api_key::dsl::api_key
|
let mut q = api_key::dsl::api_key
|
||||||
.select(dsl::count_star())
|
.select(dsl::count_star())
|
||||||
.find(id)
|
.find(id)
|
||||||
@ -1554,7 +1511,7 @@ impl Validator for ValidateGatewaysAccess {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Ok(q.first(&mut c).await?)
|
Ok(q.first(&mut get_async_db_conn().await?).await?)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1572,7 +1529,6 @@ impl ValidateGatewayAccess {
|
|||||||
#[async_trait]
|
#[async_trait]
|
||||||
impl Validator for ValidateGatewayAccess {
|
impl Validator for ValidateGatewayAccess {
|
||||||
async fn validate_user(&self, id: &Uuid) -> Result<i64, Error> {
|
async fn validate_user(&self, id: &Uuid) -> Result<i64, Error> {
|
||||||
let mut c = get_async_db_conn().await?;
|
|
||||||
let mut q = user::dsl::user
|
let mut q = user::dsl::user
|
||||||
.select(dsl::count_star())
|
.select(dsl::count_star())
|
||||||
.filter(user::dsl::id.eq(id).and(user::dsl::is_active.eq(true)))
|
.filter(user::dsl::id.eq(id).and(user::dsl::is_active.eq(true)))
|
||||||
@ -1626,11 +1582,10 @@ impl Validator for ValidateGatewayAccess {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Ok(q.first(&mut c).await?)
|
Ok(q.first(&mut get_async_db_conn().await?).await?)
|
||||||
}
|
}
|
||||||
|
|
||||||
async fn validate_key(&self, id: &Uuid) -> Result<i64, Error> {
|
async fn validate_key(&self, id: &Uuid) -> Result<i64, Error> {
|
||||||
let mut c = get_async_db_conn().await?;
|
|
||||||
let mut q = api_key::dsl::api_key
|
let mut q = api_key::dsl::api_key
|
||||||
.select(dsl::count_star())
|
.select(dsl::count_star())
|
||||||
.filter(api_key::dsl::id.eq(id))
|
.filter(api_key::dsl::id.eq(id))
|
||||||
@ -1654,7 +1609,7 @@ impl Validator for ValidateGatewayAccess {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Ok(q.first(&mut c).await?)
|
Ok(q.first(&mut get_async_db_conn().await?).await?)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1675,7 +1630,6 @@ impl ValidateMulticastGroupsAccess {
|
|||||||
#[async_trait]
|
#[async_trait]
|
||||||
impl Validator for ValidateMulticastGroupsAccess {
|
impl Validator for ValidateMulticastGroupsAccess {
|
||||||
async fn validate_user(&self, id: &Uuid) -> Result<i64, Error> {
|
async fn validate_user(&self, id: &Uuid) -> Result<i64, Error> {
|
||||||
let mut c = get_async_db_conn().await?;
|
|
||||||
let mut q = user::dsl::user
|
let mut q = user::dsl::user
|
||||||
.select(dsl::count_star())
|
.select(dsl::count_star())
|
||||||
.filter(user::dsl::id.eq(id).and(user::dsl::is_active.eq(true)))
|
.filter(user::dsl::id.eq(id).and(user::dsl::is_active.eq(true)))
|
||||||
@ -1729,11 +1683,10 @@ impl Validator for ValidateMulticastGroupsAccess {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Ok(q.first(&mut c).await?)
|
Ok(q.first(&mut get_async_db_conn().await?).await?)
|
||||||
}
|
}
|
||||||
|
|
||||||
async fn validate_key(&self, id: &Uuid) -> Result<i64, Error> {
|
async fn validate_key(&self, id: &Uuid) -> Result<i64, Error> {
|
||||||
let mut c = get_async_db_conn().await?;
|
|
||||||
let mut q = api_key::dsl::api_key
|
let mut q = api_key::dsl::api_key
|
||||||
.select(dsl::count_star())
|
.select(dsl::count_star())
|
||||||
.filter(api_key::dsl::id.eq(id))
|
.filter(api_key::dsl::id.eq(id))
|
||||||
@ -1756,7 +1709,7 @@ impl Validator for ValidateMulticastGroupsAccess {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Ok(q.first(&mut c).await?)
|
Ok(q.first(&mut get_async_db_conn().await?).await?)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1777,7 +1730,6 @@ impl ValidateMulticastGroupAccess {
|
|||||||
#[async_trait]
|
#[async_trait]
|
||||||
impl Validator for ValidateMulticastGroupAccess {
|
impl Validator for ValidateMulticastGroupAccess {
|
||||||
async fn validate_user(&self, id: &Uuid) -> Result<i64, Error> {
|
async fn validate_user(&self, id: &Uuid) -> Result<i64, Error> {
|
||||||
let mut c = get_async_db_conn().await?;
|
|
||||||
let mut q = user::dsl::user
|
let mut q = user::dsl::user
|
||||||
.select(dsl::count_star())
|
.select(dsl::count_star())
|
||||||
.filter(user::dsl::id.eq(id).and(user::dsl::is_active.eq(true)))
|
.filter(user::dsl::id.eq(id).and(user::dsl::is_active.eq(true)))
|
||||||
@ -1833,11 +1785,10 @@ impl Validator for ValidateMulticastGroupAccess {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Ok(q.first(&mut c).await?)
|
Ok(q.first(&mut get_async_db_conn().await?).await?)
|
||||||
}
|
}
|
||||||
|
|
||||||
async fn validate_key(&self, id: &Uuid) -> Result<i64, Error> {
|
async fn validate_key(&self, id: &Uuid) -> Result<i64, Error> {
|
||||||
let mut c = get_async_db_conn().await?;
|
|
||||||
let mut q = api_key::dsl::api_key
|
let mut q = api_key::dsl::api_key
|
||||||
.select(dsl::count_star())
|
.select(dsl::count_star())
|
||||||
.filter(api_key::dsl::id.eq(id))
|
.filter(api_key::dsl::id.eq(id))
|
||||||
@ -1862,7 +1813,7 @@ impl Validator for ValidateMulticastGroupAccess {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Ok(q.first(&mut c).await?)
|
Ok(q.first(&mut get_async_db_conn().await?).await?)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1883,7 +1834,6 @@ impl ValidateMulticastGroupQueueAccess {
|
|||||||
#[async_trait]
|
#[async_trait]
|
||||||
impl Validator for ValidateMulticastGroupQueueAccess {
|
impl Validator for ValidateMulticastGroupQueueAccess {
|
||||||
async fn validate_user(&self, id: &Uuid) -> Result<i64, Error> {
|
async fn validate_user(&self, id: &Uuid) -> Result<i64, Error> {
|
||||||
let mut c = get_async_db_conn().await?;
|
|
||||||
let mut q = user::dsl::user
|
let mut q = user::dsl::user
|
||||||
.select(dsl::count_star())
|
.select(dsl::count_star())
|
||||||
.filter(user::dsl::id.eq(id).and(user::dsl::is_active.eq(true)))
|
.filter(user::dsl::id.eq(id).and(user::dsl::is_active.eq(true)))
|
||||||
@ -1939,11 +1889,10 @@ impl Validator for ValidateMulticastGroupQueueAccess {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Ok(q.first(&mut c).await?)
|
Ok(q.first(&mut get_async_db_conn().await?).await?)
|
||||||
}
|
}
|
||||||
|
|
||||||
async fn validate_key(&self, id: &Uuid) -> Result<i64, Error> {
|
async fn validate_key(&self, id: &Uuid) -> Result<i64, Error> {
|
||||||
let mut c = get_async_db_conn().await?;
|
|
||||||
let mut q = api_key::dsl::api_key
|
let mut q = api_key::dsl::api_key
|
||||||
.select(dsl::count_star())
|
.select(dsl::count_star())
|
||||||
.filter(api_key::dsl::id.eq(id))
|
.filter(api_key::dsl::id.eq(id))
|
||||||
@ -1968,7 +1917,7 @@ impl Validator for ValidateMulticastGroupQueueAccess {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Ok(q.first(&mut c).await?)
|
Ok(q.first(&mut get_async_db_conn().await?).await?)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -49,9 +49,8 @@ async fn health_handler() -> Result<impl warp::Reply, Infallible> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
async fn _health_handler() -> Result<()> {
|
async fn _health_handler() -> Result<()> {
|
||||||
let mut c = get_async_db_conn().await?;
|
|
||||||
diesel::sql_query("select 1")
|
diesel::sql_query("select 1")
|
||||||
.execute(&mut c)
|
.execute(&mut get_async_db_conn().await?)
|
||||||
.await
|
.await
|
||||||
.context("PostgreSQL connection error")?;
|
.context("PostgreSQL connection error")?;
|
||||||
|
|
||||||
|
@ -51,10 +51,9 @@ pub struct Filters {
|
|||||||
pub async fn create(ak: ApiKey) -> Result<ApiKey, Error> {
|
pub async fn create(ak: ApiKey) -> Result<ApiKey, Error> {
|
||||||
ak.validate()?;
|
ak.validate()?;
|
||||||
|
|
||||||
let mut c = get_async_db_conn().await?;
|
|
||||||
let ak: ApiKey = diesel::insert_into(api_key::table)
|
let ak: ApiKey = diesel::insert_into(api_key::table)
|
||||||
.values(&ak)
|
.values(&ak)
|
||||||
.get_result(&mut c)
|
.get_result(&mut get_async_db_conn().await?)
|
||||||
.await
|
.await
|
||||||
.map_err(|e| error::Error::from_diesel(e, ak.id.to_string()))?;
|
.map_err(|e| error::Error::from_diesel(e, ak.id.to_string()))?;
|
||||||
info!(id = %ak.id, "Api-key created");
|
info!(id = %ak.id, "Api-key created");
|
||||||
@ -62,9 +61,8 @@ pub async fn create(ak: ApiKey) -> Result<ApiKey, Error> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub async fn delete(id: &Uuid) -> Result<(), Error> {
|
pub async fn delete(id: &Uuid) -> Result<(), Error> {
|
||||||
let mut c = get_async_db_conn().await?;
|
|
||||||
let ra = diesel::delete(api_key::dsl::api_key.find(&id))
|
let ra = diesel::delete(api_key::dsl::api_key.find(&id))
|
||||||
.execute(&mut c)
|
.execute(&mut get_async_db_conn().await?)
|
||||||
.await?;
|
.await?;
|
||||||
if ra == 0 {
|
if ra == 0 {
|
||||||
return Err(Error::NotFound(id.to_string()));
|
return Err(Error::NotFound(id.to_string()));
|
||||||
@ -74,8 +72,6 @@ pub async fn delete(id: &Uuid) -> Result<(), Error> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub async fn get_count(filters: &Filters) -> Result<i64, Error> {
|
pub async fn get_count(filters: &Filters) -> Result<i64, Error> {
|
||||||
let mut c = get_async_db_conn().await?;
|
|
||||||
|
|
||||||
let mut q = api_key::dsl::api_key
|
let mut q = api_key::dsl::api_key
|
||||||
.select(dsl::count_star())
|
.select(dsl::count_star())
|
||||||
.filter(api_key::dsl::is_admin.eq(filters.is_admin))
|
.filter(api_key::dsl::is_admin.eq(filters.is_admin))
|
||||||
@ -85,12 +81,10 @@ pub async fn get_count(filters: &Filters) -> Result<i64, Error> {
|
|||||||
q = q.filter(api_key::dsl::tenant_id.eq(tenant_id));
|
q = q.filter(api_key::dsl::tenant_id.eq(tenant_id));
|
||||||
}
|
}
|
||||||
|
|
||||||
Ok(q.first(&mut c).await?)
|
Ok(q.first(&mut get_async_db_conn().await?).await?)
|
||||||
}
|
}
|
||||||
|
|
||||||
pub async fn list(limit: i64, offset: i64, filters: &Filters) -> Result<Vec<ApiKey>, Error> {
|
pub async fn list(limit: i64, offset: i64, filters: &Filters) -> Result<Vec<ApiKey>, Error> {
|
||||||
let mut c = get_async_db_conn().await?;
|
|
||||||
|
|
||||||
let mut q = api_key::dsl::api_key
|
let mut q = api_key::dsl::api_key
|
||||||
.filter(api_key::dsl::is_admin.eq(filters.is_admin))
|
.filter(api_key::dsl::is_admin.eq(filters.is_admin))
|
||||||
.into_boxed();
|
.into_boxed();
|
||||||
@ -103,7 +97,7 @@ pub async fn list(limit: i64, offset: i64, filters: &Filters) -> Result<Vec<ApiK
|
|||||||
.order_by(api_key::dsl::name)
|
.order_by(api_key::dsl::name)
|
||||||
.limit(limit)
|
.limit(limit)
|
||||||
.offset(offset)
|
.offset(offset)
|
||||||
.load(&mut c)
|
.load(&mut get_async_db_conn().await?)
|
||||||
.await?;
|
.await?;
|
||||||
Ok(items)
|
Ok(items)
|
||||||
}
|
}
|
||||||
@ -123,10 +117,9 @@ pub mod test {
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub async fn get(id: &Uuid) -> Result<ApiKey, Error> {
|
pub async fn get(id: &Uuid) -> Result<ApiKey, Error> {
|
||||||
let mut c = get_async_db_conn().await?;
|
|
||||||
api_key::dsl::api_key
|
api_key::dsl::api_key
|
||||||
.find(&id)
|
.find(&id)
|
||||||
.first(&mut c)
|
.first(&mut get_async_db_conn().await?)
|
||||||
.await
|
.await
|
||||||
.map_err(|e| error::Error::from_diesel(e, id.to_string()))
|
.map_err(|e| error::Error::from_diesel(e, id.to_string()))
|
||||||
}
|
}
|
||||||
|
@ -292,10 +292,9 @@ impl Default for Integration {
|
|||||||
pub async fn create(a: Application) -> Result<Application, Error> {
|
pub async fn create(a: Application) -> Result<Application, Error> {
|
||||||
a.validate()?;
|
a.validate()?;
|
||||||
|
|
||||||
let mut c = get_async_db_conn().await?;
|
|
||||||
let a: Application = diesel::insert_into(application::table)
|
let a: Application = diesel::insert_into(application::table)
|
||||||
.values(&a)
|
.values(&a)
|
||||||
.get_result(&mut c)
|
.get_result(&mut get_async_db_conn().await?)
|
||||||
.await
|
.await
|
||||||
.map_err(|e| Error::from_diesel(e, a.id.to_string()))?;
|
.map_err(|e| Error::from_diesel(e, a.id.to_string()))?;
|
||||||
|
|
||||||
@ -305,10 +304,9 @@ pub async fn create(a: Application) -> Result<Application, Error> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub async fn get(id: &Uuid) -> Result<Application, Error> {
|
pub async fn get(id: &Uuid) -> Result<Application, Error> {
|
||||||
let mut c = get_async_db_conn().await?;
|
|
||||||
let a = application::dsl::application
|
let a = application::dsl::application
|
||||||
.find(&id)
|
.find(&id)
|
||||||
.first(&mut c)
|
.first(&mut get_async_db_conn().await?)
|
||||||
.await
|
.await
|
||||||
.map_err(|e| Error::from_diesel(e, id.to_string()))?;
|
.map_err(|e| Error::from_diesel(e, id.to_string()))?;
|
||||||
Ok(a)
|
Ok(a)
|
||||||
@ -316,7 +314,7 @@ pub async fn get(id: &Uuid) -> Result<Application, Error> {
|
|||||||
|
|
||||||
pub async fn update(a: Application) -> Result<Application, Error> {
|
pub async fn update(a: Application) -> Result<Application, Error> {
|
||||||
a.validate()?;
|
a.validate()?;
|
||||||
let mut c = get_async_db_conn().await?;
|
|
||||||
let a: Application = diesel::update(application::dsl::application.find(&a.id))
|
let a: Application = diesel::update(application::dsl::application.find(&a.id))
|
||||||
.set((
|
.set((
|
||||||
application::updated_at.eq(Utc::now()),
|
application::updated_at.eq(Utc::now()),
|
||||||
@ -324,7 +322,7 @@ pub async fn update(a: Application) -> Result<Application, Error> {
|
|||||||
application::description.eq(&a.description),
|
application::description.eq(&a.description),
|
||||||
application::tags.eq(&a.tags),
|
application::tags.eq(&a.tags),
|
||||||
))
|
))
|
||||||
.get_result(&mut c)
|
.get_result(&mut get_async_db_conn().await?)
|
||||||
.await
|
.await
|
||||||
.map_err(|e| Error::from_diesel(e, a.id.to_string()))?;
|
.map_err(|e| Error::from_diesel(e, a.id.to_string()))?;
|
||||||
|
|
||||||
@ -337,10 +335,9 @@ pub async fn update(a: Application) -> Result<Application, Error> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub async fn update_mqtt_cls_cert(id: &Uuid, cert: &[u8]) -> Result<Application, Error> {
|
pub async fn update_mqtt_cls_cert(id: &Uuid, cert: &[u8]) -> Result<Application, Error> {
|
||||||
let mut c = get_async_db_conn().await?;
|
|
||||||
let app: Application = diesel::update(application::dsl::application.find(&id))
|
let app: Application = diesel::update(application::dsl::application.find(&id))
|
||||||
.set(application::mqtt_tls_cert.eq(cert))
|
.set(application::mqtt_tls_cert.eq(cert))
|
||||||
.get_result(&mut c)
|
.get_result(&mut get_async_db_conn().await?)
|
||||||
.await
|
.await
|
||||||
.map_err(|e| Error::from_diesel(e, id.to_string()))?;
|
.map_err(|e| Error::from_diesel(e, id.to_string()))?;
|
||||||
|
|
||||||
@ -353,9 +350,8 @@ pub async fn update_mqtt_cls_cert(id: &Uuid, cert: &[u8]) -> Result<Application,
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub async fn delete(id: &Uuid) -> Result<(), Error> {
|
pub async fn delete(id: &Uuid) -> Result<(), Error> {
|
||||||
let mut c = get_async_db_conn().await?;
|
|
||||||
let ra = diesel::delete(application::dsl::application.find(&id))
|
let ra = diesel::delete(application::dsl::application.find(&id))
|
||||||
.execute(&mut c)
|
.execute(&mut get_async_db_conn().await?)
|
||||||
.await?;
|
.await?;
|
||||||
if ra == 0 {
|
if ra == 0 {
|
||||||
return Err(Error::NotFound(id.to_string()));
|
return Err(Error::NotFound(id.to_string()));
|
||||||
@ -370,7 +366,6 @@ pub async fn delete(id: &Uuid) -> Result<(), Error> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub async fn get_count(filters: &Filters) -> Result<i64, Error> {
|
pub async fn get_count(filters: &Filters) -> Result<i64, Error> {
|
||||||
let mut c = get_async_db_conn().await?;
|
|
||||||
let mut q = application::dsl::application
|
let mut q = application::dsl::application
|
||||||
.select(dsl::count_star())
|
.select(dsl::count_star())
|
||||||
.into_boxed();
|
.into_boxed();
|
||||||
@ -383,7 +378,7 @@ pub async fn get_count(filters: &Filters) -> Result<i64, Error> {
|
|||||||
q = q.filter(application::dsl::name.ilike(format!("%{}%", search)));
|
q = q.filter(application::dsl::name.ilike(format!("%{}%", search)));
|
||||||
}
|
}
|
||||||
|
|
||||||
Ok(q.first(&mut c).await?)
|
Ok(q.first(&mut get_async_db_conn().await?).await?)
|
||||||
}
|
}
|
||||||
|
|
||||||
pub async fn list(
|
pub async fn list(
|
||||||
@ -391,7 +386,6 @@ pub async fn list(
|
|||||||
offset: i64,
|
offset: i64,
|
||||||
filters: &Filters,
|
filters: &Filters,
|
||||||
) -> Result<Vec<ApplicationListItem>, Error> {
|
) -> Result<Vec<ApplicationListItem>, Error> {
|
||||||
let mut c = get_async_db_conn().await?;
|
|
||||||
let mut q = application::dsl::application
|
let mut q = application::dsl::application
|
||||||
.select((
|
.select((
|
||||||
application::id,
|
application::id,
|
||||||
@ -414,16 +408,15 @@ pub async fn list(
|
|||||||
.order_by(application::dsl::name)
|
.order_by(application::dsl::name)
|
||||||
.limit(limit)
|
.limit(limit)
|
||||||
.offset(offset)
|
.offset(offset)
|
||||||
.load(&mut c)
|
.load(&mut get_async_db_conn().await?)
|
||||||
.await?;
|
.await?;
|
||||||
Ok(items)
|
Ok(items)
|
||||||
}
|
}
|
||||||
|
|
||||||
pub async fn create_integration(i: Integration) -> Result<Integration, Error> {
|
pub async fn create_integration(i: Integration) -> Result<Integration, Error> {
|
||||||
let mut c = get_async_db_conn().await?;
|
|
||||||
let i: Integration = diesel::insert_into(application_integration::table)
|
let i: Integration = diesel::insert_into(application_integration::table)
|
||||||
.values(&i)
|
.values(&i)
|
||||||
.get_result(&mut c)
|
.get_result(&mut get_async_db_conn().await?)
|
||||||
.await
|
.await
|
||||||
.map_err(|e| Error::from_diesel(e, i.kind.to_string()))?;
|
.map_err(|e| Error::from_diesel(e, i.kind.to_string()))?;
|
||||||
|
|
||||||
@ -435,14 +428,13 @@ pub async fn get_integration(
|
|||||||
application_id: &Uuid,
|
application_id: &Uuid,
|
||||||
kind: IntegrationKind,
|
kind: IntegrationKind,
|
||||||
) -> Result<Integration, Error> {
|
) -> Result<Integration, Error> {
|
||||||
let mut c = get_async_db_conn().await?;
|
|
||||||
let mut i: Integration = application_integration::dsl::application_integration
|
let mut i: Integration = application_integration::dsl::application_integration
|
||||||
.filter(
|
.filter(
|
||||||
application_integration::dsl::application_id
|
application_integration::dsl::application_id
|
||||||
.eq(application_id)
|
.eq(application_id)
|
||||||
.and(application_integration::dsl::kind.eq(kind)),
|
.and(application_integration::dsl::kind.eq(kind)),
|
||||||
)
|
)
|
||||||
.first(&mut c)
|
.first(&mut get_async_db_conn().await?)
|
||||||
.await
|
.await
|
||||||
.map_err(|e| Error::from_diesel(e, application_id.to_string()))?;
|
.map_err(|e| Error::from_diesel(e, application_id.to_string()))?;
|
||||||
|
|
||||||
@ -462,7 +454,6 @@ pub async fn get_integration(
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub async fn update_integration(i: Integration) -> Result<Integration, Error> {
|
pub async fn update_integration(i: Integration) -> Result<Integration, Error> {
|
||||||
let mut c = get_async_db_conn().await?;
|
|
||||||
let i: Integration = diesel::update(
|
let i: Integration = diesel::update(
|
||||||
application_integration::dsl::application_integration.filter(
|
application_integration::dsl::application_integration.filter(
|
||||||
application_integration::dsl::application_id
|
application_integration::dsl::application_id
|
||||||
@ -474,7 +465,7 @@ pub async fn update_integration(i: Integration) -> Result<Integration, Error> {
|
|||||||
application_integration::updated_at.eq(Utc::now()),
|
application_integration::updated_at.eq(Utc::now()),
|
||||||
application_integration::configuration.eq(&i.configuration),
|
application_integration::configuration.eq(&i.configuration),
|
||||||
))
|
))
|
||||||
.get_result(&mut c)
|
.get_result(&mut get_async_db_conn().await?)
|
||||||
.await
|
.await
|
||||||
.map_err(|e| Error::from_diesel(e, i.application_id.to_string()))?;
|
.map_err(|e| Error::from_diesel(e, i.application_id.to_string()))?;
|
||||||
|
|
||||||
@ -484,7 +475,6 @@ pub async fn update_integration(i: Integration) -> Result<Integration, Error> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub async fn delete_integration(application_id: &Uuid, kind: IntegrationKind) -> Result<(), Error> {
|
pub async fn delete_integration(application_id: &Uuid, kind: IntegrationKind) -> Result<(), Error> {
|
||||||
let mut c = get_async_db_conn().await?;
|
|
||||||
let ra = diesel::delete(
|
let ra = diesel::delete(
|
||||||
application_integration::dsl::application_integration.filter(
|
application_integration::dsl::application_integration.filter(
|
||||||
application_integration::dsl::application_id
|
application_integration::dsl::application_id
|
||||||
@ -492,7 +482,7 @@ pub async fn delete_integration(application_id: &Uuid, kind: IntegrationKind) ->
|
|||||||
.and(application_integration::dsl::kind.eq(&kind)),
|
.and(application_integration::dsl::kind.eq(&kind)),
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
.execute(&mut c)
|
.execute(&mut get_async_db_conn().await?)
|
||||||
.await?;
|
.await?;
|
||||||
|
|
||||||
if ra == 0 {
|
if ra == 0 {
|
||||||
@ -506,11 +496,10 @@ pub async fn delete_integration(application_id: &Uuid, kind: IntegrationKind) ->
|
|||||||
pub async fn get_integrations_for_application(
|
pub async fn get_integrations_for_application(
|
||||||
application_id: &Uuid,
|
application_id: &Uuid,
|
||||||
) -> Result<Vec<Integration>, Error> {
|
) -> Result<Vec<Integration>, Error> {
|
||||||
let mut c = get_async_db_conn().await?;
|
|
||||||
let items: Vec<Integration> = application_integration::dsl::application_integration
|
let items: Vec<Integration> = application_integration::dsl::application_integration
|
||||||
.filter(application_integration::dsl::application_id.eq(&application_id))
|
.filter(application_integration::dsl::application_id.eq(&application_id))
|
||||||
.order_by(application_integration::dsl::kind)
|
.order_by(application_integration::dsl::kind)
|
||||||
.load(&mut c)
|
.load(&mut get_async_db_conn().await?)
|
||||||
.await?;
|
.await?;
|
||||||
Ok(items)
|
Ok(items)
|
||||||
}
|
}
|
||||||
@ -522,7 +511,6 @@ pub async fn get_measurement_keys(application_id: &Uuid) -> Result<Vec<String>,
|
|||||||
pub key: String,
|
pub key: String,
|
||||||
}
|
}
|
||||||
|
|
||||||
let mut c = get_async_db_conn().await?;
|
|
||||||
let keys: Vec<Measurement> = diesel::sql_query(
|
let keys: Vec<Measurement> = diesel::sql_query(
|
||||||
r#"
|
r#"
|
||||||
select
|
select
|
||||||
@ -538,7 +526,7 @@ pub async fn get_measurement_keys(application_id: &Uuid) -> Result<Vec<String>,
|
|||||||
"#,
|
"#,
|
||||||
)
|
)
|
||||||
.bind::<diesel::sql_types::Uuid, _>(application_id)
|
.bind::<diesel::sql_types::Uuid, _>(application_id)
|
||||||
.load(&mut c)
|
.load(&mut get_async_db_conn().await?)
|
||||||
.await
|
.await
|
||||||
.map_err(|e| Error::from_diesel(e, application_id.to_string()))?;
|
.map_err(|e| Error::from_diesel(e, application_id.to_string()))?;
|
||||||
Ok(keys.iter().map(|k| k.key.clone()).collect())
|
Ok(keys.iter().map(|k| k.key.clone()).collect())
|
||||||
|
@ -229,10 +229,9 @@ pub async fn create(d: Device) -> Result<Device, Error> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub async fn get(dev_eui: &EUI64) -> Result<Device, Error> {
|
pub async fn get(dev_eui: &EUI64) -> Result<Device, Error> {
|
||||||
let mut c = get_async_db_conn().await?;
|
|
||||||
let d = device::dsl::device
|
let d = device::dsl::device
|
||||||
.find(&dev_eui)
|
.find(&dev_eui)
|
||||||
.first(&mut c)
|
.first(&mut get_async_db_conn().await?)
|
||||||
.await
|
.await
|
||||||
.map_err(|e| Error::from_diesel(e, dev_eui.to_string()))?;
|
.map_err(|e| Error::from_diesel(e, dev_eui.to_string()))?;
|
||||||
Ok(d)
|
Ok(d)
|
||||||
@ -240,7 +239,7 @@ pub async fn get(dev_eui: &EUI64) -> Result<Device, Error> {
|
|||||||
|
|
||||||
pub async fn update(d: Device) -> Result<Device, Error> {
|
pub async fn update(d: Device) -> Result<Device, Error> {
|
||||||
d.validate()?;
|
d.validate()?;
|
||||||
let mut c = get_async_db_conn().await?;
|
|
||||||
let d: Device = diesel::update(device::dsl::device.find(&d.dev_eui))
|
let d: Device = diesel::update(device::dsl::device.find(&d.dev_eui))
|
||||||
.set((
|
.set((
|
||||||
device::updated_at.eq(Utc::now()),
|
device::updated_at.eq(Utc::now()),
|
||||||
@ -254,7 +253,7 @@ pub async fn update(d: Device) -> Result<Device, Error> {
|
|||||||
device::variables.eq(&d.variables),
|
device::variables.eq(&d.variables),
|
||||||
device::join_eui.eq(&d.join_eui),
|
device::join_eui.eq(&d.join_eui),
|
||||||
))
|
))
|
||||||
.get_result(&mut c)
|
.get_result(&mut get_async_db_conn().await?)
|
||||||
.await
|
.await
|
||||||
.map_err(|e| Error::from_diesel(e, d.dev_eui.to_string()))?;
|
.map_err(|e| Error::from_diesel(e, d.dev_eui.to_string()))?;
|
||||||
info!(dev_eui = %d.dev_eui, "Device updated");
|
info!(dev_eui = %d.dev_eui, "Device updated");
|
||||||
@ -262,10 +261,9 @@ pub async fn update(d: Device) -> Result<Device, Error> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub async fn set_enabled_class(dev_eui: &EUI64, mode: DeviceClass) -> Result<Device, Error> {
|
pub async fn set_enabled_class(dev_eui: &EUI64, mode: DeviceClass) -> Result<Device, Error> {
|
||||||
let mut c = get_async_db_conn().await?;
|
|
||||||
let d: Device = diesel::update(device::dsl::device.find(&dev_eui))
|
let d: Device = diesel::update(device::dsl::device.find(&dev_eui))
|
||||||
.set(device::enabled_class.eq(&mode))
|
.set(device::enabled_class.eq(&mode))
|
||||||
.get_result(&mut c)
|
.get_result(&mut get_async_db_conn().await?)
|
||||||
.await
|
.await
|
||||||
.map_err(|e| Error::from_diesel(e, dev_eui.to_string()))?;
|
.map_err(|e| Error::from_diesel(e, dev_eui.to_string()))?;
|
||||||
info!(dev_eui = %dev_eui, enabled_class = %mode, "Enabled class updated");
|
info!(dev_eui = %dev_eui, enabled_class = %mode, "Enabled class updated");
|
||||||
@ -273,10 +271,9 @@ pub async fn set_enabled_class(dev_eui: &EUI64, mode: DeviceClass) -> Result<Dev
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub async fn set_join_eui(dev_eui: EUI64, join_eui: EUI64) -> Result<Device, Error> {
|
pub async fn set_join_eui(dev_eui: EUI64, join_eui: EUI64) -> Result<Device, Error> {
|
||||||
let mut c = get_async_db_conn().await?;
|
|
||||||
let d: Device = diesel::update(device::dsl::device.find(&dev_eui))
|
let d: Device = diesel::update(device::dsl::device.find(&dev_eui))
|
||||||
.set(device::join_eui.eq(&join_eui))
|
.set(device::join_eui.eq(&join_eui))
|
||||||
.get_result(&mut c)
|
.get_result(&mut get_async_db_conn().await?)
|
||||||
.await
|
.await
|
||||||
.map_err(|e| Error::from_diesel(e, dev_eui.to_string()))?;
|
.map_err(|e| Error::from_diesel(e, dev_eui.to_string()))?;
|
||||||
info!(dev_eui = %dev_eui, join_eui = %join_eui, "Updated JoinEUI");
|
info!(dev_eui = %dev_eui, join_eui = %join_eui, "Updated JoinEUI");
|
||||||
@ -284,10 +281,9 @@ pub async fn set_join_eui(dev_eui: EUI64, join_eui: EUI64) -> Result<Device, Err
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub async fn set_dev_addr(dev_eui: EUI64, dev_addr: DevAddr) -> Result<Device, Error> {
|
pub async fn set_dev_addr(dev_eui: EUI64, dev_addr: DevAddr) -> Result<Device, Error> {
|
||||||
let mut c = get_async_db_conn().await?;
|
|
||||||
let d: Device = diesel::update(device::dsl::device.find(&dev_eui))
|
let d: Device = diesel::update(device::dsl::device.find(&dev_eui))
|
||||||
.set(device::dev_addr.eq(&dev_addr))
|
.set(device::dev_addr.eq(&dev_addr))
|
||||||
.get_result(&mut c)
|
.get_result(&mut get_async_db_conn().await?)
|
||||||
.await
|
.await
|
||||||
.map_err(|e| Error::from_diesel(e, dev_eui.to_string()))?;
|
.map_err(|e| Error::from_diesel(e, dev_eui.to_string()))?;
|
||||||
info!(dev_eui = %dev_eui, dev_addr = %dev_addr, "Updated DevAddr");
|
info!(dev_eui = %dev_eui, dev_addr = %dev_addr, "Updated DevAddr");
|
||||||
@ -302,22 +298,20 @@ pub async fn set_scheduler_run_after(
|
|||||||
dev_eui: &EUI64,
|
dev_eui: &EUI64,
|
||||||
new_ts: Option<DateTime<Utc>>,
|
new_ts: Option<DateTime<Utc>>,
|
||||||
) -> Result<Device, Error> {
|
) -> Result<Device, Error> {
|
||||||
let mut c = get_async_db_conn().await?;
|
|
||||||
diesel::update(device::dsl::device.find(&dev_eui))
|
diesel::update(device::dsl::device.find(&dev_eui))
|
||||||
.set(device::scheduler_run_after.eq(&new_ts))
|
.set(device::scheduler_run_after.eq(&new_ts))
|
||||||
.get_result(&mut c)
|
.get_result(&mut get_async_db_conn().await?)
|
||||||
.await
|
.await
|
||||||
.map_err(|e| Error::from_diesel(e, dev_eui.to_string()))
|
.map_err(|e| Error::from_diesel(e, dev_eui.to_string()))
|
||||||
}
|
}
|
||||||
|
|
||||||
pub async fn set_last_seen_dr(dev_eui: &EUI64, dr: u8) -> Result<Device, Error> {
|
pub async fn set_last_seen_dr(dev_eui: &EUI64, dr: u8) -> Result<Device, Error> {
|
||||||
let mut c = get_async_db_conn().await?;
|
|
||||||
let d: Device = diesel::update(device::dsl::device.find(&dev_eui))
|
let d: Device = diesel::update(device::dsl::device.find(&dev_eui))
|
||||||
.set((
|
.set((
|
||||||
device::last_seen_at.eq(Utc::now()),
|
device::last_seen_at.eq(Utc::now()),
|
||||||
device::dr.eq(dr as i16),
|
device::dr.eq(dr as i16),
|
||||||
))
|
))
|
||||||
.get_result(&mut c)
|
.get_result(&mut get_async_db_conn().await?)
|
||||||
.await
|
.await
|
||||||
.map_err(|e| Error::from_diesel(e, dev_eui.to_string()))?;
|
.map_err(|e| Error::from_diesel(e, dev_eui.to_string()))?;
|
||||||
info!(dev_eui = %dev_eui, dr = dr, "Data-rate updated");
|
info!(dev_eui = %dev_eui, dr = dr, "Data-rate updated");
|
||||||
@ -330,14 +324,13 @@ pub async fn set_status(
|
|||||||
external_power_source: bool,
|
external_power_source: bool,
|
||||||
battery_level: Option<BigDecimal>,
|
battery_level: Option<BigDecimal>,
|
||||||
) -> Result<Device, Error> {
|
) -> Result<Device, Error> {
|
||||||
let mut c = get_async_db_conn().await?;
|
|
||||||
let d: Device = diesel::update(device::dsl::device.find(&dev_eui))
|
let d: Device = diesel::update(device::dsl::device.find(&dev_eui))
|
||||||
.set((
|
.set((
|
||||||
device::margin.eq(Some(margin)),
|
device::margin.eq(Some(margin)),
|
||||||
device::external_power_source.eq(external_power_source),
|
device::external_power_source.eq(external_power_source),
|
||||||
device::battery_level.eq(battery_level),
|
device::battery_level.eq(battery_level),
|
||||||
))
|
))
|
||||||
.get_result(&mut c)
|
.get_result(&mut get_async_db_conn().await?)
|
||||||
.await
|
.await
|
||||||
.map_err(|e| Error::from_diesel(e, dev_eui.to_string()))?;
|
.map_err(|e| Error::from_diesel(e, dev_eui.to_string()))?;
|
||||||
info!(dev_eui = %dev_eui, "Device status updated");
|
info!(dev_eui = %dev_eui, "Device status updated");
|
||||||
@ -345,9 +338,8 @@ pub async fn set_status(
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub async fn delete(dev_eui: &EUI64) -> Result<(), Error> {
|
pub async fn delete(dev_eui: &EUI64) -> Result<(), Error> {
|
||||||
let mut c = get_async_db_conn().await?;
|
|
||||||
let ra = diesel::delete(device::dsl::device.find(&dev_eui))
|
let ra = diesel::delete(device::dsl::device.find(&dev_eui))
|
||||||
.execute(&mut c)
|
.execute(&mut get_async_db_conn().await?)
|
||||||
.await?;
|
.await?;
|
||||||
if ra == 0 {
|
if ra == 0 {
|
||||||
return Err(Error::NotFound(dev_eui.to_string()));
|
return Err(Error::NotFound(dev_eui.to_string()));
|
||||||
@ -357,7 +349,6 @@ pub async fn delete(dev_eui: &EUI64) -> Result<(), Error> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub async fn get_count(filters: &Filters) -> Result<i64, Error> {
|
pub async fn get_count(filters: &Filters) -> Result<i64, Error> {
|
||||||
let mut c = get_async_db_conn().await?;
|
|
||||||
let mut q = device::dsl::device
|
let mut q = device::dsl::device
|
||||||
.select(dsl::count_star())
|
.select(dsl::count_star())
|
||||||
.distinct()
|
.distinct()
|
||||||
@ -376,7 +367,7 @@ pub async fn get_count(filters: &Filters) -> Result<i64, Error> {
|
|||||||
q = q.filter(multicast_group_device::dsl::multicast_group_id.eq(multicast_group_id));
|
q = q.filter(multicast_group_device::dsl::multicast_group_id.eq(multicast_group_id));
|
||||||
}
|
}
|
||||||
|
|
||||||
Ok(q.first(&mut c).await?)
|
Ok(q.first(&mut get_async_db_conn().await?).await?)
|
||||||
}
|
}
|
||||||
|
|
||||||
pub async fn list(
|
pub async fn list(
|
||||||
@ -384,7 +375,6 @@ pub async fn list(
|
|||||||
offset: i64,
|
offset: i64,
|
||||||
filters: &Filters,
|
filters: &Filters,
|
||||||
) -> Result<Vec<DeviceListItem>, Error> {
|
) -> Result<Vec<DeviceListItem>, Error> {
|
||||||
let mut c = get_async_db_conn().await?;
|
|
||||||
let mut q = device::dsl::device
|
let mut q = device::dsl::device
|
||||||
.inner_join(device_profile::table)
|
.inner_join(device_profile::table)
|
||||||
.left_join(multicast_group_device::table)
|
.left_join(multicast_group_device::table)
|
||||||
@ -419,13 +409,12 @@ pub async fn list(
|
|||||||
q.order_by(device::dsl::name)
|
q.order_by(device::dsl::name)
|
||||||
.limit(limit)
|
.limit(limit)
|
||||||
.offset(offset)
|
.offset(offset)
|
||||||
.load(&mut c)
|
.load(&mut get_async_db_conn().await?)
|
||||||
.await
|
.await
|
||||||
.map_err(|e| Error::from_diesel(e, "".into()))
|
.map_err(|e| Error::from_diesel(e, "".into()))
|
||||||
}
|
}
|
||||||
|
|
||||||
pub async fn get_active_inactive(tenant_id: &Option<Uuid>) -> Result<DevicesActiveInactive, Error> {
|
pub async fn get_active_inactive(tenant_id: &Option<Uuid>) -> Result<DevicesActiveInactive, Error> {
|
||||||
let mut c = get_async_db_conn().await?;
|
|
||||||
diesel::sql_query(r#"
|
diesel::sql_query(r#"
|
||||||
with device_active_inactive as (
|
with device_active_inactive as (
|
||||||
select
|
select
|
||||||
@ -446,12 +435,11 @@ pub async fn get_active_inactive(tenant_id: &Option<Uuid>) -> Result<DevicesActi
|
|||||||
device_active_inactive
|
device_active_inactive
|
||||||
"#)
|
"#)
|
||||||
.bind::<diesel::sql_types::Nullable<diesel::sql_types::Uuid>, _>(tenant_id)
|
.bind::<diesel::sql_types::Nullable<diesel::sql_types::Uuid>, _>(tenant_id)
|
||||||
.get_result(&mut c).await
|
.get_result(&mut get_async_db_conn().await?).await
|
||||||
.map_err(|e| Error::from_diesel(e, "".into()))
|
.map_err(|e| Error::from_diesel(e, "".into()))
|
||||||
}
|
}
|
||||||
|
|
||||||
pub async fn get_data_rates(tenant_id: &Option<Uuid>) -> Result<Vec<DevicesDataRate>, Error> {
|
pub async fn get_data_rates(tenant_id: &Option<Uuid>) -> Result<Vec<DevicesDataRate>, Error> {
|
||||||
let mut c = get_async_db_conn().await?;
|
|
||||||
let mut q = device::dsl::device
|
let mut q = device::dsl::device
|
||||||
.inner_join(device_profile::table)
|
.inner_join(device_profile::table)
|
||||||
//.select((device::dr, dsl::count_star()))
|
//.select((device::dr, dsl::count_star()))
|
||||||
@ -467,7 +455,7 @@ pub async fn get_data_rates(tenant_id: &Option<Uuid>) -> Result<Vec<DevicesDataR
|
|||||||
q = q.filter(device_profile::dsl::tenant_id.eq(id));
|
q = q.filter(device_profile::dsl::tenant_id.eq(id));
|
||||||
}
|
}
|
||||||
|
|
||||||
q.load(&mut c)
|
q.load(&mut get_async_db_conn().await?)
|
||||||
.await
|
.await
|
||||||
.map_err(|e| Error::from_diesel(e, "".into()))
|
.map_err(|e| Error::from_diesel(e, "".into()))
|
||||||
}
|
}
|
||||||
|
@ -45,10 +45,9 @@ impl Default for DeviceKeys {
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub async fn create(dk: DeviceKeys) -> Result<DeviceKeys, Error> {
|
pub async fn create(dk: DeviceKeys) -> Result<DeviceKeys, Error> {
|
||||||
let mut c = get_async_db_conn().await?;
|
|
||||||
let dk: DeviceKeys = diesel::insert_into(device_keys::table)
|
let dk: DeviceKeys = diesel::insert_into(device_keys::table)
|
||||||
.values(&dk)
|
.values(&dk)
|
||||||
.get_result(&mut c)
|
.get_result(&mut get_async_db_conn().await?)
|
||||||
.await
|
.await
|
||||||
.map_err(|e| Error::from_diesel(e, dk.dev_eui.to_string()))?;
|
.map_err(|e| Error::from_diesel(e, dk.dev_eui.to_string()))?;
|
||||||
info!(
|
info!(
|
||||||
@ -59,20 +58,18 @@ pub async fn create(dk: DeviceKeys) -> Result<DeviceKeys, Error> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub async fn get(dev_eui: &EUI64) -> Result<DeviceKeys, Error> {
|
pub async fn get(dev_eui: &EUI64) -> Result<DeviceKeys, Error> {
|
||||||
let mut c = get_async_db_conn().await?;
|
|
||||||
let dk = device_keys::dsl::device_keys
|
let dk = device_keys::dsl::device_keys
|
||||||
.find(&dev_eui)
|
.find(&dev_eui)
|
||||||
.first(&mut c)
|
.first(&mut get_async_db_conn().await?)
|
||||||
.await
|
.await
|
||||||
.map_err(|e| Error::from_diesel(e, dev_eui.to_string()))?;
|
.map_err(|e| Error::from_diesel(e, dev_eui.to_string()))?;
|
||||||
Ok(dk)
|
Ok(dk)
|
||||||
}
|
}
|
||||||
|
|
||||||
pub async fn update(dk: DeviceKeys) -> Result<DeviceKeys, Error> {
|
pub async fn update(dk: DeviceKeys) -> Result<DeviceKeys, Error> {
|
||||||
let mut c = get_async_db_conn().await?;
|
|
||||||
let dk: DeviceKeys = diesel::update(device_keys::dsl::device_keys.find(&dk.dev_eui))
|
let dk: DeviceKeys = diesel::update(device_keys::dsl::device_keys.find(&dk.dev_eui))
|
||||||
.set(&dk)
|
.set(&dk)
|
||||||
.get_result(&mut c)
|
.get_result(&mut get_async_db_conn().await?)
|
||||||
.await
|
.await
|
||||||
.map_err(|e| Error::from_diesel(e, dk.dev_eui.to_string()))?;
|
.map_err(|e| Error::from_diesel(e, dk.dev_eui.to_string()))?;
|
||||||
info!(
|
info!(
|
||||||
@ -83,9 +80,8 @@ pub async fn update(dk: DeviceKeys) -> Result<DeviceKeys, Error> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub async fn delete(dev_eui: &EUI64) -> Result<(), Error> {
|
pub async fn delete(dev_eui: &EUI64) -> Result<(), Error> {
|
||||||
let mut c = get_async_db_conn().await?;
|
|
||||||
let ra = diesel::delete(device_keys::dsl::device_keys.find(&dev_eui))
|
let ra = diesel::delete(device_keys::dsl::device_keys.find(&dev_eui))
|
||||||
.execute(&mut c)
|
.execute(&mut get_async_db_conn().await?)
|
||||||
.await?;
|
.await?;
|
||||||
if ra == 0 {
|
if ra == 0 {
|
||||||
return Err(Error::NotFound(dev_eui.to_string()));
|
return Err(Error::NotFound(dev_eui.to_string()));
|
||||||
@ -98,10 +94,9 @@ pub async fn delete(dev_eui: &EUI64) -> Result<(), Error> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub async fn set_dev_nonces(dev_eui: &EUI64, nonces: &[i32]) -> Result<DeviceKeys, Error> {
|
pub async fn set_dev_nonces(dev_eui: &EUI64, nonces: &[i32]) -> Result<DeviceKeys, Error> {
|
||||||
let mut c = get_async_db_conn().await?;
|
|
||||||
let dk: DeviceKeys = diesel::update(device_keys::dsl::device_keys.find(dev_eui))
|
let dk: DeviceKeys = diesel::update(device_keys::dsl::device_keys.find(dev_eui))
|
||||||
.set(device_keys::dev_nonces.eq(nonces))
|
.set(device_keys::dev_nonces.eq(nonces))
|
||||||
.get_result(&mut c)
|
.get_result(&mut get_async_db_conn().await?)
|
||||||
.await
|
.await
|
||||||
.map_err(|e| Error::from_diesel(e, dev_eui.to_string()))?;
|
.map_err(|e| Error::from_diesel(e, dev_eui.to_string()))?;
|
||||||
info!(
|
info!(
|
||||||
@ -158,13 +153,12 @@ pub mod test {
|
|||||||
use crate::test;
|
use crate::test;
|
||||||
|
|
||||||
pub async fn reset_nonces(dev_eui: &EUI64) -> Result<DeviceKeys, Error> {
|
pub async fn reset_nonces(dev_eui: &EUI64) -> Result<DeviceKeys, Error> {
|
||||||
let mut c = get_async_db_conn().await?;
|
|
||||||
let dk: DeviceKeys = diesel::update(device_keys::dsl::device_keys.find(&dev_eui))
|
let dk: DeviceKeys = diesel::update(device_keys::dsl::device_keys.find(&dev_eui))
|
||||||
.set((
|
.set((
|
||||||
device_keys::dev_nonces.eq::<Vec<i32>>(Vec::new()),
|
device_keys::dev_nonces.eq::<Vec<i32>>(Vec::new()),
|
||||||
device_keys::join_nonce.eq(0),
|
device_keys::join_nonce.eq(0),
|
||||||
))
|
))
|
||||||
.get_result(&mut c)
|
.get_result(&mut get_async_db_conn().await?)
|
||||||
.await
|
.await
|
||||||
.map_err(|e| Error::from_diesel(e, dev_eui.to_string()))?;
|
.map_err(|e| Error::from_diesel(e, dev_eui.to_string()))?;
|
||||||
|
|
||||||
|
@ -198,10 +198,10 @@ pub struct Filters {
|
|||||||
|
|
||||||
pub async fn create(dp: DeviceProfile) -> Result<DeviceProfile, Error> {
|
pub async fn create(dp: DeviceProfile) -> Result<DeviceProfile, Error> {
|
||||||
dp.validate()?;
|
dp.validate()?;
|
||||||
let mut c = get_async_db_conn().await?;
|
|
||||||
let dp: DeviceProfile = diesel::insert_into(device_profile::table)
|
let dp: DeviceProfile = diesel::insert_into(device_profile::table)
|
||||||
.values(&dp)
|
.values(&dp)
|
||||||
.get_result(&mut c)
|
.get_result(&mut get_async_db_conn().await?)
|
||||||
.await
|
.await
|
||||||
.map_err(|e| error::Error::from_diesel(e, dp.id.to_string()))?;
|
.map_err(|e| error::Error::from_diesel(e, dp.id.to_string()))?;
|
||||||
info!(id = %dp.id, "Device-profile created");
|
info!(id = %dp.id, "Device-profile created");
|
||||||
@ -209,10 +209,9 @@ pub async fn create(dp: DeviceProfile) -> Result<DeviceProfile, Error> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub async fn get(id: &Uuid) -> Result<DeviceProfile, Error> {
|
pub async fn get(id: &Uuid) -> Result<DeviceProfile, Error> {
|
||||||
let mut c = get_async_db_conn().await?;
|
|
||||||
let dp = device_profile::dsl::device_profile
|
let dp = device_profile::dsl::device_profile
|
||||||
.find(&id)
|
.find(&id)
|
||||||
.first(&mut c)
|
.first(&mut get_async_db_conn().await?)
|
||||||
.await
|
.await
|
||||||
.map_err(|e| error::Error::from_diesel(e, id.to_string()))?;
|
.map_err(|e| error::Error::from_diesel(e, id.to_string()))?;
|
||||||
Ok(dp)
|
Ok(dp)
|
||||||
@ -220,7 +219,6 @@ pub async fn get(id: &Uuid) -> Result<DeviceProfile, Error> {
|
|||||||
|
|
||||||
pub async fn update(dp: DeviceProfile) -> Result<DeviceProfile, Error> {
|
pub async fn update(dp: DeviceProfile) -> Result<DeviceProfile, Error> {
|
||||||
dp.validate()?;
|
dp.validate()?;
|
||||||
let mut c = get_async_db_conn().await?;
|
|
||||||
|
|
||||||
let dp: DeviceProfile = diesel::update(device_profile::dsl::device_profile.find(&dp.id))
|
let dp: DeviceProfile = diesel::update(device_profile::dsl::device_profile.find(&dp.id))
|
||||||
.set((
|
.set((
|
||||||
@ -282,7 +280,7 @@ pub async fn update(dp: DeviceProfile) -> Result<DeviceProfile, Error> {
|
|||||||
device_profile::relay_overall_limit_bucket_size.eq(&dp.relay_overall_limit_bucket_size),
|
device_profile::relay_overall_limit_bucket_size.eq(&dp.relay_overall_limit_bucket_size),
|
||||||
device_profile::allow_roaming.eq(&dp.allow_roaming),
|
device_profile::allow_roaming.eq(&dp.allow_roaming),
|
||||||
))
|
))
|
||||||
.get_result(&mut c)
|
.get_result(&mut get_async_db_conn().await?)
|
||||||
.await
|
.await
|
||||||
.map_err(|e| error::Error::from_diesel(e, dp.id.to_string()))?;
|
.map_err(|e| error::Error::from_diesel(e, dp.id.to_string()))?;
|
||||||
|
|
||||||
@ -291,10 +289,9 @@ pub async fn update(dp: DeviceProfile) -> Result<DeviceProfile, Error> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub async fn set_measurements(id: Uuid, m: &fields::Measurements) -> Result<DeviceProfile, Error> {
|
pub async fn set_measurements(id: Uuid, m: &fields::Measurements) -> Result<DeviceProfile, Error> {
|
||||||
let mut c = get_async_db_conn().await?;
|
|
||||||
let dp: DeviceProfile = diesel::update(device_profile::dsl::device_profile.find(&id))
|
let dp: DeviceProfile = diesel::update(device_profile::dsl::device_profile.find(&id))
|
||||||
.set(device_profile::measurements.eq(m))
|
.set(device_profile::measurements.eq(m))
|
||||||
.get_result(&mut c)
|
.get_result(&mut get_async_db_conn().await?)
|
||||||
.await
|
.await
|
||||||
.map_err(|e| Error::from_diesel(e, id.to_string()))?;
|
.map_err(|e| Error::from_diesel(e, id.to_string()))?;
|
||||||
info!(id = %id, "Device-profile measurements updated");
|
info!(id = %id, "Device-profile measurements updated");
|
||||||
@ -302,9 +299,8 @@ pub async fn set_measurements(id: Uuid, m: &fields::Measurements) -> Result<Devi
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub async fn delete(id: &Uuid) -> Result<(), Error> {
|
pub async fn delete(id: &Uuid) -> Result<(), Error> {
|
||||||
let mut c = get_async_db_conn().await?;
|
|
||||||
let ra = diesel::delete(device_profile::dsl::device_profile.find(&id))
|
let ra = diesel::delete(device_profile::dsl::device_profile.find(&id))
|
||||||
.execute(&mut c)
|
.execute(&mut get_async_db_conn().await?)
|
||||||
.await?;
|
.await?;
|
||||||
if ra == 0 {
|
if ra == 0 {
|
||||||
return Err(error::Error::NotFound(id.to_string()));
|
return Err(error::Error::NotFound(id.to_string()));
|
||||||
@ -314,7 +310,6 @@ pub async fn delete(id: &Uuid) -> Result<(), Error> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub async fn get_count(filters: &Filters) -> Result<i64, Error> {
|
pub async fn get_count(filters: &Filters) -> Result<i64, Error> {
|
||||||
let mut c = get_async_db_conn().await?;
|
|
||||||
let mut q = device_profile::dsl::device_profile
|
let mut q = device_profile::dsl::device_profile
|
||||||
.select(dsl::count_star())
|
.select(dsl::count_star())
|
||||||
.into_boxed();
|
.into_boxed();
|
||||||
@ -327,7 +322,7 @@ pub async fn get_count(filters: &Filters) -> Result<i64, Error> {
|
|||||||
q = q.filter(device_profile::dsl::name.ilike(format!("%{}%", search)));
|
q = q.filter(device_profile::dsl::name.ilike(format!("%{}%", search)));
|
||||||
}
|
}
|
||||||
|
|
||||||
Ok(q.first(&mut c).await?)
|
Ok(q.first(&mut get_async_db_conn().await?).await?)
|
||||||
}
|
}
|
||||||
|
|
||||||
pub async fn list(
|
pub async fn list(
|
||||||
@ -335,7 +330,6 @@ pub async fn list(
|
|||||||
offset: i64,
|
offset: i64,
|
||||||
filters: &Filters,
|
filters: &Filters,
|
||||||
) -> Result<Vec<DeviceProfileListItem>, Error> {
|
) -> Result<Vec<DeviceProfileListItem>, Error> {
|
||||||
let mut c = get_async_db_conn().await?;
|
|
||||||
let mut q = device_profile::dsl::device_profile
|
let mut q = device_profile::dsl::device_profile
|
||||||
.select((
|
.select((
|
||||||
device_profile::id,
|
device_profile::id,
|
||||||
@ -363,7 +357,7 @@ pub async fn list(
|
|||||||
.order_by(device_profile::dsl::name)
|
.order_by(device_profile::dsl::name)
|
||||||
.limit(limit)
|
.limit(limit)
|
||||||
.offset(offset)
|
.offset(offset)
|
||||||
.load(&mut c)
|
.load(&mut get_async_db_conn().await?)
|
||||||
.await?;
|
.await?;
|
||||||
Ok(items)
|
Ok(items)
|
||||||
}
|
}
|
||||||
|
@ -133,10 +133,10 @@ pub struct DeviceProfileTemplateListItem {
|
|||||||
|
|
||||||
pub async fn create(dp: DeviceProfileTemplate) -> Result<DeviceProfileTemplate, Error> {
|
pub async fn create(dp: DeviceProfileTemplate) -> Result<DeviceProfileTemplate, Error> {
|
||||||
dp.validate()?;
|
dp.validate()?;
|
||||||
let mut c = get_async_db_conn().await?;
|
|
||||||
let dp: DeviceProfileTemplate = diesel::insert_into(device_profile_template::table)
|
let dp: DeviceProfileTemplate = diesel::insert_into(device_profile_template::table)
|
||||||
.values(&dp)
|
.values(&dp)
|
||||||
.get_result(&mut c)
|
.get_result(&mut get_async_db_conn().await?)
|
||||||
.await
|
.await
|
||||||
.map_err(|e| error::Error::from_diesel(e, dp.id.to_string()))?;
|
.map_err(|e| error::Error::from_diesel(e, dp.id.to_string()))?;
|
||||||
info!(id = %dp.id, "Device-profile template created");
|
info!(id = %dp.id, "Device-profile template created");
|
||||||
@ -145,7 +145,7 @@ pub async fn create(dp: DeviceProfileTemplate) -> Result<DeviceProfileTemplate,
|
|||||||
|
|
||||||
pub async fn upsert(dp: DeviceProfileTemplate) -> Result<DeviceProfileTemplate, Error> {
|
pub async fn upsert(dp: DeviceProfileTemplate) -> Result<DeviceProfileTemplate, Error> {
|
||||||
dp.validate()?;
|
dp.validate()?;
|
||||||
let mut c = get_async_db_conn().await?;
|
|
||||||
let dp: DeviceProfileTemplate = diesel::insert_into(device_profile_template::table)
|
let dp: DeviceProfileTemplate = diesel::insert_into(device_profile_template::table)
|
||||||
.values(&dp)
|
.values(&dp)
|
||||||
.on_conflict(device_profile_template::id)
|
.on_conflict(device_profile_template::id)
|
||||||
@ -181,7 +181,7 @@ pub async fn upsert(dp: DeviceProfileTemplate) -> Result<DeviceProfileTemplate,
|
|||||||
device_profile_template::measurements.eq(&dp.measurements),
|
device_profile_template::measurements.eq(&dp.measurements),
|
||||||
device_profile_template::auto_detect_measurements.eq(&dp.auto_detect_measurements),
|
device_profile_template::auto_detect_measurements.eq(&dp.auto_detect_measurements),
|
||||||
))
|
))
|
||||||
.get_result(&mut c)
|
.get_result(&mut get_async_db_conn().await?)
|
||||||
.await
|
.await
|
||||||
.map_err(|e| error::Error::from_diesel(e, dp.id.to_string()))?;
|
.map_err(|e| error::Error::from_diesel(e, dp.id.to_string()))?;
|
||||||
info!(id = %dp.id, "Device-profile template upserted");
|
info!(id = %dp.id, "Device-profile template upserted");
|
||||||
@ -190,10 +190,10 @@ pub async fn upsert(dp: DeviceProfileTemplate) -> Result<DeviceProfileTemplate,
|
|||||||
|
|
||||||
pub async fn get(id: &str) -> Result<DeviceProfileTemplate, Error> {
|
pub async fn get(id: &str) -> Result<DeviceProfileTemplate, Error> {
|
||||||
let id = id.to_string();
|
let id = id.to_string();
|
||||||
let mut c = get_async_db_conn().await?;
|
|
||||||
let dp = device_profile_template::dsl::device_profile_template
|
let dp = device_profile_template::dsl::device_profile_template
|
||||||
.find(&id)
|
.find(&id)
|
||||||
.first(&mut c)
|
.first(&mut get_async_db_conn().await?)
|
||||||
.await
|
.await
|
||||||
.map_err(|e| error::Error::from_diesel(e, id.clone()))?;
|
.map_err(|e| error::Error::from_diesel(e, id.clone()))?;
|
||||||
Ok(dp)
|
Ok(dp)
|
||||||
@ -201,7 +201,6 @@ pub async fn get(id: &str) -> Result<DeviceProfileTemplate, Error> {
|
|||||||
|
|
||||||
pub async fn update(dp: DeviceProfileTemplate) -> Result<DeviceProfileTemplate, Error> {
|
pub async fn update(dp: DeviceProfileTemplate) -> Result<DeviceProfileTemplate, Error> {
|
||||||
dp.validate()?;
|
dp.validate()?;
|
||||||
let mut c = get_async_db_conn().await?;
|
|
||||||
|
|
||||||
let dp: DeviceProfileTemplate =
|
let dp: DeviceProfileTemplate =
|
||||||
diesel::update(device_profile_template::dsl::device_profile_template.find(&dp.id))
|
diesel::update(device_profile_template::dsl::device_profile_template.find(&dp.id))
|
||||||
@ -235,7 +234,7 @@ pub async fn update(dp: DeviceProfileTemplate) -> Result<DeviceProfileTemplate,
|
|||||||
device_profile_template::abp_rx2_freq.eq(&dp.abp_rx2_freq),
|
device_profile_template::abp_rx2_freq.eq(&dp.abp_rx2_freq),
|
||||||
device_profile_template::tags.eq(&dp.tags),
|
device_profile_template::tags.eq(&dp.tags),
|
||||||
))
|
))
|
||||||
.get_result(&mut c)
|
.get_result(&mut get_async_db_conn().await?)
|
||||||
.await
|
.await
|
||||||
.map_err(|e| error::Error::from_diesel(e, dp.id.clone()))?;
|
.map_err(|e| error::Error::from_diesel(e, dp.id.clone()))?;
|
||||||
info!(id = %dp.id, "Device-profile template updated");
|
info!(id = %dp.id, "Device-profile template updated");
|
||||||
@ -244,9 +243,9 @@ pub async fn update(dp: DeviceProfileTemplate) -> Result<DeviceProfileTemplate,
|
|||||||
|
|
||||||
pub async fn delete(id: &str) -> Result<(), Error> {
|
pub async fn delete(id: &str) -> Result<(), Error> {
|
||||||
let id = id.to_string();
|
let id = id.to_string();
|
||||||
let mut c = get_async_db_conn().await?;
|
|
||||||
let ra = diesel::delete(device_profile_template::dsl::device_profile_template.find(&id))
|
let ra = diesel::delete(device_profile_template::dsl::device_profile_template.find(&id))
|
||||||
.execute(&mut c)
|
.execute(&mut get_async_db_conn().await?)
|
||||||
.await?;
|
.await?;
|
||||||
if ra == 0 {
|
if ra == 0 {
|
||||||
return Err(error::Error::NotFound(id));
|
return Err(error::Error::NotFound(id));
|
||||||
@ -256,15 +255,13 @@ pub async fn delete(id: &str) -> Result<(), Error> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub async fn get_count() -> Result<i64, Error> {
|
pub async fn get_count() -> Result<i64, Error> {
|
||||||
let mut c = get_async_db_conn().await?;
|
|
||||||
Ok(device_profile_template::dsl::device_profile_template
|
Ok(device_profile_template::dsl::device_profile_template
|
||||||
.select(dsl::count_star())
|
.select(dsl::count_star())
|
||||||
.first(&mut c)
|
.first(&mut get_async_db_conn().await?)
|
||||||
.await?)
|
.await?)
|
||||||
}
|
}
|
||||||
|
|
||||||
pub async fn list(limit: i64, offset: i64) -> Result<Vec<DeviceProfileTemplateListItem>, Error> {
|
pub async fn list(limit: i64, offset: i64) -> Result<Vec<DeviceProfileTemplateListItem>, Error> {
|
||||||
let mut c = get_async_db_conn().await?;
|
|
||||||
let items = device_profile_template::dsl::device_profile_template
|
let items = device_profile_template::dsl::device_profile_template
|
||||||
.select((
|
.select((
|
||||||
device_profile_template::id,
|
device_profile_template::id,
|
||||||
@ -288,7 +285,7 @@ pub async fn list(limit: i64, offset: i64) -> Result<Vec<DeviceProfileTemplateLi
|
|||||||
))
|
))
|
||||||
.limit(limit)
|
.limit(limit)
|
||||||
.offset(offset)
|
.offset(offset)
|
||||||
.load(&mut c)
|
.load(&mut get_async_db_conn().await?)
|
||||||
.await?;
|
.await?;
|
||||||
Ok(items)
|
Ok(items)
|
||||||
}
|
}
|
||||||
|
@ -64,10 +64,10 @@ impl Default for DeviceQueueItem {
|
|||||||
|
|
||||||
pub async fn enqueue_item(qi: DeviceQueueItem) -> Result<DeviceQueueItem, Error> {
|
pub async fn enqueue_item(qi: DeviceQueueItem) -> Result<DeviceQueueItem, Error> {
|
||||||
qi.validate()?;
|
qi.validate()?;
|
||||||
let mut c = get_async_db_conn().await?;
|
|
||||||
let qi: DeviceQueueItem = diesel::insert_into(device_queue_item::table)
|
let qi: DeviceQueueItem = diesel::insert_into(device_queue_item::table)
|
||||||
.values(&qi)
|
.values(&qi)
|
||||||
.get_result(&mut c)
|
.get_result(&mut get_async_db_conn().await?)
|
||||||
.await
|
.await
|
||||||
.map_err(|e| Error::from_diesel(e, qi.id.to_string()))?;
|
.map_err(|e| Error::from_diesel(e, qi.id.to_string()))?;
|
||||||
info!(id = %qi.id, dev_eui = %qi.dev_eui, "Device queue-item enqueued");
|
info!(id = %qi.id, dev_eui = %qi.dev_eui, "Device queue-item enqueued");
|
||||||
@ -75,17 +75,15 @@ pub async fn enqueue_item(qi: DeviceQueueItem) -> Result<DeviceQueueItem, Error>
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub async fn get_item(id: &Uuid) -> Result<DeviceQueueItem, Error> {
|
pub async fn get_item(id: &Uuid) -> Result<DeviceQueueItem, Error> {
|
||||||
let mut c = get_async_db_conn().await?;
|
|
||||||
let qi = device_queue_item::dsl::device_queue_item
|
let qi = device_queue_item::dsl::device_queue_item
|
||||||
.find(id)
|
.find(id)
|
||||||
.first(&mut c)
|
.first(&mut get_async_db_conn().await?)
|
||||||
.await
|
.await
|
||||||
.map_err(|e| Error::from_diesel(e, id.to_string()))?;
|
.map_err(|e| Error::from_diesel(e, id.to_string()))?;
|
||||||
Ok(qi)
|
Ok(qi)
|
||||||
}
|
}
|
||||||
|
|
||||||
pub async fn update_item(qi: DeviceQueueItem) -> Result<DeviceQueueItem, Error> {
|
pub async fn update_item(qi: DeviceQueueItem) -> Result<DeviceQueueItem, Error> {
|
||||||
let mut c = get_async_db_conn().await?;
|
|
||||||
let qi: DeviceQueueItem =
|
let qi: DeviceQueueItem =
|
||||||
diesel::update(device_queue_item::dsl::device_queue_item.find(&qi.id))
|
diesel::update(device_queue_item::dsl::device_queue_item.find(&qi.id))
|
||||||
.set((
|
.set((
|
||||||
@ -93,7 +91,7 @@ pub async fn update_item(qi: DeviceQueueItem) -> Result<DeviceQueueItem, Error>
|
|||||||
device_queue_item::f_cnt_down.eq(&qi.f_cnt_down),
|
device_queue_item::f_cnt_down.eq(&qi.f_cnt_down),
|
||||||
device_queue_item::timeout_after.eq(&qi.timeout_after),
|
device_queue_item::timeout_after.eq(&qi.timeout_after),
|
||||||
))
|
))
|
||||||
.get_result(&mut c)
|
.get_result(&mut get_async_db_conn().await?)
|
||||||
.await
|
.await
|
||||||
.map_err(|e| Error::from_diesel(e, qi.id.to_string()))?;
|
.map_err(|e| Error::from_diesel(e, qi.id.to_string()))?;
|
||||||
info!(id = %qi.id, dev_eui = %qi.dev_eui, "Device queue-item updated");
|
info!(id = %qi.id, dev_eui = %qi.dev_eui, "Device queue-item updated");
|
||||||
@ -101,9 +99,8 @@ pub async fn update_item(qi: DeviceQueueItem) -> Result<DeviceQueueItem, Error>
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub async fn delete_item(id: &Uuid) -> Result<(), Error> {
|
pub async fn delete_item(id: &Uuid) -> Result<(), Error> {
|
||||||
let mut c = get_async_db_conn().await?;
|
|
||||||
let ra = diesel::delete(device_queue_item::dsl::device_queue_item.find(&id))
|
let ra = diesel::delete(device_queue_item::dsl::device_queue_item.find(&id))
|
||||||
.execute(&mut c)
|
.execute(&mut get_async_db_conn().await?)
|
||||||
.await?;
|
.await?;
|
||||||
if ra == 0 {
|
if ra == 0 {
|
||||||
return Err(Error::NotFound(id.to_string()));
|
return Err(Error::NotFound(id.to_string()));
|
||||||
@ -114,12 +111,11 @@ pub async fn delete_item(id: &Uuid) -> Result<(), Error> {
|
|||||||
|
|
||||||
/// It returns the device queue-item and a bool indicating if there are more items in the queue.
|
/// It returns the device queue-item and a bool indicating if there are more items in the queue.
|
||||||
pub async fn get_next_for_dev_eui(dev_eui: &EUI64) -> Result<(DeviceQueueItem, bool), Error> {
|
pub async fn get_next_for_dev_eui(dev_eui: &EUI64) -> Result<(DeviceQueueItem, bool), Error> {
|
||||||
let mut c = get_async_db_conn().await?;
|
|
||||||
let items: Vec<DeviceQueueItem> = device_queue_item::dsl::device_queue_item
|
let items: Vec<DeviceQueueItem> = device_queue_item::dsl::device_queue_item
|
||||||
.filter(device_queue_item::dev_eui.eq(&dev_eui))
|
.filter(device_queue_item::dev_eui.eq(&dev_eui))
|
||||||
.order_by(device_queue_item::created_at)
|
.order_by(device_queue_item::created_at)
|
||||||
.limit(2)
|
.limit(2)
|
||||||
.load(&mut c)
|
.load(&mut get_async_db_conn().await?)
|
||||||
.await
|
.await
|
||||||
.map_err(|e| Error::from_diesel(e, dev_eui.to_string()))?;
|
.map_err(|e| Error::from_diesel(e, dev_eui.to_string()))?;
|
||||||
|
|
||||||
@ -143,22 +139,20 @@ pub async fn get_next_for_dev_eui(dev_eui: &EUI64) -> Result<(DeviceQueueItem, b
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub async fn get_for_dev_eui(dev_eui: &EUI64) -> Result<Vec<DeviceQueueItem>, Error> {
|
pub async fn get_for_dev_eui(dev_eui: &EUI64) -> Result<Vec<DeviceQueueItem>, Error> {
|
||||||
let mut c = get_async_db_conn().await?;
|
|
||||||
let items = device_queue_item::dsl::device_queue_item
|
let items = device_queue_item::dsl::device_queue_item
|
||||||
.filter(device_queue_item::dev_eui.eq(&dev_eui))
|
.filter(device_queue_item::dev_eui.eq(&dev_eui))
|
||||||
.order_by(device_queue_item::created_at)
|
.order_by(device_queue_item::created_at)
|
||||||
.load(&mut c)
|
.load(&mut get_async_db_conn().await?)
|
||||||
.await
|
.await
|
||||||
.map_err(|e| Error::from_diesel(e, dev_eui.to_string()))?;
|
.map_err(|e| Error::from_diesel(e, dev_eui.to_string()))?;
|
||||||
Ok(items)
|
Ok(items)
|
||||||
}
|
}
|
||||||
|
|
||||||
pub async fn flush_for_dev_eui(dev_eui: &EUI64) -> Result<(), Error> {
|
pub async fn flush_for_dev_eui(dev_eui: &EUI64) -> Result<(), Error> {
|
||||||
let mut c = get_async_db_conn().await?;
|
|
||||||
let count: usize = diesel::delete(
|
let count: usize = diesel::delete(
|
||||||
device_queue_item::dsl::device_queue_item.filter(device_queue_item::dev_eui.eq(&dev_eui)),
|
device_queue_item::dsl::device_queue_item.filter(device_queue_item::dev_eui.eq(&dev_eui)),
|
||||||
)
|
)
|
||||||
.execute(&mut c)
|
.execute(&mut get_async_db_conn().await?)
|
||||||
.await
|
.await
|
||||||
.map_err(|e| Error::from_diesel(e, dev_eui.to_string()))?;
|
.map_err(|e| Error::from_diesel(e, dev_eui.to_string()))?;
|
||||||
info!(dev_eui = %dev_eui, count = count, "Device queue flushed");
|
info!(dev_eui = %dev_eui, count = count, "Device queue flushed");
|
||||||
@ -166,25 +160,23 @@ pub async fn flush_for_dev_eui(dev_eui: &EUI64) -> Result<(), Error> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub async fn get_pending_for_dev_eui(dev_eui: &EUI64) -> Result<DeviceQueueItem, Error> {
|
pub async fn get_pending_for_dev_eui(dev_eui: &EUI64) -> Result<DeviceQueueItem, Error> {
|
||||||
let mut c = get_async_db_conn().await?;
|
|
||||||
let qi = device_queue_item::dsl::device_queue_item
|
let qi = device_queue_item::dsl::device_queue_item
|
||||||
.filter(
|
.filter(
|
||||||
device_queue_item::dev_eui
|
device_queue_item::dev_eui
|
||||||
.eq(&dev_eui)
|
.eq(&dev_eui)
|
||||||
.and(device_queue_item::is_pending.eq(true)),
|
.and(device_queue_item::is_pending.eq(true)),
|
||||||
)
|
)
|
||||||
.first(&mut c)
|
.first(&mut get_async_db_conn().await?)
|
||||||
.await
|
.await
|
||||||
.map_err(|e| Error::from_diesel(e, dev_eui.to_string()))?;
|
.map_err(|e| Error::from_diesel(e, dev_eui.to_string()))?;
|
||||||
Ok(qi)
|
Ok(qi)
|
||||||
}
|
}
|
||||||
|
|
||||||
pub async fn get_max_f_cnt_down(dev_eui: EUI64) -> Result<Option<i64>, Error> {
|
pub async fn get_max_f_cnt_down(dev_eui: EUI64) -> Result<Option<i64>, Error> {
|
||||||
let mut c = get_async_db_conn().await?;
|
|
||||||
Ok(device_queue_item::dsl::device_queue_item
|
Ok(device_queue_item::dsl::device_queue_item
|
||||||
.select(dsl::max(device_queue_item::f_cnt_down))
|
.select(dsl::max(device_queue_item::f_cnt_down))
|
||||||
.filter(device_queue_item::dsl::dev_eui.eq(dev_eui))
|
.filter(device_queue_item::dsl::dev_eui.eq(dev_eui))
|
||||||
.first(&mut c)
|
.first(&mut get_async_db_conn().await?)
|
||||||
.await?)
|
.await?)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -154,10 +154,9 @@ pub async fn create(gw: Gateway) -> Result<Gateway, Error> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub async fn get(gateway_id: &EUI64) -> Result<Gateway, Error> {
|
pub async fn get(gateway_id: &EUI64) -> Result<Gateway, Error> {
|
||||||
let mut c = get_async_db_conn().await?;
|
|
||||||
let gw = gateway::dsl::gateway
|
let gw = gateway::dsl::gateway
|
||||||
.find(&gateway_id)
|
.find(&gateway_id)
|
||||||
.first(&mut c)
|
.first(&mut get_async_db_conn().await?)
|
||||||
.await
|
.await
|
||||||
.map_err(|e| Error::from_diesel(e, gateway_id.to_string()))?;
|
.map_err(|e| Error::from_diesel(e, gateway_id.to_string()))?;
|
||||||
Ok(gw)
|
Ok(gw)
|
||||||
@ -165,7 +164,7 @@ pub async fn get(gateway_id: &EUI64) -> Result<Gateway, Error> {
|
|||||||
|
|
||||||
pub async fn update(gw: Gateway) -> Result<Gateway, Error> {
|
pub async fn update(gw: Gateway) -> Result<Gateway, Error> {
|
||||||
gw.validate()?;
|
gw.validate()?;
|
||||||
let mut c = get_async_db_conn().await?;
|
|
||||||
let gw: Gateway = diesel::update(gateway::dsl::gateway.find(&gw.gateway_id))
|
let gw: Gateway = diesel::update(gateway::dsl::gateway.find(&gw.gateway_id))
|
||||||
.set((
|
.set((
|
||||||
gateway::updated_at.eq(Utc::now()),
|
gateway::updated_at.eq(Utc::now()),
|
||||||
@ -177,7 +176,7 @@ pub async fn update(gw: Gateway) -> Result<Gateway, Error> {
|
|||||||
gateway::stats_interval_secs.eq(&gw.stats_interval_secs),
|
gateway::stats_interval_secs.eq(&gw.stats_interval_secs),
|
||||||
gateway::tags.eq(&gw.tags),
|
gateway::tags.eq(&gw.tags),
|
||||||
))
|
))
|
||||||
.get_result(&mut c)
|
.get_result(&mut get_async_db_conn().await?)
|
||||||
.await
|
.await
|
||||||
.map_err(|e| Error::from_diesel(e, gw.gateway_id.to_string()))?;
|
.map_err(|e| Error::from_diesel(e, gw.gateway_id.to_string()))?;
|
||||||
info!(
|
info!(
|
||||||
@ -189,13 +188,13 @@ pub async fn update(gw: Gateway) -> Result<Gateway, Error> {
|
|||||||
|
|
||||||
pub async fn update_state(id: &EUI64, props: &HashMap<String, String>) -> Result<Gateway, Error> {
|
pub async fn update_state(id: &EUI64, props: &HashMap<String, String>) -> Result<Gateway, Error> {
|
||||||
let props = fields::KeyValue::new(props.clone());
|
let props = fields::KeyValue::new(props.clone());
|
||||||
let mut c = get_async_db_conn().await?;
|
|
||||||
let gw: Gateway = diesel::update(gateway::dsl::gateway.find(&id))
|
let gw: Gateway = diesel::update(gateway::dsl::gateway.find(&id))
|
||||||
.set((
|
.set((
|
||||||
gateway::last_seen_at.eq(Some(Utc::now())),
|
gateway::last_seen_at.eq(Some(Utc::now())),
|
||||||
gateway::properties.eq(props),
|
gateway::properties.eq(props),
|
||||||
))
|
))
|
||||||
.get_result(&mut c)
|
.get_result(&mut get_async_db_conn().await?)
|
||||||
.await
|
.await
|
||||||
.map_err(|e| Error::from_diesel(e, id.to_string()))?;
|
.map_err(|e| Error::from_diesel(e, id.to_string()))?;
|
||||||
|
|
||||||
@ -215,7 +214,7 @@ pub async fn update_state_and_loc(
|
|||||||
props: &HashMap<String, String>,
|
props: &HashMap<String, String>,
|
||||||
) -> Result<Gateway, Error> {
|
) -> Result<Gateway, Error> {
|
||||||
let props = fields::KeyValue::new(props.clone());
|
let props = fields::KeyValue::new(props.clone());
|
||||||
let mut c = get_async_db_conn().await?;
|
|
||||||
let gw: Gateway = diesel::update(gateway::dsl::gateway.find(&id))
|
let gw: Gateway = diesel::update(gateway::dsl::gateway.find(&id))
|
||||||
.set((
|
.set((
|
||||||
gateway::last_seen_at.eq(Some(Utc::now())),
|
gateway::last_seen_at.eq(Some(Utc::now())),
|
||||||
@ -224,7 +223,7 @@ pub async fn update_state_and_loc(
|
|||||||
gateway::altitude.eq(alt),
|
gateway::altitude.eq(alt),
|
||||||
gateway::properties.eq(props),
|
gateway::properties.eq(props),
|
||||||
))
|
))
|
||||||
.get_result(&mut c)
|
.get_result(&mut get_async_db_conn().await?)
|
||||||
.await
|
.await
|
||||||
.map_err(|e| Error::from_diesel(e, id.to_string()))?;
|
.map_err(|e| Error::from_diesel(e, id.to_string()))?;
|
||||||
|
|
||||||
@ -237,10 +236,9 @@ pub async fn update_state_and_loc(
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub async fn update_tls_cert(id: &EUI64, cert: &[u8]) -> Result<Gateway, Error> {
|
pub async fn update_tls_cert(id: &EUI64, cert: &[u8]) -> Result<Gateway, Error> {
|
||||||
let mut c = get_async_db_conn().await?;
|
|
||||||
let gw: Gateway = diesel::update(gateway::dsl::gateway.find(&id))
|
let gw: Gateway = diesel::update(gateway::dsl::gateway.find(&id))
|
||||||
.set(gateway::tls_certificate.eq(cert))
|
.set(gateway::tls_certificate.eq(cert))
|
||||||
.get_result(&mut c)
|
.get_result(&mut get_async_db_conn().await?)
|
||||||
.await
|
.await
|
||||||
.map_err(|e| Error::from_diesel(e, id.to_string()))?;
|
.map_err(|e| Error::from_diesel(e, id.to_string()))?;
|
||||||
info!(
|
info!(
|
||||||
@ -252,9 +250,8 @@ pub async fn update_tls_cert(id: &EUI64, cert: &[u8]) -> Result<Gateway, Error>
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub async fn delete(gateway_id: &EUI64) -> Result<(), Error> {
|
pub async fn delete(gateway_id: &EUI64) -> Result<(), Error> {
|
||||||
let mut c = get_async_db_conn().await?;
|
|
||||||
let ra = diesel::delete(gateway::dsl::gateway.find(&gateway_id))
|
let ra = diesel::delete(gateway::dsl::gateway.find(&gateway_id))
|
||||||
.execute(&mut c)
|
.execute(&mut get_async_db_conn().await?)
|
||||||
.await?;
|
.await?;
|
||||||
if ra == 0 {
|
if ra == 0 {
|
||||||
return Err(Error::NotFound(gateway_id.to_string()));
|
return Err(Error::NotFound(gateway_id.to_string()));
|
||||||
@ -267,7 +264,6 @@ pub async fn delete(gateway_id: &EUI64) -> Result<(), Error> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub async fn get_count(filters: &Filters) -> Result<i64, Error> {
|
pub async fn get_count(filters: &Filters) -> Result<i64, Error> {
|
||||||
let mut c = get_async_db_conn().await?;
|
|
||||||
let mut q = gateway::dsl::gateway
|
let mut q = gateway::dsl::gateway
|
||||||
.select(dsl::count_star())
|
.select(dsl::count_star())
|
||||||
.distinct()
|
.distinct()
|
||||||
@ -286,7 +282,7 @@ pub async fn get_count(filters: &Filters) -> Result<i64, Error> {
|
|||||||
q = q.filter(gateway::dsl::name.ilike(format!("%{}%", search)));
|
q = q.filter(gateway::dsl::name.ilike(format!("%{}%", search)));
|
||||||
}
|
}
|
||||||
|
|
||||||
Ok(q.first(&mut c).await?)
|
Ok(q.first(&mut get_async_db_conn().await?).await?)
|
||||||
}
|
}
|
||||||
|
|
||||||
pub async fn list(
|
pub async fn list(
|
||||||
@ -294,7 +290,6 @@ pub async fn list(
|
|||||||
offset: i64,
|
offset: i64,
|
||||||
filters: &Filters,
|
filters: &Filters,
|
||||||
) -> Result<Vec<GatewayListItem>, Error> {
|
) -> Result<Vec<GatewayListItem>, Error> {
|
||||||
let mut c = get_async_db_conn().await?;
|
|
||||||
let mut q = gateway::dsl::gateway
|
let mut q = gateway::dsl::gateway
|
||||||
.left_join(multicast_group_gateway::table)
|
.left_join(multicast_group_gateway::table)
|
||||||
.select((
|
.select((
|
||||||
@ -330,13 +325,12 @@ pub async fn list(
|
|||||||
.order_by(gateway::dsl::name)
|
.order_by(gateway::dsl::name)
|
||||||
.limit(limit)
|
.limit(limit)
|
||||||
.offset(offset)
|
.offset(offset)
|
||||||
.load(&mut c)
|
.load(&mut get_async_db_conn().await?)
|
||||||
.await?;
|
.await?;
|
||||||
Ok(items)
|
Ok(items)
|
||||||
}
|
}
|
||||||
|
|
||||||
pub async fn get_meta(gateway_id: &EUI64) -> Result<GatewayMeta, Error> {
|
pub async fn get_meta(gateway_id: &EUI64) -> Result<GatewayMeta, Error> {
|
||||||
let mut c = get_async_db_conn().await?;
|
|
||||||
let meta = gateway::dsl::gateway
|
let meta = gateway::dsl::gateway
|
||||||
.inner_join(tenant::table)
|
.inner_join(tenant::table)
|
||||||
.select((
|
.select((
|
||||||
@ -349,14 +343,13 @@ pub async fn get_meta(gateway_id: &EUI64) -> Result<GatewayMeta, Error> {
|
|||||||
tenant::private_gateways_down,
|
tenant::private_gateways_down,
|
||||||
))
|
))
|
||||||
.filter(gateway::dsl::gateway_id.eq(&gateway_id))
|
.filter(gateway::dsl::gateway_id.eq(&gateway_id))
|
||||||
.first(&mut c)
|
.first(&mut get_async_db_conn().await?)
|
||||||
.await
|
.await
|
||||||
.map_err(|e| Error::from_diesel(e, gateway_id.to_string()))?;
|
.map_err(|e| Error::from_diesel(e, gateway_id.to_string()))?;
|
||||||
Ok(meta)
|
Ok(meta)
|
||||||
}
|
}
|
||||||
|
|
||||||
pub async fn get_counts_by_state(tenant_id: &Option<Uuid>) -> Result<GatewayCountsByState, Error> {
|
pub async fn get_counts_by_state(tenant_id: &Option<Uuid>) -> Result<GatewayCountsByState, Error> {
|
||||||
let mut c = get_async_db_conn().await?;
|
|
||||||
let counts: GatewayCountsByState = diesel::sql_query(r#"
|
let counts: GatewayCountsByState = diesel::sql_query(r#"
|
||||||
select
|
select
|
||||||
coalesce(sum(case when last_seen_at is null then 1 end), 0) as never_seen_count,
|
coalesce(sum(case when last_seen_at is null then 1 end), 0) as never_seen_count,
|
||||||
@ -366,7 +359,7 @@ pub async fn get_counts_by_state(tenant_id: &Option<Uuid>) -> Result<GatewayCoun
|
|||||||
gateway
|
gateway
|
||||||
where
|
where
|
||||||
$1 is null or tenant_id = $1
|
$1 is null or tenant_id = $1
|
||||||
"#).bind::<diesel::sql_types::Nullable<diesel::sql_types::Uuid>, _>(tenant_id).get_result(&mut c).await?;
|
"#).bind::<diesel::sql_types::Nullable<diesel::sql_types::Uuid>, _>(tenant_id).get_result(&mut get_async_db_conn().await?).await?;
|
||||||
Ok(counts)
|
Ok(counts)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -11,13 +11,12 @@ use lrwn::EUI64;
|
|||||||
pub async fn get_all_device_data(
|
pub async fn get_all_device_data(
|
||||||
dev_eui: EUI64,
|
dev_eui: EUI64,
|
||||||
) -> Result<(Device, Application, Tenant, DeviceProfile), Error> {
|
) -> Result<(Device, Application, Tenant, DeviceProfile), Error> {
|
||||||
let mut c = get_async_db_conn().await?;
|
|
||||||
let res = device::table
|
let res = device::table
|
||||||
.inner_join(application::table)
|
.inner_join(application::table)
|
||||||
.inner_join(tenant::table.on(application::dsl::tenant_id.eq(tenant::dsl::id)))
|
.inner_join(tenant::table.on(application::dsl::tenant_id.eq(tenant::dsl::id)))
|
||||||
.inner_join(device_profile::table)
|
.inner_join(device_profile::table)
|
||||||
.filter(device::dsl::dev_eui.eq(&dev_eui))
|
.filter(device::dsl::dev_eui.eq(&dev_eui))
|
||||||
.first::<(Device, Application, Tenant, DeviceProfile)>(&mut c)
|
.first::<(Device, Application, Tenant, DeviceProfile)>(&mut get_async_db_conn().await?)
|
||||||
.await
|
.await
|
||||||
.map_err(|e| Error::from_diesel(e, dev_eui.to_string()))?;
|
.map_err(|e| Error::from_diesel(e, dev_eui.to_string()))?;
|
||||||
Ok(res)
|
Ok(res)
|
||||||
|
@ -132,10 +132,10 @@ impl Default for MulticastGroupQueueItem {
|
|||||||
|
|
||||||
pub async fn create(mg: MulticastGroup) -> Result<MulticastGroup, Error> {
|
pub async fn create(mg: MulticastGroup) -> Result<MulticastGroup, Error> {
|
||||||
mg.validate()?;
|
mg.validate()?;
|
||||||
let mut c = get_async_db_conn().await?;
|
|
||||||
let mg: MulticastGroup = diesel::insert_into(multicast_group::table)
|
let mg: MulticastGroup = diesel::insert_into(multicast_group::table)
|
||||||
.values(&mg)
|
.values(&mg)
|
||||||
.get_result(&mut c)
|
.get_result(&mut get_async_db_conn().await?)
|
||||||
.await
|
.await
|
||||||
.map_err(|e| Error::from_diesel(e, mg.id.to_string()))?;
|
.map_err(|e| Error::from_diesel(e, mg.id.to_string()))?;
|
||||||
info!(id = %mg.id, "Multicast-group created");
|
info!(id = %mg.id, "Multicast-group created");
|
||||||
@ -143,17 +143,16 @@ pub async fn create(mg: MulticastGroup) -> Result<MulticastGroup, Error> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub async fn get(id: &Uuid) -> Result<MulticastGroup, Error> {
|
pub async fn get(id: &Uuid) -> Result<MulticastGroup, Error> {
|
||||||
let mut c = get_async_db_conn().await?;
|
|
||||||
multicast_group::dsl::multicast_group
|
multicast_group::dsl::multicast_group
|
||||||
.find(&id)
|
.find(&id)
|
||||||
.first(&mut c)
|
.first(&mut get_async_db_conn().await?)
|
||||||
.await
|
.await
|
||||||
.map_err(|e| Error::from_diesel(e, id.to_string()))
|
.map_err(|e| Error::from_diesel(e, id.to_string()))
|
||||||
}
|
}
|
||||||
|
|
||||||
pub async fn update(mg: MulticastGroup) -> Result<MulticastGroup, Error> {
|
pub async fn update(mg: MulticastGroup) -> Result<MulticastGroup, Error> {
|
||||||
mg.validate()?;
|
mg.validate()?;
|
||||||
let mut c = get_async_db_conn().await?;
|
|
||||||
let mg: MulticastGroup = diesel::update(multicast_group::dsl::multicast_group.find(&mg.id))
|
let mg: MulticastGroup = diesel::update(multicast_group::dsl::multicast_group.find(&mg.id))
|
||||||
.set((
|
.set((
|
||||||
multicast_group::updated_at.eq(Utc::now()),
|
multicast_group::updated_at.eq(Utc::now()),
|
||||||
@ -169,7 +168,7 @@ pub async fn update(mg: MulticastGroup) -> Result<MulticastGroup, Error> {
|
|||||||
multicast_group::class_b_ping_slot_period.eq(&mg.class_b_ping_slot_period),
|
multicast_group::class_b_ping_slot_period.eq(&mg.class_b_ping_slot_period),
|
||||||
multicast_group::class_c_scheduling_type.eq(&mg.class_c_scheduling_type),
|
multicast_group::class_c_scheduling_type.eq(&mg.class_c_scheduling_type),
|
||||||
))
|
))
|
||||||
.get_result(&mut c)
|
.get_result(&mut get_async_db_conn().await?)
|
||||||
.await
|
.await
|
||||||
.map_err(|e| Error::from_diesel(e, mg.id.to_string()))?;
|
.map_err(|e| Error::from_diesel(e, mg.id.to_string()))?;
|
||||||
info!(id = %mg.id, "Multicast-group updated");
|
info!(id = %mg.id, "Multicast-group updated");
|
||||||
@ -177,9 +176,8 @@ pub async fn update(mg: MulticastGroup) -> Result<MulticastGroup, Error> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub async fn delete(id: &Uuid) -> Result<(), Error> {
|
pub async fn delete(id: &Uuid) -> Result<(), Error> {
|
||||||
let mut c = get_async_db_conn().await?;
|
|
||||||
let ra = diesel::delete(multicast_group::dsl::multicast_group.find(&id))
|
let ra = diesel::delete(multicast_group::dsl::multicast_group.find(&id))
|
||||||
.execute(&mut c)
|
.execute(&mut get_async_db_conn().await?)
|
||||||
.await?;
|
.await?;
|
||||||
if ra == 0 {
|
if ra == 0 {
|
||||||
return Err(Error::NotFound(id.to_string()));
|
return Err(Error::NotFound(id.to_string()));
|
||||||
@ -189,7 +187,6 @@ pub async fn delete(id: &Uuid) -> Result<(), Error> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub async fn get_count(filters: &Filters) -> Result<i64, Error> {
|
pub async fn get_count(filters: &Filters) -> Result<i64, Error> {
|
||||||
let mut c = get_async_db_conn().await?;
|
|
||||||
let mut q = multicast_group::dsl::multicast_group
|
let mut q = multicast_group::dsl::multicast_group
|
||||||
.select(dsl::count_star())
|
.select(dsl::count_star())
|
||||||
.into_boxed();
|
.into_boxed();
|
||||||
@ -202,7 +199,7 @@ pub async fn get_count(filters: &Filters) -> Result<i64, Error> {
|
|||||||
q = q.filter(multicast_group::dsl::name.ilike(format!("%{}%", search)));
|
q = q.filter(multicast_group::dsl::name.ilike(format!("%{}%", search)));
|
||||||
}
|
}
|
||||||
|
|
||||||
q.first(&mut c)
|
q.first(&mut get_async_db_conn().await?)
|
||||||
.await
|
.await
|
||||||
.map_err(|e| Error::from_diesel(e, "".into()))
|
.map_err(|e| Error::from_diesel(e, "".into()))
|
||||||
}
|
}
|
||||||
@ -212,7 +209,6 @@ pub async fn list(
|
|||||||
offset: i64,
|
offset: i64,
|
||||||
filters: &Filters,
|
filters: &Filters,
|
||||||
) -> Result<Vec<MulticastGroupListItem>, Error> {
|
) -> Result<Vec<MulticastGroupListItem>, Error> {
|
||||||
let mut c = get_async_db_conn().await?;
|
|
||||||
let mut q = multicast_group::dsl::multicast_group
|
let mut q = multicast_group::dsl::multicast_group
|
||||||
.select((
|
.select((
|
||||||
multicast_group::id,
|
multicast_group::id,
|
||||||
@ -235,7 +231,7 @@ pub async fn list(
|
|||||||
q.order_by(multicast_group::dsl::name)
|
q.order_by(multicast_group::dsl::name)
|
||||||
.limit(limit)
|
.limit(limit)
|
||||||
.offset(offset)
|
.offset(offset)
|
||||||
.load(&mut c)
|
.load(&mut get_async_db_conn().await?)
|
||||||
.await
|
.await
|
||||||
.map_err(|e| Error::from_diesel(e, "".into()))
|
.map_err(|e| Error::from_diesel(e, "".into()))
|
||||||
}
|
}
|
||||||
@ -282,13 +278,12 @@ pub async fn add_device(group_id: &Uuid, dev_eui: &EUI64) -> Result<(), Error> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub async fn remove_device(group_id: &Uuid, dev_eui: &EUI64) -> Result<(), Error> {
|
pub async fn remove_device(group_id: &Uuid, dev_eui: &EUI64) -> Result<(), Error> {
|
||||||
let mut c = get_async_db_conn().await?;
|
|
||||||
let ra = diesel::delete(
|
let ra = diesel::delete(
|
||||||
multicast_group_device::dsl::multicast_group_device
|
multicast_group_device::dsl::multicast_group_device
|
||||||
.filter(multicast_group_device::multicast_group_id.eq(&group_id))
|
.filter(multicast_group_device::multicast_group_id.eq(&group_id))
|
||||||
.filter(multicast_group_device::dev_eui.eq(&dev_eui)),
|
.filter(multicast_group_device::dev_eui.eq(&dev_eui)),
|
||||||
)
|
)
|
||||||
.execute(&mut c)
|
.execute(&mut get_async_db_conn().await?)
|
||||||
.await?;
|
.await?;
|
||||||
if ra == 0 {
|
if ra == 0 {
|
||||||
return Err(Error::NotFound(format!(
|
return Err(Error::NotFound(format!(
|
||||||
@ -349,13 +344,12 @@ pub async fn add_gateway(group_id: &Uuid, gateway_id: &EUI64) -> Result<(), Erro
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub async fn remove_gateway(group_id: &Uuid, gateway_id: &EUI64) -> Result<(), Error> {
|
pub async fn remove_gateway(group_id: &Uuid, gateway_id: &EUI64) -> Result<(), Error> {
|
||||||
let mut c = get_async_db_conn().await?;
|
|
||||||
let ra = diesel::delete(
|
let ra = diesel::delete(
|
||||||
multicast_group_gateway::dsl::multicast_group_gateway
|
multicast_group_gateway::dsl::multicast_group_gateway
|
||||||
.filter(multicast_group_gateway::multicast_group_id.eq(&group_id))
|
.filter(multicast_group_gateway::multicast_group_id.eq(&group_id))
|
||||||
.filter(multicast_group_gateway::gateway_id.eq(&gateway_id)),
|
.filter(multicast_group_gateway::gateway_id.eq(&gateway_id)),
|
||||||
)
|
)
|
||||||
.execute(&mut c)
|
.execute(&mut get_async_db_conn().await?)
|
||||||
.await?;
|
.await?;
|
||||||
if ra == 0 {
|
if ra == 0 {
|
||||||
return Err(Error::NotFound(format!(
|
return Err(Error::NotFound(format!(
|
||||||
@ -368,21 +362,19 @@ pub async fn remove_gateway(group_id: &Uuid, gateway_id: &EUI64) -> Result<(), E
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub async fn get_dev_euis(group_id: &Uuid) -> Result<Vec<EUI64>, Error> {
|
pub async fn get_dev_euis(group_id: &Uuid) -> Result<Vec<EUI64>, Error> {
|
||||||
let mut c = get_async_db_conn().await?;
|
|
||||||
multicast_group_device::dsl::multicast_group_device
|
multicast_group_device::dsl::multicast_group_device
|
||||||
.select(multicast_group_device::dev_eui)
|
.select(multicast_group_device::dev_eui)
|
||||||
.filter(multicast_group_device::dsl::multicast_group_id.eq(&group_id))
|
.filter(multicast_group_device::dsl::multicast_group_id.eq(&group_id))
|
||||||
.load(&mut c)
|
.load(&mut get_async_db_conn().await?)
|
||||||
.await
|
.await
|
||||||
.map_err(|e| Error::from_diesel(e, group_id.to_string()))
|
.map_err(|e| Error::from_diesel(e, group_id.to_string()))
|
||||||
}
|
}
|
||||||
|
|
||||||
pub async fn get_gateway_ids(group_id: &Uuid) -> Result<Vec<EUI64>, Error> {
|
pub async fn get_gateway_ids(group_id: &Uuid) -> Result<Vec<EUI64>, Error> {
|
||||||
let mut c = get_async_db_conn().await?;
|
|
||||||
multicast_group_gateway::dsl::multicast_group_gateway
|
multicast_group_gateway::dsl::multicast_group_gateway
|
||||||
.select(multicast_group_gateway::gateway_id)
|
.select(multicast_group_gateway::gateway_id)
|
||||||
.filter(multicast_group_gateway::dsl::multicast_group_id.eq(&group_id))
|
.filter(multicast_group_gateway::dsl::multicast_group_id.eq(&group_id))
|
||||||
.load(&mut c)
|
.load(&mut get_async_db_conn().await?)
|
||||||
.await
|
.await
|
||||||
.map_err(|e| Error::from_diesel(e, group_id.to_string()))
|
.map_err(|e| Error::from_diesel(e, group_id.to_string()))
|
||||||
}
|
}
|
||||||
@ -396,7 +388,6 @@ pub async fn enqueue(
|
|||||||
gateway_ids: &[EUI64],
|
gateway_ids: &[EUI64],
|
||||||
) -> Result<(Vec<Uuid>, u32), Error> {
|
) -> Result<(Vec<Uuid>, u32), Error> {
|
||||||
qi.validate()?;
|
qi.validate()?;
|
||||||
|
|
||||||
let mut c = get_async_db_conn().await?;
|
let mut c = get_async_db_conn().await?;
|
||||||
let conf = config::get();
|
let conf = config::get();
|
||||||
let (ids, f_cnt) = c
|
let (ids, f_cnt) = c
|
||||||
@ -568,9 +559,8 @@ pub async fn enqueue(
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub async fn delete_queue_item(id: &Uuid) -> Result<(), Error> {
|
pub async fn delete_queue_item(id: &Uuid) -> Result<(), Error> {
|
||||||
let mut c = get_async_db_conn().await?;
|
|
||||||
let ra = diesel::delete(multicast_group_queue_item::dsl::multicast_group_queue_item.find(&id))
|
let ra = diesel::delete(multicast_group_queue_item::dsl::multicast_group_queue_item.find(&id))
|
||||||
.execute(&mut c)
|
.execute(&mut get_async_db_conn().await?)
|
||||||
.await?;
|
.await?;
|
||||||
if ra == 0 {
|
if ra == 0 {
|
||||||
return Err(Error::NotFound(id.to_string()));
|
return Err(Error::NotFound(id.to_string()));
|
||||||
@ -580,12 +570,11 @@ pub async fn delete_queue_item(id: &Uuid) -> Result<(), Error> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub async fn flush_queue(multicast_group_id: &Uuid) -> Result<(), Error> {
|
pub async fn flush_queue(multicast_group_id: &Uuid) -> Result<(), Error> {
|
||||||
let mut c = get_async_db_conn().await?;
|
|
||||||
let _ = diesel::delete(
|
let _ = diesel::delete(
|
||||||
multicast_group_queue_item::dsl::multicast_group_queue_item
|
multicast_group_queue_item::dsl::multicast_group_queue_item
|
||||||
.filter(multicast_group_queue_item::multicast_group_id.eq(&multicast_group_id)),
|
.filter(multicast_group_queue_item::multicast_group_id.eq(&multicast_group_id)),
|
||||||
)
|
)
|
||||||
.execute(&mut c)
|
.execute(&mut get_async_db_conn().await?)
|
||||||
.await
|
.await
|
||||||
.map_err(|e| Error::from_diesel(e, multicast_group_id.to_string()))?;
|
.map_err(|e| Error::from_diesel(e, multicast_group_id.to_string()))?;
|
||||||
info!(multicast_group_id = %multicast_group_id, "Multicast-group queue flushed");
|
info!(multicast_group_id = %multicast_group_id, "Multicast-group queue flushed");
|
||||||
@ -593,11 +582,10 @@ pub async fn flush_queue(multicast_group_id: &Uuid) -> Result<(), Error> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub async fn get_queue(multicast_group_id: &Uuid) -> Result<Vec<MulticastGroupQueueItem>, Error> {
|
pub async fn get_queue(multicast_group_id: &Uuid) -> Result<Vec<MulticastGroupQueueItem>, Error> {
|
||||||
let mut c = get_async_db_conn().await?;
|
|
||||||
multicast_group_queue_item::dsl::multicast_group_queue_item
|
multicast_group_queue_item::dsl::multicast_group_queue_item
|
||||||
.filter(multicast_group_queue_item::dsl::multicast_group_id.eq(&multicast_group_id))
|
.filter(multicast_group_queue_item::dsl::multicast_group_id.eq(&multicast_group_id))
|
||||||
.order_by(multicast_group_queue_item::created_at)
|
.order_by(multicast_group_queue_item::created_at)
|
||||||
.load(&mut c)
|
.load(&mut get_async_db_conn().await?)
|
||||||
.await
|
.await
|
||||||
.map_err(|e| Error::from_diesel(e, multicast_group_id.to_string()))
|
.map_err(|e| Error::from_diesel(e, multicast_group_id.to_string()))
|
||||||
}
|
}
|
||||||
@ -650,10 +638,9 @@ pub mod test {
|
|||||||
use crate::test;
|
use crate::test;
|
||||||
|
|
||||||
pub async fn get_queue_item(id: &Uuid) -> Result<MulticastGroupQueueItem, Error> {
|
pub async fn get_queue_item(id: &Uuid) -> Result<MulticastGroupQueueItem, Error> {
|
||||||
let mut c = get_async_db_conn().await?;
|
|
||||||
multicast_group_queue_item::dsl::multicast_group_queue_item
|
multicast_group_queue_item::dsl::multicast_group_queue_item
|
||||||
.find(&id)
|
.find(&id)
|
||||||
.first(&mut c)
|
.first(&mut get_async_db_conn().await?)
|
||||||
.await
|
.await
|
||||||
.map_err(|e| Error::from_diesel(e, id.to_string()))
|
.map_err(|e| Error::from_diesel(e, id.to_string()))
|
||||||
}
|
}
|
||||||
|
@ -43,7 +43,6 @@ pub struct DeviceListItem {
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub async fn get_relay_count(filters: &RelayFilters) -> Result<i64, Error> {
|
pub async fn get_relay_count(filters: &RelayFilters) -> Result<i64, Error> {
|
||||||
let mut c = get_async_db_conn().await?;
|
|
||||||
let mut q = device::dsl::device
|
let mut q = device::dsl::device
|
||||||
.select(dsl::count_star())
|
.select(dsl::count_star())
|
||||||
.inner_join(device_profile::table)
|
.inner_join(device_profile::table)
|
||||||
@ -54,7 +53,7 @@ pub async fn get_relay_count(filters: &RelayFilters) -> Result<i64, Error> {
|
|||||||
q = q.filter(device::dsl::application_id.eq(application_id));
|
q = q.filter(device::dsl::application_id.eq(application_id));
|
||||||
}
|
}
|
||||||
|
|
||||||
Ok(q.first(&mut c).await?)
|
Ok(q.first(&mut get_async_db_conn().await?).await?)
|
||||||
}
|
}
|
||||||
|
|
||||||
pub async fn list_relays(
|
pub async fn list_relays(
|
||||||
@ -62,7 +61,6 @@ pub async fn list_relays(
|
|||||||
offset: i64,
|
offset: i64,
|
||||||
filters: &RelayFilters,
|
filters: &RelayFilters,
|
||||||
) -> Result<Vec<RelayListItem>, Error> {
|
) -> Result<Vec<RelayListItem>, Error> {
|
||||||
let mut c = get_async_db_conn().await?;
|
|
||||||
let mut q = device::dsl::device
|
let mut q = device::dsl::device
|
||||||
.inner_join(device_profile::table)
|
.inner_join(device_profile::table)
|
||||||
.select((device::dev_eui, device::name))
|
.select((device::dev_eui, device::name))
|
||||||
@ -76,13 +74,12 @@ pub async fn list_relays(
|
|||||||
q.order_by(device::dsl::name)
|
q.order_by(device::dsl::name)
|
||||||
.limit(limit)
|
.limit(limit)
|
||||||
.offset(offset)
|
.offset(offset)
|
||||||
.load(&mut c)
|
.load(&mut get_async_db_conn().await?)
|
||||||
.await
|
.await
|
||||||
.map_err(|e| Error::from_diesel(e, "".into()))
|
.map_err(|e| Error::from_diesel(e, "".into()))
|
||||||
}
|
}
|
||||||
|
|
||||||
pub async fn get_device_count(filters: &DeviceFilters) -> Result<i64, Error> {
|
pub async fn get_device_count(filters: &DeviceFilters) -> Result<i64, Error> {
|
||||||
let mut c = get_async_db_conn().await?;
|
|
||||||
let mut q = relay_device::dsl::relay_device
|
let mut q = relay_device::dsl::relay_device
|
||||||
.select(dsl::count_star())
|
.select(dsl::count_star())
|
||||||
.into_boxed();
|
.into_boxed();
|
||||||
@ -91,7 +88,7 @@ pub async fn get_device_count(filters: &DeviceFilters) -> Result<i64, Error> {
|
|||||||
q = q.filter(relay_device::dsl::relay_dev_eui.eq(relay_dev_eui));
|
q = q.filter(relay_device::dsl::relay_dev_eui.eq(relay_dev_eui));
|
||||||
}
|
}
|
||||||
|
|
||||||
q.first(&mut c)
|
q.first(&mut get_async_db_conn().await?)
|
||||||
.await
|
.await
|
||||||
.map_err(|e| Error::from_diesel(e, "".into()))
|
.map_err(|e| Error::from_diesel(e, "".into()))
|
||||||
}
|
}
|
||||||
@ -101,7 +98,6 @@ pub async fn list_devices(
|
|||||||
offset: i64,
|
offset: i64,
|
||||||
filters: &DeviceFilters,
|
filters: &DeviceFilters,
|
||||||
) -> Result<Vec<DeviceListItem>, Error> {
|
) -> Result<Vec<DeviceListItem>, Error> {
|
||||||
let mut c = get_async_db_conn().await?;
|
|
||||||
let mut q = relay_device::dsl::relay_device
|
let mut q = relay_device::dsl::relay_device
|
||||||
.inner_join(device::table.on(relay_device::dsl::dev_eui.eq(device::dsl::dev_eui)))
|
.inner_join(device::table.on(relay_device::dsl::dev_eui.eq(device::dsl::dev_eui)))
|
||||||
.inner_join(
|
.inner_join(
|
||||||
@ -125,7 +121,7 @@ pub async fn list_devices(
|
|||||||
q.order_by(device::dsl::name)
|
q.order_by(device::dsl::name)
|
||||||
.limit(limit)
|
.limit(limit)
|
||||||
.offset(offset)
|
.offset(offset)
|
||||||
.load(&mut c)
|
.load(&mut get_async_db_conn().await?)
|
||||||
.await
|
.await
|
||||||
.map_err(|e| Error::from_diesel(e, "".into()))
|
.map_err(|e| Error::from_diesel(e, "".into()))
|
||||||
}
|
}
|
||||||
@ -219,13 +215,12 @@ pub async fn add_device(relay_dev_eui: EUI64, device_dev_eui: EUI64) -> Result<(
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub async fn remove_device(relay_dev_eui: EUI64, device_dev_eui: EUI64) -> Result<(), Error> {
|
pub async fn remove_device(relay_dev_eui: EUI64, device_dev_eui: EUI64) -> Result<(), Error> {
|
||||||
let mut c = get_async_db_conn().await?;
|
|
||||||
let ra = diesel::delete(
|
let ra = diesel::delete(
|
||||||
relay_device::dsl::relay_device
|
relay_device::dsl::relay_device
|
||||||
.filter(relay_device::relay_dev_eui.eq(&relay_dev_eui))
|
.filter(relay_device::relay_dev_eui.eq(&relay_dev_eui))
|
||||||
.filter(relay_device::dev_eui.eq(&device_dev_eui)),
|
.filter(relay_device::dev_eui.eq(&device_dev_eui)),
|
||||||
)
|
)
|
||||||
.execute(&mut c)
|
.execute(&mut get_async_db_conn().await?)
|
||||||
.await?;
|
.await?;
|
||||||
if ra == 0 {
|
if ra == 0 {
|
||||||
return Err(Error::NotFound(format!(
|
return Err(Error::NotFound(format!(
|
||||||
|
@ -48,7 +48,6 @@ pub async fn global_search(
|
|||||||
let query = format!("%{}%", query);
|
let query = format!("%{}%", query);
|
||||||
let tags = serde_json::to_value(tags).context("To serde_json value")?;
|
let tags = serde_json::to_value(tags).context("To serde_json value")?;
|
||||||
|
|
||||||
let mut c = get_async_db_conn().await?;
|
|
||||||
let res: Vec<SearchResult> = diesel::sql_query(
|
let res: Vec<SearchResult> = diesel::sql_query(
|
||||||
r#"
|
r#"
|
||||||
-- device
|
-- device
|
||||||
@ -157,7 +156,7 @@ pub async fn global_search(
|
|||||||
.bind::<diesel::sql_types::BigInt, _>(limit as i64)
|
.bind::<diesel::sql_types::BigInt, _>(limit as i64)
|
||||||
.bind::<diesel::sql_types::BigInt, _>(offset as i64)
|
.bind::<diesel::sql_types::BigInt, _>(offset as i64)
|
||||||
.bind::<diesel::sql_types::Jsonb, _>(tags)
|
.bind::<diesel::sql_types::Jsonb, _>(tags)
|
||||||
.load(&mut c).await?;
|
.load(&mut get_async_db_conn().await?).await?;
|
||||||
|
|
||||||
Ok(res)
|
Ok(res)
|
||||||
}
|
}
|
||||||
|
@ -104,10 +104,10 @@ pub struct Filters {
|
|||||||
|
|
||||||
pub async fn create(t: Tenant) -> Result<Tenant, Error> {
|
pub async fn create(t: Tenant) -> Result<Tenant, Error> {
|
||||||
t.validate()?;
|
t.validate()?;
|
||||||
let mut c = get_async_db_conn().await?;
|
|
||||||
let t: Tenant = diesel::insert_into(tenant::table)
|
let t: Tenant = diesel::insert_into(tenant::table)
|
||||||
.values(&t)
|
.values(&t)
|
||||||
.get_result(&mut c)
|
.get_result(&mut get_async_db_conn().await?)
|
||||||
.await
|
.await
|
||||||
.map_err(|e| Error::from_diesel(e, t.id.to_string()))?;
|
.map_err(|e| Error::from_diesel(e, t.id.to_string()))?;
|
||||||
info!(id = %t.id, "Tenant created");
|
info!(id = %t.id, "Tenant created");
|
||||||
@ -115,10 +115,9 @@ pub async fn create(t: Tenant) -> Result<Tenant, Error> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub async fn get(id: &Uuid) -> Result<Tenant, Error> {
|
pub async fn get(id: &Uuid) -> Result<Tenant, Error> {
|
||||||
let mut c = get_async_db_conn().await?;
|
|
||||||
let t = tenant::dsl::tenant
|
let t = tenant::dsl::tenant
|
||||||
.find(&id)
|
.find(&id)
|
||||||
.first(&mut c)
|
.first(&mut get_async_db_conn().await?)
|
||||||
.await
|
.await
|
||||||
.map_err(|e| Error::from_diesel(e, id.to_string()))?;
|
.map_err(|e| Error::from_diesel(e, id.to_string()))?;
|
||||||
Ok(t)
|
Ok(t)
|
||||||
@ -126,7 +125,7 @@ pub async fn get(id: &Uuid) -> Result<Tenant, Error> {
|
|||||||
|
|
||||||
pub async fn update(t: Tenant) -> Result<Tenant, Error> {
|
pub async fn update(t: Tenant) -> Result<Tenant, Error> {
|
||||||
t.validate()?;
|
t.validate()?;
|
||||||
let mut c = get_async_db_conn().await?;
|
|
||||||
let t: Tenant = diesel::update(tenant::dsl::tenant.find(&t.id))
|
let t: Tenant = diesel::update(tenant::dsl::tenant.find(&t.id))
|
||||||
.set((
|
.set((
|
||||||
tenant::updated_at.eq(Utc::now()),
|
tenant::updated_at.eq(Utc::now()),
|
||||||
@ -139,7 +138,7 @@ pub async fn update(t: Tenant) -> Result<Tenant, Error> {
|
|||||||
tenant::private_gateways_down.eq(&t.private_gateways_down),
|
tenant::private_gateways_down.eq(&t.private_gateways_down),
|
||||||
tenant::tags.eq(&t.tags),
|
tenant::tags.eq(&t.tags),
|
||||||
))
|
))
|
||||||
.get_result(&mut c)
|
.get_result(&mut get_async_db_conn().await?)
|
||||||
.await
|
.await
|
||||||
.map_err(|e| Error::from_diesel(e, t.id.to_string()))?;
|
.map_err(|e| Error::from_diesel(e, t.id.to_string()))?;
|
||||||
info!(id = %t.id, "Tenant updated");
|
info!(id = %t.id, "Tenant updated");
|
||||||
@ -147,9 +146,8 @@ pub async fn update(t: Tenant) -> Result<Tenant, Error> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub async fn delete(id: &Uuid) -> Result<(), Error> {
|
pub async fn delete(id: &Uuid) -> Result<(), Error> {
|
||||||
let mut c = get_async_db_conn().await?;
|
|
||||||
let ra = diesel::delete(tenant::dsl::tenant.find(&id))
|
let ra = diesel::delete(tenant::dsl::tenant.find(&id))
|
||||||
.execute(&mut c)
|
.execute(&mut get_async_db_conn().await?)
|
||||||
.await
|
.await
|
||||||
.map_err(|e| Error::from_diesel(e, id.to_string()))?;
|
.map_err(|e| Error::from_diesel(e, id.to_string()))?;
|
||||||
|
|
||||||
@ -161,7 +159,6 @@ pub async fn delete(id: &Uuid) -> Result<(), Error> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub async fn get_count(filters: &Filters) -> Result<i64, Error> {
|
pub async fn get_count(filters: &Filters) -> Result<i64, Error> {
|
||||||
let mut c = get_async_db_conn().await?;
|
|
||||||
let mut q = tenant::dsl::tenant
|
let mut q = tenant::dsl::tenant
|
||||||
.left_join(tenant_user::table)
|
.left_join(tenant_user::table)
|
||||||
.into_boxed();
|
.into_boxed();
|
||||||
@ -176,13 +173,12 @@ pub async fn get_count(filters: &Filters) -> Result<i64, Error> {
|
|||||||
|
|
||||||
Ok(
|
Ok(
|
||||||
q.select(dsl::sql::<diesel::sql_types::BigInt>("count(distinct id)"))
|
q.select(dsl::sql::<diesel::sql_types::BigInt>("count(distinct id)"))
|
||||||
.first(&mut c)
|
.first(&mut get_async_db_conn().await?)
|
||||||
.await?,
|
.await?,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
pub async fn list(limit: i64, offset: i64, filters: &Filters) -> Result<Vec<Tenant>, Error> {
|
pub async fn list(limit: i64, offset: i64, filters: &Filters) -> Result<Vec<Tenant>, Error> {
|
||||||
let mut c = get_async_db_conn().await?;
|
|
||||||
let mut q = tenant::dsl::tenant
|
let mut q = tenant::dsl::tenant
|
||||||
.left_join(tenant_user::table)
|
.left_join(tenant_user::table)
|
||||||
.select(tenant::all_columns)
|
.select(tenant::all_columns)
|
||||||
@ -200,15 +196,14 @@ pub async fn list(limit: i64, offset: i64, filters: &Filters) -> Result<Vec<Tena
|
|||||||
q = q.filter(tenant::dsl::name.ilike(format!("%{}%", search)));
|
q = q.filter(tenant::dsl::name.ilike(format!("%{}%", search)));
|
||||||
}
|
}
|
||||||
|
|
||||||
let items = q.load(&mut c).await?;
|
let items = q.load(&mut get_async_db_conn().await?).await?;
|
||||||
Ok(items)
|
Ok(items)
|
||||||
}
|
}
|
||||||
|
|
||||||
pub async fn add_user(tu: TenantUser) -> Result<TenantUser, Error> {
|
pub async fn add_user(tu: TenantUser) -> Result<TenantUser, Error> {
|
||||||
let mut c = get_async_db_conn().await?;
|
|
||||||
let tu: TenantUser = diesel::insert_into(tenant_user::table)
|
let tu: TenantUser = diesel::insert_into(tenant_user::table)
|
||||||
.values(&tu)
|
.values(&tu)
|
||||||
.get_result(&mut c)
|
.get_result(&mut get_async_db_conn().await?)
|
||||||
.await
|
.await
|
||||||
.map_err(|e| Error::from_diesel(e, tu.user_id.to_string()))?;
|
.map_err(|e| Error::from_diesel(e, tu.user_id.to_string()))?;
|
||||||
info!(
|
info!(
|
||||||
@ -220,14 +215,13 @@ pub async fn add_user(tu: TenantUser) -> Result<TenantUser, Error> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub async fn update_user(tu: TenantUser) -> Result<TenantUser, Error> {
|
pub async fn update_user(tu: TenantUser) -> Result<TenantUser, Error> {
|
||||||
let mut c = get_async_db_conn().await?;
|
|
||||||
let tu: TenantUser = diesel::update(
|
let tu: TenantUser = diesel::update(
|
||||||
tenant_user::dsl::tenant_user
|
tenant_user::dsl::tenant_user
|
||||||
.filter(tenant_user::dsl::tenant_id.eq(&tu.tenant_id))
|
.filter(tenant_user::dsl::tenant_id.eq(&tu.tenant_id))
|
||||||
.filter(tenant_user::dsl::user_id.eq(&tu.user_id)),
|
.filter(tenant_user::dsl::user_id.eq(&tu.user_id)),
|
||||||
)
|
)
|
||||||
.set(&tu)
|
.set(&tu)
|
||||||
.get_result(&mut c)
|
.get_result(&mut get_async_db_conn().await?)
|
||||||
.await
|
.await
|
||||||
.map_err(|e| Error::from_diesel(e, tu.user_id.to_string()))?;
|
.map_err(|e| Error::from_diesel(e, tu.user_id.to_string()))?;
|
||||||
info!(
|
info!(
|
||||||
@ -239,22 +233,20 @@ pub async fn update_user(tu: TenantUser) -> Result<TenantUser, Error> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub async fn get_user(tenant_id: &Uuid, user_id: &Uuid) -> Result<TenantUser, Error> {
|
pub async fn get_user(tenant_id: &Uuid, user_id: &Uuid) -> Result<TenantUser, Error> {
|
||||||
let mut c = get_async_db_conn().await?;
|
|
||||||
let tu: TenantUser = tenant_user::dsl::tenant_user
|
let tu: TenantUser = tenant_user::dsl::tenant_user
|
||||||
.filter(tenant_user::dsl::tenant_id.eq(&tenant_id))
|
.filter(tenant_user::dsl::tenant_id.eq(&tenant_id))
|
||||||
.filter(tenant_user::dsl::user_id.eq(&user_id))
|
.filter(tenant_user::dsl::user_id.eq(&user_id))
|
||||||
.first(&mut c)
|
.first(&mut get_async_db_conn().await?)
|
||||||
.await
|
.await
|
||||||
.map_err(|e| Error::from_diesel(e, user_id.to_string()))?;
|
.map_err(|e| Error::from_diesel(e, user_id.to_string()))?;
|
||||||
Ok(tu)
|
Ok(tu)
|
||||||
}
|
}
|
||||||
|
|
||||||
pub async fn get_user_count(tenant_id: &Uuid) -> Result<i64, Error> {
|
pub async fn get_user_count(tenant_id: &Uuid) -> Result<i64, Error> {
|
||||||
let mut c = get_async_db_conn().await?;
|
|
||||||
let count = tenant_user::dsl::tenant_user
|
let count = tenant_user::dsl::tenant_user
|
||||||
.select(dsl::count_star())
|
.select(dsl::count_star())
|
||||||
.filter(tenant_user::dsl::tenant_id.eq(&tenant_id))
|
.filter(tenant_user::dsl::tenant_id.eq(&tenant_id))
|
||||||
.first(&mut c)
|
.first(&mut get_async_db_conn().await?)
|
||||||
.await?;
|
.await?;
|
||||||
Ok(count)
|
Ok(count)
|
||||||
}
|
}
|
||||||
@ -264,7 +256,6 @@ pub async fn get_users(
|
|||||||
limit: i64,
|
limit: i64,
|
||||||
offset: i64,
|
offset: i64,
|
||||||
) -> Result<Vec<TenantUserListItem>, Error> {
|
) -> Result<Vec<TenantUserListItem>, Error> {
|
||||||
let mut c = get_async_db_conn().await?;
|
|
||||||
let items = tenant_user::dsl::tenant_user
|
let items = tenant_user::dsl::tenant_user
|
||||||
.inner_join(user::table)
|
.inner_join(user::table)
|
||||||
.select((
|
.select((
|
||||||
@ -281,20 +272,19 @@ pub async fn get_users(
|
|||||||
.order_by(user::dsl::email)
|
.order_by(user::dsl::email)
|
||||||
.limit(limit)
|
.limit(limit)
|
||||||
.offset(offset)
|
.offset(offset)
|
||||||
.load(&mut c)
|
.load(&mut get_async_db_conn().await?)
|
||||||
.await?;
|
.await?;
|
||||||
|
|
||||||
Ok(items)
|
Ok(items)
|
||||||
}
|
}
|
||||||
|
|
||||||
pub async fn delete_user(tenant_id: &Uuid, user_id: &Uuid) -> Result<(), Error> {
|
pub async fn delete_user(tenant_id: &Uuid, user_id: &Uuid) -> Result<(), Error> {
|
||||||
let mut c = get_async_db_conn().await?;
|
|
||||||
let ra = diesel::delete(
|
let ra = diesel::delete(
|
||||||
tenant_user::dsl::tenant_user
|
tenant_user::dsl::tenant_user
|
||||||
.filter(tenant_user::dsl::tenant_id.eq(&tenant_id))
|
.filter(tenant_user::dsl::tenant_id.eq(&tenant_id))
|
||||||
.filter(tenant_user::dsl::user_id.eq(&user_id)),
|
.filter(tenant_user::dsl::user_id.eq(&user_id)),
|
||||||
)
|
)
|
||||||
.execute(&mut c)
|
.execute(&mut get_async_db_conn().await?)
|
||||||
.await?;
|
.await?;
|
||||||
if ra == 0 {
|
if ra == 0 {
|
||||||
return Err(Error::NotFound(user_id.to_string()));
|
return Err(Error::NotFound(user_id.to_string()));
|
||||||
@ -308,10 +298,9 @@ pub async fn delete_user(tenant_id: &Uuid, user_id: &Uuid) -> Result<(), Error>
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub async fn get_tenant_users_for_user(user_id: &Uuid) -> Result<Vec<TenantUser>, Error> {
|
pub async fn get_tenant_users_for_user(user_id: &Uuid) -> Result<Vec<TenantUser>, Error> {
|
||||||
let mut c = get_async_db_conn().await?;
|
|
||||||
let items = tenant_user::dsl::tenant_user
|
let items = tenant_user::dsl::tenant_user
|
||||||
.filter(tenant_user::dsl::user_id.eq(&user_id))
|
.filter(tenant_user::dsl::user_id.eq(&user_id))
|
||||||
.load(&mut c)
|
.load(&mut get_async_db_conn().await?)
|
||||||
.await?;
|
.await?;
|
||||||
Ok(items)
|
Ok(items)
|
||||||
}
|
}
|
||||||
|
@ -66,11 +66,10 @@ impl User {
|
|||||||
|
|
||||||
pub async fn create(u: User) -> Result<User, Error> {
|
pub async fn create(u: User) -> Result<User, Error> {
|
||||||
u.validate()?;
|
u.validate()?;
|
||||||
let mut c = get_async_db_conn().await?;
|
|
||||||
|
|
||||||
let u: User = diesel::insert_into(user::table)
|
let u: User = diesel::insert_into(user::table)
|
||||||
.values(&u)
|
.values(&u)
|
||||||
.get_result(&mut c)
|
.get_result(&mut get_async_db_conn().await?)
|
||||||
.await
|
.await
|
||||||
.map_err(|e| Error::from_diesel(e, u.id.to_string()))?;
|
.map_err(|e| Error::from_diesel(e, u.id.to_string()))?;
|
||||||
info!(id = %u.id, "User created");
|
info!(id = %u.id, "User created");
|
||||||
@ -78,40 +77,36 @@ pub async fn create(u: User) -> Result<User, Error> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub async fn get(id: &Uuid) -> Result<User, Error> {
|
pub async fn get(id: &Uuid) -> Result<User, Error> {
|
||||||
let mut c = get_async_db_conn().await?;
|
|
||||||
let u = user::dsl::user
|
let u = user::dsl::user
|
||||||
.find(&id)
|
.find(&id)
|
||||||
.first(&mut c)
|
.first(&mut get_async_db_conn().await?)
|
||||||
.await
|
.await
|
||||||
.map_err(|e| Error::from_diesel(e, id.to_string()))?;
|
.map_err(|e| Error::from_diesel(e, id.to_string()))?;
|
||||||
Ok(u)
|
Ok(u)
|
||||||
}
|
}
|
||||||
|
|
||||||
pub async fn get_by_email(email: &str) -> Result<User, Error> {
|
pub async fn get_by_email(email: &str) -> Result<User, Error> {
|
||||||
let mut c = get_async_db_conn().await?;
|
|
||||||
let u = user::dsl::user
|
let u = user::dsl::user
|
||||||
.filter(user::dsl::email.eq(email))
|
.filter(user::dsl::email.eq(email))
|
||||||
.first(&mut c)
|
.first(&mut get_async_db_conn().await?)
|
||||||
.await
|
.await
|
||||||
.map_err(|e| Error::from_diesel(e, email.to_string()))?;
|
.map_err(|e| Error::from_diesel(e, email.to_string()))?;
|
||||||
Ok(u)
|
Ok(u)
|
||||||
}
|
}
|
||||||
|
|
||||||
pub async fn get_by_external_id(external_id: &str) -> Result<User, Error> {
|
pub async fn get_by_external_id(external_id: &str) -> Result<User, Error> {
|
||||||
let mut c = get_async_db_conn().await?;
|
|
||||||
let u = user::dsl::user
|
let u = user::dsl::user
|
||||||
.filter(user::dsl::external_id.eq(external_id))
|
.filter(user::dsl::external_id.eq(external_id))
|
||||||
.first(&mut c)
|
.first(&mut get_async_db_conn().await?)
|
||||||
.await
|
.await
|
||||||
.map_err(|e| Error::from_diesel(e, external_id.to_string()))?;
|
.map_err(|e| Error::from_diesel(e, external_id.to_string()))?;
|
||||||
Ok(u)
|
Ok(u)
|
||||||
}
|
}
|
||||||
|
|
||||||
pub async fn get_by_email_and_pw(email: &str, pw: &str) -> Result<User, Error> {
|
pub async fn get_by_email_and_pw(email: &str, pw: &str) -> Result<User, Error> {
|
||||||
let mut c = get_async_db_conn().await?;
|
|
||||||
let u: User = match user::dsl::user
|
let u: User = match user::dsl::user
|
||||||
.filter(user::dsl::email.eq(email))
|
.filter(user::dsl::email.eq(email))
|
||||||
.first(&mut c)
|
.first(&mut get_async_db_conn().await?)
|
||||||
.await
|
.await
|
||||||
.map_err(|e| Error::from_diesel(e, email.to_string()))
|
.map_err(|e| Error::from_diesel(e, email.to_string()))
|
||||||
{
|
{
|
||||||
@ -133,7 +128,7 @@ pub async fn get_by_email_and_pw(email: &str, pw: &str) -> Result<User, Error> {
|
|||||||
|
|
||||||
pub async fn update(u: User) -> Result<User, Error> {
|
pub async fn update(u: User) -> Result<User, Error> {
|
||||||
u.validate()?;
|
u.validate()?;
|
||||||
let mut c = get_async_db_conn().await?;
|
|
||||||
let u: User = diesel::update(user::dsl::user.find(&u.id))
|
let u: User = diesel::update(user::dsl::user.find(&u.id))
|
||||||
.set((
|
.set((
|
||||||
user::updated_at.eq(Utc::now()),
|
user::updated_at.eq(Utc::now()),
|
||||||
@ -144,7 +139,7 @@ pub async fn update(u: User) -> Result<User, Error> {
|
|||||||
user::note.eq(&u.note),
|
user::note.eq(&u.note),
|
||||||
user::external_id.eq(&u.external_id),
|
user::external_id.eq(&u.external_id),
|
||||||
))
|
))
|
||||||
.get_result(&mut c)
|
.get_result(&mut get_async_db_conn().await?)
|
||||||
.await
|
.await
|
||||||
.map_err(|e| Error::from_diesel(e, u.id.to_string()))?;
|
.map_err(|e| Error::from_diesel(e, u.id.to_string()))?;
|
||||||
info!(user_id = %u.id, "User updated");
|
info!(user_id = %u.id, "User updated");
|
||||||
@ -152,10 +147,9 @@ pub async fn update(u: User) -> Result<User, Error> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub async fn set_password_hash(id: &Uuid, hash: &str) -> Result<User, Error> {
|
pub async fn set_password_hash(id: &Uuid, hash: &str) -> Result<User, Error> {
|
||||||
let mut c = get_async_db_conn().await?;
|
|
||||||
let u: User = diesel::update(user::dsl::user.find(&id))
|
let u: User = diesel::update(user::dsl::user.find(&id))
|
||||||
.set(user::password_hash.eq(&hash))
|
.set(user::password_hash.eq(&hash))
|
||||||
.get_result(&mut c)
|
.get_result(&mut get_async_db_conn().await?)
|
||||||
.await
|
.await
|
||||||
.map_err(|e| Error::from_diesel(e, id.to_string()))?;
|
.map_err(|e| Error::from_diesel(e, id.to_string()))?;
|
||||||
info!(id = %id, "Password set");
|
info!(id = %id, "Password set");
|
||||||
@ -163,9 +157,8 @@ pub async fn set_password_hash(id: &Uuid, hash: &str) -> Result<User, Error> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub async fn delete(id: &Uuid) -> Result<(), Error> {
|
pub async fn delete(id: &Uuid) -> Result<(), Error> {
|
||||||
let mut c = get_async_db_conn().await?;
|
|
||||||
let ra = diesel::delete(user::dsl::user.find(&id))
|
let ra = diesel::delete(user::dsl::user.find(&id))
|
||||||
.execute(&mut c)
|
.execute(&mut get_async_db_conn().await?)
|
||||||
.await
|
.await
|
||||||
.map_err(|e| Error::from_diesel(e, id.to_string()))?;
|
.map_err(|e| Error::from_diesel(e, id.to_string()))?;
|
||||||
|
|
||||||
@ -177,21 +170,19 @@ pub async fn delete(id: &Uuid) -> Result<(), Error> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub async fn get_count() -> Result<i64, Error> {
|
pub async fn get_count() -> Result<i64, Error> {
|
||||||
let mut c = get_async_db_conn().await?;
|
|
||||||
let count = user::dsl::user
|
let count = user::dsl::user
|
||||||
.select(dsl::count_star())
|
.select(dsl::count_star())
|
||||||
.first(&mut c)
|
.first(&mut get_async_db_conn().await?)
|
||||||
.await?;
|
.await?;
|
||||||
Ok(count)
|
Ok(count)
|
||||||
}
|
}
|
||||||
|
|
||||||
pub async fn list(limit: i64, offset: i64) -> Result<Vec<User>, Error> {
|
pub async fn list(limit: i64, offset: i64) -> Result<Vec<User>, Error> {
|
||||||
let mut c = get_async_db_conn().await?;
|
|
||||||
let items = user::dsl::user
|
let items = user::dsl::user
|
||||||
.order_by(user::dsl::email)
|
.order_by(user::dsl::email)
|
||||||
.limit(limit)
|
.limit(limit)
|
||||||
.offset(offset)
|
.offset(offset)
|
||||||
.load(&mut c)
|
.load(&mut get_async_db_conn().await?)
|
||||||
.await?;
|
.await?;
|
||||||
Ok(items)
|
Ok(items)
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user