chore: update query list

This commit is contained in:
Maulana Sodiqin
2025-05-20 16:57:45 +07:00
parent 055ef6ac8e
commit d906fc4747
18 changed files with 165 additions and 1139 deletions
@@ -1,10 +1,9 @@
use super::{PermissionsItemDto, PermissionsSchema};
use crate::{
AppState, MetaRequestDto, ResourceEnum, ResponseListSuccessDto, get_id,
make_thing, query_list_with_meta,
AppState, MetaRequestDto, ResourceEnum, ResponseListSuccessDto, get_id, make_thing,
};
use anyhow::{Result, bail};
use imphnen_utils::{DetailQueryBuilder, extract_id};
use imphnen_utils::{DetailQueryBuilder, QueryListBuilder, extract_id};
pub struct PermissionsRepository<'a> {
state: &'a AppState,
@@ -20,22 +19,23 @@ impl<'a> PermissionsRepository<'a> {
meta: MetaRequestDto,
) -> Result<ResponseListSuccessDto<Vec<PermissionsItemDto>>> {
let raw_result: ResponseListSuccessDto<Vec<PermissionsSchema>> =
query_list_with_meta(
QueryListBuilder::new(
&self.state.surrealdb_ws,
&ResourceEnum::Permissions.to_string(),
&meta,
vec!["is_deleted = false".into()],
None,
"name",
Some(vec!["*"]),
None,
)
.with_condition("is_deleted = false")
.search_field("name")
.select_fields(vec!["*"])
.build()
.await?;
let transformed_data = raw_result
.data
.into_iter()
.map(|permission| PermissionsSchema::list(&permission))
.collect();
Ok(ResponseListSuccessDto {
data: transformed_data,
meta: raw_result.meta,
+12 -75
View File
@@ -3,11 +3,10 @@ use super::{
RolesRequestUpdateDto, RolesSchema,
};
use crate::{
AppState, MetaRequestDto, PermissionsItemDto, ResourceEnum,
ResponseListSuccessDto, extract_id, get_id, make_thing, query_list_with_meta,
AppState, MetaRequestDto, ResourceEnum, ResponseListSuccessDto, get_id, make_thing,
};
use anyhow::{Result, bail};
use imphnen_utils::DetailQueryBuilder;
use imphnen_utils::{DetailQueryBuilder, QueryListBuilder};
use surrealdb::Uuid;
use surrealdb::sql::Thing;
@@ -24,36 +23,23 @@ impl<'a> RolesRepository<'a> {
&self,
meta: MetaRequestDto,
) -> Result<ResponseListSuccessDto<Vec<RolesListItemDto>>> {
let mut conditions = vec!["is_deleted = false".into()];
if let Some(_search) = meta.search.as_deref().filter(|s| !s.is_empty()) {
conditions.push("string::contains(name ?? '', $search)".into());
}
if let (Some(filter_by), Some(filter_val)) =
(meta.filter_by.as_ref(), meta.filter.as_ref())
{
if !filter_val.is_empty() {
conditions.push(format!("{} = $filter", filter_by));
}
}
let raw_result: ResponseListSuccessDto<Vec<RolesSchema>> = query_list_with_meta(
let result: ResponseListSuccessDto<Vec<RolesSchema>> = QueryListBuilder::new(
&self.state.surrealdb_ws,
&ResourceEnum::Roles.to_string(),
&meta,
conditions,
None,
"name",
None,
None,
)
.with_condition("is_deleted = false")
.search_field("name")
.build()
.await?;
let data = raw_result
let data = result
.data
.into_iter()
.map(|role| RolesSchema::list(&role))
.collect();
Ok(ResponseListSuccessDto {
data,
meta: raw_result.meta,
meta: result.meta,
})
}
@@ -65,16 +51,8 @@ impl<'a> RolesRepository<'a> {
let builder = DetailQueryBuilder::new(ResourceEnum::Roles.to_string())
.with_where("name")
.where_value(name.clone())
.with_select_fields(vec![
"id",
"name",
"permissions",
"created_at",
"updated_at",
"is_deleted",
])
.with_select_fields(vec!["*"])
.with_fetch("permissions");
let sql = builder.build();
let result: Option<RolesDetailQueryDto> = builder
.apply_bindings(db.query(sql).bind(("name", name)))
@@ -84,38 +62,14 @@ impl<'a> RolesRepository<'a> {
Some(r) if !r.is_deleted => r,
_ => bail!("Role not found"),
};
let permissions = role
.permissions
.into_iter()
.map(|perm| PermissionsItemDto {
id: extract_id(&perm.id),
name: perm.name,
created_at: perm.created_at,
updated_at: perm.updated_at,
})
.collect();
Ok(RolesDetailItemDto {
id: extract_id(&role.id),
name: role.name,
is_deleted: role.is_deleted,
permissions,
created_at: role.created_at,
updated_at: role.updated_at,
})
Ok(RolesDetailItemDto::from(&role))
}
pub async fn query_role_by_id(&self, id: String) -> Result<RolesDetailItemDto> {
let db = &self.state.surrealdb_ws;
let builder = DetailQueryBuilder::new(ResourceEnum::Roles.to_string())
.with_id(&id)
.with_select_fields(vec![
"id",
"name",
"is_deleted",
"permissions",
"created_at",
"updated_at",
])
.with_select_fields(vec!["*"])
.with_fetch("permissions");
let sql = builder.build();
let result: Option<RolesDetailQueryDto> =
@@ -124,24 +78,7 @@ impl<'a> RolesRepository<'a> {
Some(r) if !r.is_deleted => r,
_ => bail!("Role not found"),
};
let permissions = role
.permissions
.into_iter()
.map(|perm| PermissionsItemDto {
id: extract_id(&perm.id),
name: perm.name,
created_at: perm.created_at,
updated_at: perm.updated_at,
})
.collect();
Ok(RolesDetailItemDto {
id: extract_id(&role.id),
name: role.name,
is_deleted: role.is_deleted,
permissions,
created_at: role.created_at,
updated_at: role.updated_at,
})
Ok(RolesDetailItemDto::from(&role))
}
pub async fn query_create_role(
+15 -16
View File
@@ -1,10 +1,9 @@
use super::{UsersDetailQueryDto, UsersListItemDto, UsersListQueryDto, UsersSchema};
use crate::{
AppState, MetaRequestDto, ResourceEnum, ResponseListSuccessDto, get_id,
make_thing, query_list_with_meta,
AppState, MetaRequestDto, ResourceEnum, ResponseListSuccessDto, get_id, make_thing,
};
use anyhow::{Result, bail};
use imphnen_utils::DetailQueryBuilder;
use imphnen_utils::{DetailQueryBuilder, QueryListBuilder};
use surrealdb::{Surreal, engine::remote::ws::Client};
pub struct UsersRepository<'a> {
@@ -35,23 +34,23 @@ impl<'a> UsersRepository<'a> {
&self,
meta: MetaRequestDto,
) -> Result<ResponseListSuccessDto<Vec<UsersListItemDto>>> {
let db = &self.state.surrealdb_ws;
let result = query_list_with_meta::<UsersListQueryDto>(
db,
&ResourceEnum::Users.to_string(),
&meta,
vec!["is_deleted = false".into()],
None,
"fullname",
Some(vec!["*"]),
Some(vec!["role", "role.permissions"]),
)
.await?;
let result: ResponseListSuccessDto<Vec<UsersListQueryDto>> =
QueryListBuilder::new(
&self.state.surrealdb_ws,
&ResourceEnum::Users.to_string(),
&meta,
)
.with_condition("is_deleted = false")
.search_field("fullname")
.select_fields(vec!["*"])
.fetch_fields(vec!["role", "role.permissions"])
.build()
.await?;
let data = result
.data
.into_iter()
.map(UsersListQueryDto::from)
.collect::<Vec<_>>();
.collect();
Ok(ResponseListSuccessDto {
data,
meta: result.meta,