chimes_rust/query/
query_user_menus.rs

1use rbatis::crud_table;
2use rbatis::error::Error;
3use rbatis::rbatis::Rbatis;
4use serde_derive::{Deserialize, Serialize};
5/**
6 * Generate the file for query_user_menus.rs,
7 */
8use std::fmt::Debug;
9
10#[derive(Debug, Clone, Default, Deserialize, Serialize)]
11pub struct QueryUserMenusParams {
12    pub username: String,
13    pub role_codes: Vec<String>,
14}
15
16#[crud_table(table_name:"QueryUserMenus"|table_columns:"menu_id,pid,sub_count,type,title,name,component,menu_sort,icon,path,i_frame,cache,hidden,permission,create_by,update_by,create_time,update_time")]
17#[derive(Debug, Clone, Default, Deserialize, Serialize)]
18pub struct QueryUserMenus {
19    pub menu_id: Option<i64>,
20    pub pid: Option<i64>,
21    pub sub_count: Option<i32>,
22    #[serde(rename(deserialize = "type"))]
23    pub r#type: Option<i32>,
24    pub title: Option<String>,
25    pub name: Option<String>,
26    pub component: Option<String>,
27    pub menu_sort: Option<i32>,
28    pub icon: Option<String>,
29    pub path: Option<String>,
30    pub i_frame: Option<bool>,
31    pub cache: Option<bool>,
32    pub hidden: Option<bool>,
33    pub permission: Option<String>,
34    pub create_by: Option<String>,
35    pub update_by: Option<String>,
36    pub create_time: Option<rbatis::DateTimeNative>,
37    pub update_time: Option<rbatis::DateTimeNative>,
38}
39
40impl QueryUserMenus {
41    #[allow(dead_code)]
42    pub async fn query(
43        rb: &Rbatis,
44        param: &QueryUserMenusParams,
45    ) -> Result<Vec<QueryUserMenus>, Error> {
46        if param.role_codes.is_empty() {
47            let sql = "SELECT p.* FROM chimes_menu p INNER JOIN chimes_roles_menus rp ON p.menu_id = rp.menu_id INNER JOIN chimes_users_roles cur ON rp.role_id = cur.role_id  INNER JOIN chimes_user cu ON cur.user_id  = cu.user_id AND cu.username = ? order by p.menu_sort asc".to_string();
48            let mut rb_args = vec![];
49            rb_args.push(rbson::to_bson(&param.username).unwrap_or_default());
50            rb.fetch(&sql, rb_args).await
51        } else {
52            let mut sql = "SELECT p.* FROM chimes_menu p INNER JOIN chimes_roles_menus rp ON p.menu_id = rp.menu_id INNER JOIN chimes_role cr ON rp.role_id = cr.role_id WHERE 1 = 1 ".to_string();
53            // order by p.menu_sort asc
54            let mut rb_args = vec![];
55            sql.push_str(" AND cr.role_code IN (");
56            for ct in param.role_codes.clone() {
57                if Some(&ct) == param.role_codes.clone().last() {
58                    sql.push_str("?)");
59                } else {
60                    sql.push_str("?,");
61                }
62                rb_args.push(rbson::to_bson(&ct).unwrap_or_default());
63            }
64
65            rb.fetch(&sql, rb_args).await
66        }
67    }
68}