create_rust_app/auth/permissions/
role_permission.rs1use serde::{Deserialize, Serialize};
2
3use crate::auth::{schema::role_permissions, Utc};
4use crate::database::Connection;
5use crate::diesel::{
6 insert_into, AsChangeset, BoolExpressionMethods, ExpressionMethods, Insertable, QueryDsl,
7 QueryResult, Queryable, RunQueryDsl,
8};
9
10#[allow(clippy::module_name_repetitions)]
11#[tsync::tsync]
12#[derive(Debug, Serialize, Deserialize, Clone, Queryable, Insertable, AsChangeset)]
13#[diesel(table_name = role_permissions)]
14pub struct RolePermission {
16 pub role: String,
20 pub permission: String,
21 pub created_at: Utc,
22}
23
24#[allow(clippy::module_name_repetitions)]
25#[derive(Debug, Serialize, Deserialize, Clone, Insertable, AsChangeset)]
26#[diesel(table_name = role_permissions)]
27pub struct RolePermissionChangeset {
29 pub role: String,
35 pub permission: String,
36}
37
38impl RolePermission {
40 pub fn create(db: &mut Connection, item: &RolePermissionChangeset) -> QueryResult<Self> {
45 use crate::auth::schema::role_permissions::dsl::role_permissions;
46
47 insert_into(role_permissions)
48 .values(item)
49 .get_result::<Self>(db)
50 }
51
52 #[cfg(feature = "database_sqlite")]
53 pub fn create_many(
58 db: &mut Connection,
59 items: Vec<RolePermissionChangeset>,
60 ) -> QueryResult<usize> {
61 use crate::auth::schema::role_permissions::dsl::*;
62
63 insert_into(role_permissions).values(items).execute(db)
64 }
65
66 #[cfg(not(feature = "database_sqlite"))]
67 pub fn create_many(
72 db: &mut Connection,
73 items: Vec<RolePermissionChangeset>,
74 ) -> QueryResult<Vec<Self>> {
75 use crate::auth::schema::role_permissions::dsl::role_permissions;
76
77 insert_into(role_permissions)
78 .values(items)
79 .get_results::<Self>(db)
80 }
81
82 pub fn read(
88 db: &mut Connection,
89 item_role: String,
90 item_permission: String,
91 ) -> QueryResult<Self> {
92 use crate::auth::schema::role_permissions::dsl::{permission, role, role_permissions};
93
94 role_permissions
95 .filter(role.eq(item_role).and(permission.eq(item_permission)))
96 .first::<Self>(db)
97 }
98
99 pub fn read_all(db: &mut Connection, item_role: String) -> QueryResult<Vec<Self>> {
105 use crate::auth::schema::role_permissions::dsl::{created_at, role, role_permissions};
106
107 role_permissions
108 .filter(role.eq(item_role))
109 .order(created_at)
110 .load::<Self>(db)
111 }
112
113 pub fn delete(
119 db: &mut Connection,
120 item_role: String,
121 item_permission: String,
122 ) -> QueryResult<usize> {
123 use crate::auth::schema::role_permissions::dsl::{permission, role, role_permissions};
124
125 diesel::delete(
126 role_permissions.filter(role.eq(item_role).and(permission.eq(item_permission))),
127 )
128 .execute(db)
129 }
130
131 pub fn delete_many(
137 db: &mut Connection,
138 item_role: String,
139 item_permissions: Vec<String>,
140 ) -> QueryResult<usize> {
141 use crate::auth::schema::role_permissions::dsl::{permission, role, role_permissions};
142
143 diesel::delete(
144 role_permissions
145 .filter(role.eq(item_role))
146 .filter(permission.eq_any(item_permissions)),
147 )
148 .execute(db)
149 }
150
151 pub fn delete_all(db: &mut Connection, item_role: &str) -> QueryResult<usize> {
157 use crate::auth::schema::role_permissions::dsl::{role, role_permissions};
158
159 diesel::delete(role_permissions.filter(role.eq(item_role))).execute(db)
160 }
161}