feat: roles router

This commit is contained in:
Maulana Sodiqin
2025-03-25 10:48:34 +07:00
parent 77f12610dd
commit 34eaa418d5
9 changed files with 401 additions and 18 deletions
+17
View File
@@ -19,12 +19,15 @@ where
if page < 1 || per_page < 1 {
bail!("Invalid pagination: page and per_page must be greater than 0");
}
let start = (page - 1) * per_page;
let mut sql = format!("SELECT * FROM {}", table);
if !conditions.is_empty() {
sql.push_str(" WHERE ");
sql.push_str(&conditions.join(" AND "));
}
if let Some(sort_by) = &meta.sort_by {
let order = match meta
.order
@@ -39,7 +42,9 @@ where
};
sql.push_str(&format!(" ORDER BY {} {}", sort_by, order));
}
sql.push_str(" LIMIT $per_page START $start");
let mut query = db.query(sql);
if let Some(search) = &meta.search {
if !search.is_empty() {
@@ -50,23 +55,35 @@ where
query = bind_filter_value(query, filter_val);
}
query = query.bind(("per_page", per_page)).bind(("start", start));
let items: Vec<T> = query.await?.take(0)?;
// COUNT QUERY
let mut count_sql = format!("SELECT count() FROM {}", table);
if !conditions.is_empty() {
count_sql.push_str(" WHERE ");
count_sql.push_str(&conditions.join(" AND "));
}
let mut count_query = db.query(count_sql);
if let Some(search) = &meta.search {
if !search.is_empty() {
count_query = count_query.bind(("search", search.clone()));
}
}
if let Some(filter_val) = meta.filter.clone() {
count_query = bind_filter_value(count_query, filter_val);
}
let count_result: Vec<CountResult> = count_query.await?.take(0)?;
let total = count_result.first().map(|c| c.count);
let meta = MetaResponseDto {
page: Some(page),
per_page: Some(per_page),
total,
};
Ok(ResponseListSuccessDto {
data: items,
meta: Some(meta),