From 493e3a30773dacad7cf8c16b738e2ecbf884b912 Mon Sep 17 00:00:00 2001 From: EETagent Date: Tue, 1 Nov 2022 11:35:05 +0100 Subject: [PATCH] refactor: massive refactoring of query and mutation --- core/src/database/mod.rs | 2 + .../mutation/candidate.rs} | 40 ++-------------- core/src/database/mutation/mod.rs | 4 ++ core/src/database/mutation/session.rs | 37 +++++++++++++++ .../{query.rs => database/query/candidate.rs} | 47 ++++++++----------- core/src/database/query/mod.rs | 4 ++ core/src/database/query/session.rs | 37 +++++++++++++++ core/src/lib.rs | 7 ++- 8 files changed, 111 insertions(+), 67 deletions(-) create mode 100644 core/src/database/mod.rs rename core/src/{mutation.rs => database/mutation/candidate.rs} (74%) create mode 100644 core/src/database/mutation/mod.rs create mode 100644 core/src/database/mutation/session.rs rename core/src/{query.rs => database/query/candidate.rs} (56%) create mode 100644 core/src/database/query/mod.rs create mode 100644 core/src/database/query/session.rs diff --git a/core/src/database/mod.rs b/core/src/database/mod.rs new file mode 100644 index 0000000..f1dee11 --- /dev/null +++ b/core/src/database/mod.rs @@ -0,0 +1,2 @@ +pub mod mutation; +pub mod query; \ No newline at end of file diff --git a/core/src/mutation.rs b/core/src/database/mutation/candidate.rs similarity index 74% rename from core/src/mutation.rs rename to core/src/database/mutation/candidate.rs index ba914fa..55d870c 100644 --- a/core/src/mutation.rs +++ b/core/src/database/mutation/candidate.rs @@ -1,11 +1,9 @@ +use crate::Mutation; use std::vec; -use chrono::{Utc, Duration}; -use ::entity::{candidate, session}; -use sea_orm::{*, prelude::Uuid}; -use crate::crypto::{hash_password, self}; - -pub struct Mutation; +use ::entity::candidate; +use sea_orm::{*}; +use crate::{crypto::{hash_password, self}}; impl Mutation { pub async fn create_candidate( @@ -37,36 +35,6 @@ impl Mutation { .insert(db) .await } - - - pub async fn insert_session( - db: &DbConn, - user_id: i32, - random_uuid: Uuid, - ip_addr: String, - ) -> Result { - session::ActiveModel { - id: Set(random_uuid), - user_id: Set(user_id), - ip_address: Set(ip_addr), - created_at: Set(Utc::now().naive_local()), - expires_at: Set(Utc::now().naive_local().checked_add_signed(Duration::days(1)).unwrap()), - } - .insert(db) - .await - } - - pub async fn delete_session( - db: &DbConn, - session_id: Uuid - ) -> Result { - session::ActiveModel { - id: Set(session_id), - ..Default::default() - } - .delete(db) - .await - } } diff --git a/core/src/database/mutation/mod.rs b/core/src/database/mutation/mod.rs new file mode 100644 index 0000000..633a325 --- /dev/null +++ b/core/src/database/mutation/mod.rs @@ -0,0 +1,4 @@ +pub struct Mutation; + +pub mod session; +pub mod candidate; \ No newline at end of file diff --git a/core/src/database/mutation/session.rs b/core/src/database/mutation/session.rs new file mode 100644 index 0000000..db82b4b --- /dev/null +++ b/core/src/database/mutation/session.rs @@ -0,0 +1,37 @@ +use chrono::{Utc, Duration}; +use ::entity::session; +use sea_orm::{*, prelude::Uuid}; + +use crate::Mutation; + + +impl Mutation { + pub async fn insert_session( + db: &DbConn, + user_id: i32, + random_uuid: Uuid, + ip_addr: String, + ) -> Result { + session::ActiveModel { + id: Set(random_uuid), + user_id: Set(user_id), + ip_address: Set(ip_addr), + created_at: Set(Utc::now().naive_local()), + expires_at: Set(Utc::now() + .naive_local() + .checked_add_signed(Duration::days(1)) + .unwrap()), + } + .insert(db) + .await + } + + pub async fn delete_session(db: &DbConn, session_id: Uuid) -> Result { + session::ActiveModel { + id: Set(session_id), + ..Default::default() + } + .delete(db) + .await + } +} diff --git a/core/src/query.rs b/core/src/database/query/candidate.rs similarity index 56% rename from core/src/query.rs rename to core/src/database/query/candidate.rs index 0c0c440..a8b5552 100644 --- a/core/src/query.rs +++ b/core/src/database/query/candidate.rs @@ -1,44 +1,35 @@ -use ::entity::{candidate, candidate::Entity as Candidate}; -use ::entity::{session, session::Entity as Session}; -use sea_orm::*; -use sea_orm::prelude::Uuid; +use crate::Query; -pub struct Query; +use ::entity::{candidate, candidate::Entity as Candidate}; +use sea_orm::*; impl Query { - pub async fn find_candidate_by_id(db: &DbConn, id: i32) -> Result, DbErr> { + pub async fn find_candidate_by_id( + db: &DbConn, + id: i32, + ) -> Result, DbErr> { Candidate::find_by_id(id).one(db).await } - - pub async fn find_session_by_uuid(db: &DbConn, uuid: Uuid) -> Result, DbErr> { - Session::find_by_id(uuid).one(db).await - } - - // find session by user id - pub async fn find_sessions_by_user_id(db: &DbConn, user_id: i32) -> Result, DbErr> { - Session::find() - .filter(session::Column::UserId.eq(user_id)) - .all(db) - .await - } } #[cfg(test)] mod tests { - use sea_orm::{DbConn, Set, ActiveModelTrait}; use entity::candidate; - use sea_orm::{Schema, Database, DbBackend, sea_query::TableCreateStatement, ConnectionTrait}; + use sea_orm::{sea_query::TableCreateStatement, ConnectionTrait, Database, DbBackend, Schema}; + use sea_orm::{ActiveModelTrait, DbConn, Set}; use crate::Query; - + #[cfg(test)] async fn get_memory_sqlite_connection() -> DbConn { let base_url = "sqlite::memory:"; let db: DbConn = Database::connect(base_url).await.unwrap(); - + let schema = Schema::new(DbBackend::Sqlite); let stmt: TableCreateStatement = schema.create_table_from_entity(candidate::Entity); - db.execute(db.get_database_backend().build(&stmt)).await.unwrap(); + db.execute(db.get_database_backend().build(&stmt)) + .await + .unwrap(); db } @@ -55,11 +46,13 @@ mod tests { updated_at: Set(chrono::offset::Local::now().naive_local()), ..Default::default() } - .insert(&db) + .insert(&db) + .await + .unwrap(); + + let candidate = Query::find_candidate_by_id(&db, candidate.application) .await .unwrap(); - - let candidate = Query::find_candidate_by_id(&db, candidate.application).await.unwrap(); assert!(candidate.is_some()); } -} \ No newline at end of file +} diff --git a/core/src/database/query/mod.rs b/core/src/database/query/mod.rs new file mode 100644 index 0000000..df4cb4a --- /dev/null +++ b/core/src/database/query/mod.rs @@ -0,0 +1,4 @@ +pub struct Query; + +pub mod candidate; +pub mod session; \ No newline at end of file diff --git a/core/src/database/query/session.rs b/core/src/database/query/session.rs new file mode 100644 index 0000000..23ec16c --- /dev/null +++ b/core/src/database/query/session.rs @@ -0,0 +1,37 @@ +use crate::Query; + +use ::entity::{session, session::Entity as Session}; +use sea_orm::*; +use sea_orm::prelude::Uuid; + +impl Query { + pub async fn find_session_by_uuid(db: &DbConn, uuid: Uuid) -> Result, DbErr> { + Session::find_by_id(uuid).one(db).await + } + + // find session by user id + pub async fn find_sessions_by_user_id(db: &DbConn, user_id: i32) -> Result, DbErr> { + Session::find() + .filter(session::Column::UserId.eq(user_id)) + .all(db) + .await + } +} + +#[cfg(test)] +mod tests { + use sea_orm::DbConn; + use entity::candidate; + use sea_orm::{Schema, Database, DbBackend, sea_query::TableCreateStatement, ConnectionTrait}; + + #[cfg(test)] + async fn get_memory_sqlite_connection() -> DbConn { + let base_url = "sqlite::memory:"; + let db: DbConn = Database::connect(base_url).await.unwrap(); + + let schema = Schema::new(DbBackend::Sqlite); + let stmt: TableCreateStatement = schema.create_table_from_entity(candidate::Entity); + db.execute(db.get_database_backend().build(&stmt)).await.unwrap(); + db + } +} \ No newline at end of file diff --git a/core/src/lib.rs b/core/src/lib.rs index 1773217..1121e29 100644 --- a/core/src/lib.rs +++ b/core/src/lib.rs @@ -1,11 +1,10 @@ -mod mutation; -mod query; +pub mod database; pub mod crypto; pub mod filetype; pub mod services; pub mod error; -pub use mutation::*; -pub use query::*; +pub use database::mutation::*; +pub use database::query::*; pub use sea_orm;