Skip to content
This repository was archived by the owner on Sep 8, 2019. It is now read-only.

Commit e6ce81e

Browse files
committed
Brought project back to original layout. Fixed user_access search.
1 parent 1d940ca commit e6ce81e

File tree

4 files changed

+49
-41
lines changed

4 files changed

+49
-41
lines changed
File renamed without changes.

backend/src/access/models.rs

Lines changed: 29 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@ use crate::errors::{WebdevError, WebdevErrorKind};
1313

1414
use crate::search::{NullableSearch, Search};
1515

16-
use crate::users::models::UserList;
1716
use super::schema::{access, user_access};
1817

1918
#[derive(Queryable, Serialize, Deserialize)]
@@ -141,23 +140,23 @@ impl UserAccessRequest {
141140
router!(request,
142141
(GET) (/) => {
143142

144-
let mut access_id = Search::NoSearch;
145-
let mut user_id = Search::NoSearch;
146-
let mut permission_level = NullableSearch::NoSearch;
143+
let mut access_id_search = Search::NoSearch;
144+
let mut user_id_search = Search::NoSearch;
145+
let mut permission_level_search = NullableSearch::NoSearch;
147146

148147
for (field, query) in url_queries {
149-
match field.as_ref() {
150-
"access_id" => access_id = Search::from_query(query.as_ref())?,
151-
"user_id" => user_id = Search::from_query(query.as_ref())?,
152-
"permission_level" => permission_level = NullableSearch::from_query(query.as_ref())?,
148+
match field.as_ref() as &str {
149+
"access_id" => access_id_search = Search::from_query(query.as_ref())?,
150+
"user_id" => user_id_search = Search::from_query(query.as_ref())?,
151+
"permission_level" => permission_level_search = NullableSearch::from_query(query.as_ref())?,
153152
_ => return Err(WebdevError::new(WebdevErrorKind::Format)),
154153
}
155154
}
156155

157156
Ok(UserAccessRequest::SearchAccess(SearchUserAccess {
158-
access_id,
159-
user_id,
160-
permission_level,
157+
access_id: access_id_search,
158+
user_id: user_id_search,
159+
permission_level: permission_level_search,
161160
}))
162161
},
163162

@@ -196,19 +195,36 @@ impl UserAccessRequest {
196195
}
197196

198197
pub enum UserAccessResponse {
199-
ManyUsers(UserList),
200198
AccessState(bool),
199+
ManyUserAccess(JoinedUserAccessList),
201200
OneUserAccess(UserAccess),
202201
NoResponse,
203202
}
204203

205204
impl UserAccessResponse {
206205
pub fn to_rouille(self) -> rouille::Response {
207206
match self {
208-
UserAccessResponse::ManyUsers(users) => rouille::Response::json(&users),
209207
UserAccessResponse::AccessState(state) => rouille::Response::text(if state {"true"} else {"false"}),
208+
UserAccessResponse::ManyUserAccess(user_accesses) => rouille::Response::json(&user_accesses),
210209
UserAccessResponse::OneUserAccess(user_access) => rouille::Response::json(&user_access),
211210
UserAccessResponse::NoResponse => rouille::Response::empty_204(),
212211
}
213212
}
214213
}
214+
215+
216+
217+
#[derive(Queryable, Serialize, Deserialize)]
218+
pub struct JoinedUserAccess {
219+
pub permission_id: i64,
220+
pub user_id: i64,
221+
pub access_id: i64,
222+
pub first_name: String,
223+
pub last_name: String,
224+
pub banner_id: u32,
225+
}
226+
227+
#[derive(Serialize, Deserialize)]
228+
pub struct JoinedUserAccessList {
229+
pub entries: Vec<JoinedUserAccess>,
230+
}

backend/src/access/requests.rs

Lines changed: 20 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,14 @@
11
use diesel;
22
use diesel::types;
33
use diesel::mysql::MysqlConnection;
4+
use diesel::mysql::Mysql;
45
use diesel::query_builder::AsQuery;
56
use diesel::QueryDsl;
67
use diesel::RunQueryDsl;
78
use diesel::ExpressionMethods;
89
use diesel::TextExpressionMethods;
10+
use diesel::NullableExpressionMethods;
11+
use diesel::query_builder::BoxedSelectStatement;
912

1013
use crate::errors::{WebdevError, WebdevErrorKind};
1114

@@ -15,7 +18,9 @@ use super::models::{
1518
Access, NewAccess, PartialAccess, AccessRequest, AccessResponse,
1619

1720
UserAccess, NewUserAccess, PartialUserAccess, SearchUserAccess,
18-
UserAccessRequest, UserAccessResponse
21+
UserAccessRequest, UserAccessResponse,
22+
23+
JoinedUserAccess, JoinedUserAccessList
1924
};
2025

2126
use crate::users::models::{User, UserList};
@@ -97,7 +102,7 @@ pub fn handle_user_access(
97102
) -> Result<UserAccessResponse, WebdevError> {
98103
match request {
99104
UserAccessRequest::SearchAccess(user_access) => {
100-
search_user_access(user_access, database_connection).map(|u| UserAccessResponse::ManyUsers(u))
105+
search_user_access(user_access, database_connection).map(|u| UserAccessResponse::ManyUserAccess(u))
101106
},
102107
UserAccessRequest::GetAccess(permission_id) => {
103108
get_user_access(permission_id, database_connection).map(|a| UserAccessResponse::OneUserAccess(a))
@@ -120,9 +125,17 @@ pub fn handle_user_access(
120125
fn search_user_access(
121126
user_access_search: SearchUserAccess,
122127
database_connection: &MysqlConnection
123-
) -> Result<UserList, WebdevError> {
128+
) -> Result<JoinedUserAccessList, WebdevError> {
124129
let mut user_access_query = user_access_schema::table
125-
.as_query().into_boxed();
130+
.inner_join(access_schema::table)
131+
.inner_join(users_schema::table)
132+
.select((user_access_schema::permission_id,
133+
users_schema::id,
134+
access_schema::id,
135+
users_schema::first_name,
136+
users_schema::last_name,
137+
users_schema::banner_id))
138+
.into_boxed::<Mysql>();
126139

127140
match user_access_search.access_id {
128141
Search::Partial(s) => {
@@ -176,31 +189,10 @@ fn search_user_access(
176189
NullableSearch::NoSearch => {}
177190
}
178191

179-
let found_access_entries = user_access_query.load::<UserAccess>(database_connection)?;
180-
181-
let mut out: Vec<User> = Vec::new();
182-
183-
for user_access in &found_access_entries {
184-
185-
let mut found_users = users_schema::table
186-
.filter(users_schema::id.eq(user_access.user_id))
187-
.load::<User>(database_connection)?;
188-
189-
match found_users.pop() {
190-
Some(user) => {
191-
let mut found: bool = false;
192-
for pending_user in &out {
193-
if pending_user.id == user.id { found = true; }
194-
}
195-
if !found { out.push(user); }
196-
},
197-
None => {();},
198-
};
199-
}
200-
201-
let user_list = UserList { users: out };
192+
let found_access_entries = user_access_query.load::<JoinedUserAccess>(database_connection)?;
193+
let joined_list = JoinedUserAccessList { entries: found_access_entries };
202194

203-
Ok(user_list)
195+
Ok(joined_list)
204196
}
205197

206198
fn get_user_access(
File renamed without changes.

0 commit comments

Comments
 (0)