From 0e2f33c377b719407237c6576443f045cbc9e9c6 Mon Sep 17 00:00:00 2001 From: Alex Andru Date: Thu, 24 Oct 2024 21:17:49 +0200 Subject: [PATCH 1/2] chore: format code with updated rustfmt config --- .editorconfig | 21 ++++++++++++ README.md | 2 +- rustfmt.toml | 2 ++ src/auth/mod.rs | 2 +- src/catchers/mod.rs | 15 ++------- src/db.rs | 3 +- src/main.rs | 32 ++++++++++++++---- src/models/mod.rs | 2 +- src/models/relationship.rs | 25 ++++---------- src/models/snack.rs | 2 +- src/models/user.rs | 2 +- src/routes/auth.rs | 26 ++++++--------- src/routes/mod.rs | 4 +-- src/routes/relationship.rs | 67 +++++++++++++++++--------------------- src/routes/snack.rs | 45 +++++++++++-------------- src/schema.rs | 6 +--- 16 files changed, 126 insertions(+), 130 deletions(-) create mode 100644 .editorconfig create mode 100644 rustfmt.toml diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..2a29932 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,21 @@ +root = true + +[*] +end_of_line = lf +charset = utf-8 +trim_trailing_whitespace = true +insert_final_newline = true +indent_style = space +indent_size = 4 + +[*.rs] +max_line_length = 100 + +[*.md] +trim_trailing_whitespace = false + +[*.yml] +indent_size = 2 + +[Makefile] +indent_style = tab \ No newline at end of file diff --git a/README.md b/README.md index 68802a3..d7d94f5 100644 --- a/README.md +++ b/README.md @@ -2,4 +2,4 @@ WIP. -Automates getting coffee and snacks for tired devs \ No newline at end of file +Automates getting coffee and snacks for tired devs diff --git a/rustfmt.toml b/rustfmt.toml new file mode 100644 index 0000000..9c0b05f --- /dev/null +++ b/rustfmt.toml @@ -0,0 +1,2 @@ +use_small_heuristics = "Max" +merge_derives = false diff --git a/src/auth/mod.rs b/src/auth/mod.rs index 018ff2e..22d12a3 100644 --- a/src/auth/mod.rs +++ b/src/auth/mod.rs @@ -1 +1 @@ -pub mod user; \ No newline at end of file +pub mod user; diff --git a/src/catchers/mod.rs b/src/catchers/mod.rs index ccc4ff2..0d743b2 100644 --- a/src/catchers/mod.rs +++ b/src/catchers/mod.rs @@ -11,24 +11,15 @@ pub struct ErrorResponse { #[catch(401)] pub fn unauthorized(req: &Request) -> Json { - Json(ErrorResponse { - status: 401, - message: format!("Unauthorized access to {}", req.uri()), - }) + Json(ErrorResponse { status: 401, message: format!("Unauthorized access to {}", req.uri()) }) } #[catch(404)] pub fn not_found(_req: &Request) -> Json { - Json(ErrorResponse { - status: 404, - message: "Page not found".to_string(), - }) + Json(ErrorResponse { status: 404, message: "Page not found".to_string() }) } #[catch(500)] pub fn internal_server_error(_req: &Request) -> Json { - Json(ErrorResponse { - status: 500, - message: "Internal Server Error".to_string(), - }) + Json(ErrorResponse { status: 500, message: "Internal Server Error".to_string() }) } diff --git a/src/db.rs b/src/db.rs index 1d156f6..2cb79b8 100644 --- a/src/db.rs +++ b/src/db.rs @@ -3,8 +3,7 @@ use diesel::prelude::*; use std::env; pub fn establish_connection() -> PgConnection { - let database_url = env::var("DATABASE_URL") - .expect("DATABASE_URL must be set"); + let database_url = env::var("DATABASE_URL").expect("DATABASE_URL must be set"); PgConnection::establish(&database_url) .unwrap_or_else(|_| panic!("Error connecting to {}", database_url)) } diff --git a/src/main.rs b/src/main.rs index b95a42f..8a6b082 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,15 +1,17 @@ extern crate dotenv; #[macro_use] extern crate rocket; -mod routes; -mod models; mod auth; mod catchers; mod db; +mod models; +mod routes; mod schema; use crate::routes::auth::{login, register}; -use crate::routes::relationship::{invite_project_manager, list_developers, list_snacks, respond_to_invite}; +use crate::routes::relationship::{ + invite_project_manager, list_developers, list_snacks, respond_to_invite, +}; use crate::routes::snack::{create_snack, delete_snack, update_snack}; use dotenv::dotenv; use rocket::*; @@ -25,12 +27,28 @@ fn index() -> &'static str { |___| |_______||_______||______| |__| |__| |______| |_______| |___| " } - #[launch] fn rocket() -> _ { dotenv().ok(); - rocket::build().mount("/", routes![index, invite_project_manager,list_developers, respond_to_invite, create_snack, list_snacks, update_snack, delete_snack, register, login]).register("/", catchers![catchers::unauthorized, catchers::not_found, - catchers::internal_server_error]) + rocket::build() + .mount( + "/", + routes![ + index, + invite_project_manager, + list_developers, + respond_to_invite, + create_snack, + list_snacks, + update_snack, + delete_snack, + register, + login + ], + ) + .register( + "/", + catchers![catchers::unauthorized, catchers::not_found, catchers::internal_server_error], + ) } - diff --git a/src/models/mod.rs b/src/models/mod.rs index 45bc572..b3c02f3 100644 --- a/src/models/mod.rs +++ b/src/models/mod.rs @@ -1,3 +1,3 @@ +pub(crate) mod relationship; pub mod snack; pub(crate) mod user; -pub(crate) mod relationship; \ No newline at end of file diff --git a/src/models/relationship.rs b/src/models/relationship.rs index b6de370..6858f8c 100644 --- a/src/models/relationship.rs +++ b/src/models/relationship.rs @@ -1,11 +1,9 @@ -// src/models/relationship.rs use crate::models::user::User; +use crate::schema::dev_pm_relationships; use chrono::NaiveDateTime; +use diesel::pg::Pg; use diesel::prelude::*; use serde::{Deserialize, Serialize}; -use diesel::pg::Pg; -use crate::schema::dev_pm_relationships; -use crate::schema::dev_pm_relationships::dsl; #[derive(Queryable, Selectable, Serialize, Identifiable, Associations, Debug)] #[diesel(belongs_to(User, foreign_key = developer_id))] @@ -37,37 +35,28 @@ pub struct RespondToInviteRequest { pub status: String, } -// Query builders helper methods impl DevPmRelationship { pub fn for_developer(user_id: i32) -> dev_pm_relationships::BoxedQuery<'static, Pg> { use crate::schema::dev_pm_relationships::dsl::*; - dev_pm_relationships - .filter(developer_id.eq(user_id)) - .into_boxed() + dev_pm_relationships.filter(developer_id.eq(user_id)).into_boxed() } pub fn for_project_manager(user_id: i32) -> dev_pm_relationships::BoxedQuery<'static, Pg> { use crate::schema::dev_pm_relationships::dsl::*; - dev_pm_relationships - .filter(project_manager_id.eq(user_id)) - .into_boxed() + dev_pm_relationships.filter(project_manager_id.eq(user_id)).into_boxed() } pub fn pending() -> dev_pm_relationships::BoxedQuery<'static, Pg> { use crate::schema::dev_pm_relationships::dsl::*; - dev_pm_relationships - .filter(status.eq("pending")) - .into_boxed() + dev_pm_relationships.filter(status.eq("pending")).into_boxed() } pub fn accepted() -> dev_pm_relationships::BoxedQuery<'static, Pg> { use crate::schema::dev_pm_relationships::dsl::*; - dev_pm_relationships - .filter(status.eq("accepted")) - .into_boxed() + dev_pm_relationships.filter(status.eq("accepted")).into_boxed() } -} \ No newline at end of file +} diff --git a/src/models/snack.rs b/src/models/snack.rs index 2a69599..9ded123 100644 --- a/src/models/snack.rs +++ b/src/models/snack.rs @@ -49,4 +49,4 @@ impl CreateSnackRequest { user_id, } } -} \ No newline at end of file +} diff --git a/src/models/user.rs b/src/models/user.rs index 9fc651e..24944f1 100644 --- a/src/models/user.rs +++ b/src/models/user.rs @@ -18,4 +18,4 @@ pub struct NewUser { pub username: String, pub password_hash: String, pub role: String, -} \ No newline at end of file +} diff --git a/src/routes/auth.rs b/src/routes/auth.rs index f601a32..ef1ae03 100644 --- a/src/routes/auth.rs +++ b/src/routes/auth.rs @@ -30,14 +30,15 @@ pub struct TokenResponse { #[post("/register", data = "")] pub fn register(info: Json) -> Result, Status> { let conn = &mut db::establish_connection(); - let hashed_password = hash(&info.password, DEFAULT_COST) - .map_err(|_| Status::InternalServerError)?; + let hashed_password = + hash(&info.password, DEFAULT_COST).map_err(|_| Status::InternalServerError)?; let user_role = match info.role.as_deref() { Some("developer") => "developer", Some("project_manager") => "project_manager", - _ => "developer" - }.to_string(); + _ => "developer", + } + .to_string(); let new_user = NewUser { username: info.username.clone(), @@ -60,19 +61,12 @@ pub fn login(info: Json) -> Result, Status> { .first::(conn) .map_err(|_| Status::Unauthorized)?; if verify(&info.password, &user.password_hash).map_err(|_| Status::InternalServerError)? { - let claims = Claims { - sub: user.id, - role: user.role.clone(), - exp: 10000000000, - }; - let token = encode( - &Header::default(), - &claims, - &EncodingKey::from_secret("SECRET".as_ref()), - ) - .map_err(|_| Status::InternalServerError)?; + let claims = Claims { sub: user.id, role: user.role.clone(), exp: 10000000000 }; + let token = + encode(&Header::default(), &claims, &EncodingKey::from_secret("SECRET".as_ref())) + .map_err(|_| Status::InternalServerError)?; Ok(Json(TokenResponse { token })) } else { Err(Status::Unauthorized) } -} \ No newline at end of file +} diff --git a/src/routes/mod.rs b/src/routes/mod.rs index 8f5006f..b00f357 100644 --- a/src/routes/mod.rs +++ b/src/routes/mod.rs @@ -1,3 +1,3 @@ -pub mod snack; pub mod auth; -pub mod relationship; \ No newline at end of file +pub mod relationship; +pub mod snack; diff --git a/src/routes/relationship.rs b/src/routes/relationship.rs index 202ef47..a2835dd 100644 --- a/src/routes/relationship.rs +++ b/src/routes/relationship.rs @@ -1,6 +1,8 @@ use crate::auth::user::AuthenticatedUser; use crate::db; -use crate::models::relationship::{DevPmRelationship, InvitePmRequest, NewDevPmRelationship, RespondToInviteRequest}; +use crate::models::relationship::{ + DevPmRelationship, InvitePmRequest, NewDevPmRelationship, RespondToInviteRequest, +}; use crate::models::snack::Snack; use crate::models::user::User; use crate::schema::dev_pm_relationships::{self, developer_id, project_manager_id, status}; @@ -62,10 +64,10 @@ pub fn list_developers(user: AuthenticatedUser) -> Result>, Statu users::table .inner_join( - dev_pm_relationships::table - .on(developer_id.eq(users::id) - .and(project_manager_id.eq(user.0.id)) - .and(status.eq("accepted"))) + dev_pm_relationships::table.on(developer_id + .eq(users::id) + .and(project_manager_id.eq(user.0.id)) + .and(status.eq("accepted"))), ) .select(users::all_columns) .load::(&mut conn) @@ -78,38 +80,29 @@ pub fn list_snacks(user: AuthenticatedUser) -> Result>, Status> let mut conn = db::establish_connection(); match user.0.role.as_str() { - "admin" => { - snacks::table - .limit(100) - .select(Snack::as_select()) - .load(&mut conn) - } - "project_manager" => { - snacks::table - .inner_join( - dev_pm_relationships::table - .on(user_id.eq(developer_id) - .and(project_manager_id.eq(user.0.id)) - .and(status.eq("accepted"))) - ) - .select(Snack::as_select()) - .distinct() - .limit(100) - .load(&mut conn) - } - _ => { - snacks::table - .filter(user_id.eq(user.0.id)) - .limit(100) - .select(Snack::as_select()) - .load(&mut conn) - } + "admin" => snacks::table.limit(100).select(Snack::as_select()).load(&mut conn), + "project_manager" => snacks::table + .inner_join( + dev_pm_relationships::table.on(user_id + .eq(developer_id) + .and(project_manager_id.eq(user.0.id)) + .and(status.eq("accepted"))), + ) + .select(Snack::as_select()) + .distinct() + .limit(100) + .load(&mut conn), + _ => snacks::table + .filter(user_id.eq(user.0.id)) + .limit(100) + .select(Snack::as_select()) + .load(&mut conn), } - .map(Json) - .map_err(|err| { - println!("Database error: {:?}", err); - Status::InternalServerError - }) + .map(Json) + .map_err(|err| { + println!("Database error: {:?}", err); + Status::InternalServerError + }) } #[patch("/respond-to-invite/", data = "")] @@ -138,4 +131,4 @@ pub fn respond_to_invite( .get_result(&mut conn) .map(Json) .map_err(|_| Status::InternalServerError) -} \ No newline at end of file +} diff --git a/src/routes/snack.rs b/src/routes/snack.rs index 7cea84b..f71a6ff 100644 --- a/src/routes/snack.rs +++ b/src/routes/snack.rs @@ -18,19 +18,17 @@ pub struct UpdateSnack { } #[post("/snack", data = "")] -pub fn create_snack(snack_data: Json, user: AuthenticatedUser) -> Result, Status> { +pub fn create_snack( + snack_data: Json, + user: AuthenticatedUser, +) -> Result, Status> { let mut conn = db::establish_connection(); let snack = snack_data.into_inner().into_new_snack(user.0.id); - - diesel::insert_into(snacks) - .values(&snack) - .get_result(&mut conn) - .map(Json) - .map_err(|err| { - println!("Database error: {:?}", err); - Status::InternalServerError - }) + diesel::insert_into(snacks).values(&snack).get_result(&mut conn).map(Json).map_err(|err| { + println!("Database error: {:?}", err); + Status::InternalServerError + }) } #[patch("/snack/", data = "")] @@ -41,16 +39,13 @@ pub fn update_snack( ) -> Result, Status> { let mut conn = db::establish_connection(); - let snack = snacks - .find(snack_id) - .first::(&mut conn) - .map_err(|err| { - println!("Database error: {:?}", err); - match err { - diesel::result::Error::NotFound => Status::NotFound, - _ => Status::InternalServerError - } - })?; + let snack = snacks.find(snack_id).first::(&mut conn).map_err(|err| { + println!("Database error: {:?}", err); + match err { + diesel::result::Error::NotFound => Status::NotFound, + _ => Status::InternalServerError, + } + })?; if snack.user_id != user.0.id && user.0.role != "admin" { return Err(Status::Forbidden); @@ -64,7 +59,7 @@ pub fn update_snack( println!("Database error: {:?}", err); match err { diesel::result::Error::NotFound => Status::NotFound, - _ => Status::InternalServerError + _ => Status::InternalServerError, } }) } @@ -73,9 +68,7 @@ pub fn update_snack( pub fn delete_snack(snack_id: i32, user: AuthenticatedUser) -> Status { let mut conn = db::establish_connection(); - match snacks - .find(snack_id) - .first::(&mut conn) { + match snacks.find(snack_id).first::(&mut conn) { Ok(snack) => { if snack.user_id != user.0.id && user.0.role != "admin" { return Status::Forbidden; @@ -93,8 +86,8 @@ pub fn delete_snack(snack_id: i32, user: AuthenticatedUser) -> Status { println!("Database error: {:?}", err); match err { diesel::result::Error::NotFound => Status::NotFound, - _ => Status::InternalServerError + _ => Status::InternalServerError, } } } -} \ No newline at end of file +} diff --git a/src/schema.rs b/src/schema.rs index 2ba8e83..f81b670 100644 --- a/src/schema.rs +++ b/src/schema.rs @@ -37,8 +37,4 @@ diesel::table! { diesel::joinable!(snacks -> users (user_id)); -diesel::allow_tables_to_appear_in_same_query!( - dev_pm_relationships, - snacks, - users, -); +diesel::allow_tables_to_appear_in_same_query!(dev_pm_relationships, snacks, users,); From ea0f18813a59de3602a221ecbec59d399397c6d2 Mon Sep 17 00:00:00 2001 From: Alex Andru <58406316+QuantGeekDev@users.noreply.github.com> Date: Thu, 24 Oct 2024 21:19:41 +0200 Subject: [PATCH 2/2] Delete .editorconfig --- .editorconfig | 21 --------------------- 1 file changed, 21 deletions(-) delete mode 100644 .editorconfig diff --git a/.editorconfig b/.editorconfig deleted file mode 100644 index 2a29932..0000000 --- a/.editorconfig +++ /dev/null @@ -1,21 +0,0 @@ -root = true - -[*] -end_of_line = lf -charset = utf-8 -trim_trailing_whitespace = true -insert_final_newline = true -indent_style = space -indent_size = 4 - -[*.rs] -max_line_length = 100 - -[*.md] -trim_trailing_whitespace = false - -[*.yml] -indent_size = 2 - -[Makefile] -indent_style = tab \ No newline at end of file