Skip to content

Commit 4b32269

Browse files
committed
Refactor User
1 parent e83ed68 commit 4b32269

File tree

12 files changed

+127
-77
lines changed

12 files changed

+127
-77
lines changed

src/api/v1/auth/csh.rs

Lines changed: 15 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,16 @@
1-
use crate::api::v1::auth::models::UserRealm;
21
use crate::api::v1::auth::models::{CSHUserInfo, UserInfo};
32
use crate::app::AppState;
3+
use crate::db::user::{UserData, UserRealm};
44
use actix_session::Session;
55
use actix_web::http::header;
66
use actix_web::{get, Scope};
77
use actix_web::{web, HttpResponse, Responder};
8+
use log::error;
89
use oauth2::reqwest::async_http_client;
910
use oauth2::{AuthorizationCode, TokenResponse};
1011
use reqwest::Client;
1112
use serde::Deserialize;
13+
use serde_json::json;
1214
use utoipa::{OpenApi, ToSchema};
1315

1416
use crate::api::v1::auth::common;
@@ -70,15 +72,20 @@ async fn auth(
7072
.await
7173
.unwrap();
7274

73-
sqlx::query!(
74-
"INSERT INTO users (id, realm, name, email) VALUES ($1, $2, $3, $4) ON CONFLICT (id) DO UPDATE SET realm = EXCLUDED.realm, name = EXCLUDED.name, email = EXCLUDED.email;",
75-
user_info.ldap_id,
76-
UserRealm::Csh as _,
75+
if let Err(err) = UserData::insert_new(
76+
user_info.ldap_id.clone(),
77+
UserRealm::Csh,
7778
format!("{} {}", user_info.given_name, user_info.family_name),
78-
user_info.email
79+
user_info.email.clone(),
80+
&data.db,
7981
)
80-
.execute(&data.db)
81-
.await.unwrap();
82+
.await
83+
{
84+
error!("{}", err);
85+
return HttpResponse::InternalServerError().json(json!({
86+
"error": "Failed to add user to database"
87+
}));
88+
}
8289

8390
session.insert("login", true).unwrap();
8491
session

src/api/v1/auth/google.rs

Lines changed: 15 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,17 @@
11
use crate::api::v1::auth::common;
2-
use crate::api::v1::auth::models::UserRealm;
32
use crate::api::v1::auth::models::{GoogleUserInfo, UserInfo};
43
use crate::app::AppState;
4+
use crate::db::user::{UserData, UserRealm};
55
use actix_session::Session;
66
use actix_web::http::header;
77
use actix_web::{get, web, Scope};
88
use actix_web::{HttpResponse, Responder};
9+
use log::error;
910
use oauth2::reqwest::async_http_client;
1011
use oauth2::{AuthorizationCode, TokenResponse};
1112
use reqwest::Client;
1213
use serde::Deserialize;
14+
use serde_json::json;
1315
use utoipa::{OpenApi, ToSchema};
1416

1517
#[derive(OpenApi)]
@@ -75,15 +77,20 @@ async fn auth(
7577
.await
7678
.unwrap();
7779

78-
sqlx::query!(
79-
"INSERT INTO users (id, realm, name, email) VALUES ($1, $2, $3, $4) ON CONFLICT (id) DO UPDATE SET realm = EXCLUDED.realm, name = EXCLUDED.name, email = EXCLUDED.email;",
80-
user_info.sub,
81-
UserRealm::Google as _,
80+
if let Err(err) = UserData::insert_new(
81+
user_info.sub.clone(),
82+
UserRealm::Google,
8283
format!("{} {}", user_info.given_name, user_info.family_name),
83-
user_info.email
84+
user_info.email.clone(),
85+
&data.db,
8486
)
85-
.execute(&data.db)
86-
.await.unwrap();
87+
.await
88+
{
89+
error!("{}", err);
90+
return HttpResponse::InternalServerError().json(json!({
91+
"error": "Failed to add user to database"
92+
}));
93+
}
8794

8895
session.insert("login", true).unwrap();
8996
session

src/api/v1/auth/models.rs

Lines changed: 0 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,4 @@
11
use serde::{Deserialize, Serialize};
2-
use utoipa::ToSchema;
3-
4-
#[derive(Serialize, Deserialize, sqlx::Type)]
5-
#[sqlx(type_name = "user_realm", rename_all = "lowercase")]
6-
pub enum UserRealm {
7-
Csh,
8-
Google,
9-
}
102

113
#[derive(Serialize, Deserialize, Debug)]
124
pub struct CSHUserInfo {
@@ -38,15 +30,6 @@ pub struct UserInfo {
3830
pub groups: Vec<String>,
3931
}
4032

41-
#[derive(Serialize, Deserialize, sqlx::Type, ToSchema, Clone)]
42-
#[serde(rename_all = "camelCase")]
43-
pub struct UserData {
44-
pub id: String,
45-
pub realm: String,
46-
pub name: String,
47-
pub email: String,
48-
}
49-
5033
impl From<CSHUserInfo> for UserInfo {
5134
fn from(user_info: CSHUserInfo) -> Self {
5235
let username = user_info.preferred_username;

src/api/v1/event/car/mod.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
use crate::api::v1::auth::models::UserInfo;
22
use crate::app::{AppState, MultipleRiderChange, RedisJob};
33
use crate::db::car::{Car, CarData};
4-
use crate::{api::v1::auth::models::UserData, auth::SessionAuth};
4+
use crate::{auth::SessionAuth, db::user::UserData};
55
use actix_session::Session;
66
use actix_web::{
77
delete, get, post, put,

src/api/v1/event/mod.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ use crate::auth::SessionAuth;
1717

1818
use utoipa::OpenApi;
1919

20-
use super::auth::models::UserData;
20+
use crate::db::user::UserData;
2121

2222
mod car;
2323

src/api/v1/user.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ use crate::auth::SessionAuth;
77

88
use utoipa::OpenApi;
99

10-
use super::auth::models::UserData;
10+
use crate::db::user::UserData;
1111

1212
#[derive(OpenApi)]
1313
#[openapi(paths(user_search), components(schemas(UserData)))]

src/app.rs

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ use redis::aio::MultiplexedConnection;
55
use redis_work_queue::KeyPrefix;
66
use serde::{Deserialize, Serialize};
77
use sqlx::PgPool;
8-
use utoipa::ToSchema;
98

109
#[derive(Clone)]
1110
pub struct AppState {
@@ -18,15 +17,6 @@ pub struct AppState {
1817
pub csh_userinfo_url: String,
1918
}
2019

21-
#[derive(Serialize, Deserialize, sqlx::Type, ToSchema, Clone)]
22-
#[serde(rename_all = "camelCase")]
23-
pub struct UserData {
24-
pub id: String,
25-
pub realm: String,
26-
pub name: String,
27-
pub email: String,
28-
}
29-
3020
#[derive(Serialize, Deserialize)]
3121
pub struct SimpleRiderChange {
3222
pub event_id: i32,

src/db/car.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ use serde::{Deserialize, Serialize};
44
use sqlx::{query, query_as, Executor, Postgres};
55
use utoipa::ToSchema;
66

7-
use crate::app::UserData;
7+
use crate::db::user::UserData;
88

99
#[derive(Deserialize, ToSchema)]
1010
#[serde(rename_all = "camelCase")]

src/db/event.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ use serde::{Deserialize, Serialize};
44
use sqlx::{query_as, Executor, Postgres};
55
use utoipa::ToSchema;
66

7-
use crate::app::UserData;
7+
use crate::db::user::UserData;
88

99
#[derive(Serialize, Deserialize, sqlx::FromRow, ToSchema)]
1010
#[serde(rename_all = "camelCase")]

src/db/mod.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,3 @@
11
pub mod car;
22
pub mod event;
3+
pub mod user;

0 commit comments

Comments
 (0)