refactor: massive refactoring of query and mutation

This commit is contained in:
EETagent 2022-11-01 11:35:05 +01:00
parent 89c66958bc
commit 493e3a3077
8 changed files with 111 additions and 67 deletions

2
core/src/database/mod.rs Normal file
View file

@ -0,0 +1,2 @@
pub mod mutation;
pub mod query;

View file

@ -1,11 +1,9 @@
use crate::Mutation;
use std::vec; use std::vec;
use chrono::{Utc, Duration}; use ::entity::candidate;
use ::entity::{candidate, session}; use sea_orm::{*};
use sea_orm::{*, prelude::Uuid}; use crate::{crypto::{hash_password, self}};
use crate::crypto::{hash_password, self};
pub struct Mutation;
impl Mutation { impl Mutation {
pub async fn create_candidate( pub async fn create_candidate(
@ -37,36 +35,6 @@ impl Mutation {
.insert(db) .insert(db)
.await .await
} }
pub async fn insert_session(
db: &DbConn,
user_id: i32,
random_uuid: Uuid,
ip_addr: String,
) -> Result<session::Model, DbErr> {
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<DeleteResult, DbErr> {
session::ActiveModel {
id: Set(session_id),
..Default::default()
}
.delete(db)
.await
}
} }

View file

@ -0,0 +1,4 @@
pub struct Mutation;
pub mod session;
pub mod candidate;

View file

@ -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::Model, DbErr> {
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<DeleteResult, DbErr> {
session::ActiveModel {
id: Set(session_id),
..Default::default()
}
.delete(db)
.await
}
}

View file

@ -1,33 +1,22 @@
use ::entity::{candidate, candidate::Entity as Candidate}; use crate::Query;
use ::entity::{session, session::Entity as Session};
use sea_orm::*;
use sea_orm::prelude::Uuid;
pub struct Query; use ::entity::{candidate, candidate::Entity as Candidate};
use sea_orm::*;
impl Query { impl Query {
pub async fn find_candidate_by_id(db: &DbConn, id: i32) -> Result<Option<candidate::Model>, DbErr> { pub async fn find_candidate_by_id(
db: &DbConn,
id: i32,
) -> Result<Option<candidate::Model>, DbErr> {
Candidate::find_by_id(id).one(db).await Candidate::find_by_id(id).one(db).await
} }
pub async fn find_session_by_uuid(db: &DbConn, uuid: Uuid) -> Result<Option<session::Model>, 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<Vec<session::Model>, DbErr> {
Session::find()
.filter(session::Column::UserId.eq(user_id))
.all(db)
.await
}
} }
#[cfg(test)] #[cfg(test)]
mod tests { mod tests {
use sea_orm::{DbConn, Set, ActiveModelTrait};
use entity::candidate; 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; use crate::Query;
@ -38,7 +27,9 @@ mod tests {
let schema = Schema::new(DbBackend::Sqlite); let schema = Schema::new(DbBackend::Sqlite);
let stmt: TableCreateStatement = schema.create_table_from_entity(candidate::Entity); 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 db
} }
@ -55,11 +46,13 @@ mod tests {
updated_at: Set(chrono::offset::Local::now().naive_local()), updated_at: Set(chrono::offset::Local::now().naive_local()),
..Default::default() ..Default::default()
} }
.insert(&db) .insert(&db)
.await
.unwrap();
let candidate = Query::find_candidate_by_id(&db, candidate.application)
.await .await
.unwrap(); .unwrap();
let candidate = Query::find_candidate_by_id(&db, candidate.application).await.unwrap();
assert!(candidate.is_some()); assert!(candidate.is_some());
} }
} }

View file

@ -0,0 +1,4 @@
pub struct Query;
pub mod candidate;
pub mod session;

View file

@ -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<Option<session::Model>, 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<Vec<session::Model>, 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
}
}

View file

@ -1,11 +1,10 @@
mod mutation; pub mod database;
mod query;
pub mod crypto; pub mod crypto;
pub mod filetype; pub mod filetype;
pub mod services; pub mod services;
pub mod error; pub mod error;
pub use mutation::*; pub use database::mutation::*;
pub use query::*; pub use database::query::*;
pub use sea_orm; pub use sea_orm;