create_rust_app/auth/permissions/
user_permission.rs1use diesel::QueryResult;
2use serde::{Deserialize, Serialize};
3
4use crate::auth::schema::user_permissions;
5use crate::diesel::{
6 insert_into, AsChangeset, Associations, BoolExpressionMethods, ExpressionMethods, Insertable,
7 QueryDsl, Queryable, RunQueryDsl,
8};
9use crate::{
10 auth::{user::User, Utc, ID},
11 database::Connection,
12};
13
14#[allow(clippy::module_name_repetitions)]
15#[tsync::tsync]
16#[derive(
17 Debug, Serialize, Deserialize, Clone, Queryable, Insertable, Associations, AsChangeset,
18)]
19#[diesel(table_name=user_permissions,belongs_to(User))]
20pub struct UserPermission {
22 pub user_id: ID,
26 pub permission: String,
27 pub created_at: Utc,
28}
29
30#[allow(clippy::module_name_repetitions)]
31#[derive(Debug, Serialize, Deserialize, Clone, Insertable, AsChangeset)]
32#[diesel(table_name=user_permissions)]
33pub struct UserPermissionChangeset {
35 pub user_id: ID,
41 pub permission: String,
42}
43
44impl UserPermission {
46 pub fn create(db: &mut Connection, item: &UserPermissionChangeset) -> QueryResult<Self> {
51 use crate::auth::schema::user_permissions::dsl::user_permissions;
52
53 insert_into(user_permissions)
54 .values(item)
55 .get_result::<Self>(db)
56 }
57
58 #[cfg(feature = "database_sqlite")]
59 pub fn create_many(
64 db: &mut Connection,
65 items: Vec<UserPermissionChangeset>,
66 ) -> QueryResult<usize> {
67 use crate::auth::schema::user_permissions::dsl::*;
68
69 insert_into(user_permissions).values(items).execute(db)
70 }
71
72 #[cfg(not(feature = "database_sqlite"))]
73 pub fn create_many(
78 db: &mut Connection,
79 items: Vec<UserPermissionChangeset>,
80 ) -> QueryResult<Self> {
81 use crate::auth::schema::user_permissions::dsl::user_permissions;
82
83 insert_into(user_permissions)
84 .values(items)
85 .get_result::<Self>(db)
86 }
87
88 pub fn read(
94 db: &mut Connection,
95 item_user_id: ID,
96 item_permission: String,
97 ) -> QueryResult<Self> {
98 use crate::auth::schema::user_permissions::dsl::{permission, user_id, user_permissions};
99
100 user_permissions
101 .filter(user_id.eq(item_user_id).and(permission.eq(item_permission)))
102 .first::<Self>(db)
103 }
104
105 pub fn read_all(db: &mut Connection, item_user_id: ID) -> QueryResult<Vec<Self>> {
111 use crate::auth::schema::user_permissions::dsl::{created_at, user_id, user_permissions};
112
113 user_permissions
114 .filter(user_id.eq(item_user_id))
115 .order(created_at)
116 .load::<Self>(db)
117 }
118
119 pub fn delete(
125 db: &mut Connection,
126 item_user_id: ID,
127 item_permission: String,
128 ) -> QueryResult<usize> {
129 use crate::auth::schema::user_permissions::dsl::{permission, user_id, user_permissions};
130
131 diesel::delete(
132 user_permissions.filter(user_id.eq(item_user_id).and(permission.eq(item_permission))),
133 )
134 .execute(db)
135 }
136
137 pub fn delete_many(
143 db: &mut Connection,
144 item_user_id: ID,
145 item_permissions: Vec<String>,
146 ) -> QueryResult<usize> {
147 use crate::auth::schema::user_permissions::dsl::{permission, user_id, user_permissions};
148
149 diesel::delete(
150 user_permissions
151 .filter(user_id.eq(item_user_id))
152 .filter(permission.eq_any(item_permissions)),
153 )
154 .execute(db)
155 }
156
157 pub fn delete_all(db: &mut Connection, item_user_id: ID) -> QueryResult<usize> {
163 use crate::auth::schema::user_permissions::dsl::{user_id, user_permissions};
164
165 diesel::delete(user_permissions.filter(user_id.eq(item_user_id))).execute(db)
166 }
167}