From 747e4bc1e6e457063aaae68ec3f13df609bf39e6 Mon Sep 17 00:00:00 2001 From: guochao Date: Sat, 6 Aug 2022 16:33:37 +0800 Subject: [PATCH] refractor database ops into controllers --- src/web/controller.rs | 43 +++++++++++++++++++++++++++++++++++++++++-- src/web/mod.rs | 6 ++++-- src/web/view.rs | 5 +---- 3 files changed, 46 insertions(+), 8 deletions(-) diff --git a/src/web/controller.rs b/src/web/controller.rs index cd4eae9..f4836f2 100644 --- a/src/web/controller.rs +++ b/src/web/controller.rs @@ -1,3 +1,42 @@ -pub(crate) struct UserController; +use sea_orm::{DatabaseConnection}; -impl UserController {} +use super::model::user::{Model, Column}; + +use sea_orm::prelude::*; +use sea_orm::query::*; + +use serde::{Serialize, Deserialize}; + +use super::model::prelude::*; + +#[derive(Clone, Debug)] +pub(crate) struct UserController { + database: DatabaseConnection +} + +impl UserController { + pub fn new(database: DatabaseConnection) -> Self { + Self { database: database } + } + + pub async fn validate_password(&self, username: String, password: String) -> Result { + let maybe_user = User::find() + .filter(Column::Name.eq(username)) + .one(&self.database) + .await?; + + match maybe_user { + Some(user) => todo!(), + None => Ok(false), + } + } + + pub async fn list_all(&self, page: usize, count_per_page: usize) -> Result, sea_orm::DbErr> { + let users = User::find() + .paginate(&self.database, count_per_page) + .fetch_page(page) + .await?; + + Ok(users) + } +} diff --git a/src/web/mod.rs b/src/web/mod.rs index 06df0dc..c86b600 100644 --- a/src/web/mod.rs +++ b/src/web/mod.rs @@ -3,6 +3,8 @@ use sea_orm::DatabaseConnection; use crate::Opts; +use self::controller::UserController; + mod urls; mod controller; @@ -11,14 +13,14 @@ mod view; #[derive(Debug, Clone)] struct AppState { - database: DatabaseConnection, + user: UserController, } pub(crate) async fn run( database: DatabaseConnection, opts: Opts, ) -> Result<(), Box> { - let data = actix_web::web::Data::new(AppState { database: database }); + let data = actix_web::web::Data::new(AppState { user: UserController::new(database.clone()) }); let server = HttpServer::new(move || App::new().configure(urls::configure).app_data(data.clone())) diff --git a/src/web/view.rs b/src/web/view.rs index 8d2ff74..f9ac8d4 100644 --- a/src/web/view.rs +++ b/src/web/view.rs @@ -19,10 +19,7 @@ async fn index_page( ) -> Result> { let params = actix_web::web::Query::::from_query(req.query_string()).unwrap(); - let users = User::find() - .paginate(&data.database, params.posts_per_page.unwrap_or(10)) - .fetch_page(params.page.unwrap_or(0)) - .await?; + let users = data.user.list_all(params.page.unwrap_or(0), params.posts_per_page.unwrap_or(5)).await?; Ok(actix_web::web::Json(users)) }