improved actix structure.

This commit is contained in:
didier amyot committed 2023-03-09 09:35:42 -05:00
1 parent e14af22d3c
commit 663bf85257
4 files changed
+32 -34

No files matched your search

+1 -1
View File
@@ -57,7 +57,7 @@ pub async fn index(req: HttpRequest,
let mut service_factory = ReadOnlyServiceFactory::new(&mut conn); let mut service_factory = ReadOnlyServiceFactory::new(&mut conn);
let authentication_service = service_factory.get_authentication_service().unwrap(); let authentication_service = service_factory.get_authentication_service().unwrap();
let userid = authentication_service.get_login(& req);; let userid = authentication_service.get_login(& req);
let username = userid.clone().unwrap_or("".to_string()); let username = userid.clone().unwrap_or("".to_string());
let ctx = context!{ let ctx = context!{
is_logged_in => userid.is_some(), is_logged_in => userid.is_some(),
+30 -26
View File
@@ -3,13 +3,7 @@
use std::{env, path::PathBuf}; use std::{env, path::PathBuf};
use actix_files; use actix_files;
use actix_web::{ use actix_web::{dev::ServiceResponse, error, http::{header::ContentType, StatusCode}, middleware::{ErrorHandlerResponse, ErrorHandlers, Logger}, web, App, FromRequest, HttpRequest, HttpResponse, HttpServer, Responder, Result, Scope};
dev::ServiceResponse,
error,
http::{header::ContentType, StatusCode},
middleware::{ErrorHandlerResponse, ErrorHandlers, Logger},
web, App, FromRequest, HttpRequest, HttpResponse, HttpServer, Responder, Result,
};
use actix_web_lab::respond::Html; use actix_web_lab::respond::Html;
use async_channel; use async_channel;
use futures::{pin_mut, select, FutureExt}; use futures::{pin_mut, select, FutureExt};
@@ -19,13 +13,12 @@ use rusqlite::Connection;
use crate::events::Event; use crate::events::Event;
use crate::util::{CustomResult, Error, SQLiteConnectionFactory}; use crate::util::{CustomResult, Error, SQLiteConnectionFactory};
use crate::webui::worker::{bob, event_processor_loop}; use crate::webui::worker::{event_processor_loop};
mod views;
mod worker;
mod index_views; mod index_views;
mod services; mod services;
mod views;
mod worker;
struct MiniJinjaRenderer { struct MiniJinjaRenderer {
tmpl_env: web::Data<minijinja_autoreload::AutoReloader>, tmpl_env: web::Data<minijinja_autoreload::AutoReloader>,
@@ -77,6 +70,28 @@ fn create_auto_reloader(enable_template_autoreload: bool) -> AutoReloader {
}) })
} }
fn create_static_scope() -> Scope {
web::scope("/static").service(
actix_files::Files::new("/", "./resources/static/"))
}
fn create_api_scope() -> Scope {
web::scope("/v1")
.service(views::push_event)
}
fn create_views_scope() -> Scope {
web::scope("")
.service(index_views::index)
.service(index_views::login)
.service(index_views::logout)
.service(views::actions)
.service(views::accounts)
.service(views::overview)
.service(views::overview_submit_button)
.service(views::actions_partials)
}
#[tokio::main] #[tokio::main]
pub async fn web_ui_main( pub async fn web_ui_main(
conn_fact: SQLiteConnectionFactory, conn_fact: SQLiteConnectionFactory,
@@ -100,18 +115,9 @@ pub async fn web_ui_main(
.app_data(tmpl_reloader.clone()) .app_data(tmpl_reloader.clone())
.app_data(web::Data::new(event_sender.clone())) .app_data(web::Data::new(event_sender.clone()))
.app_data(web::Data::new(cloned_conn_fact.clone())) .app_data(web::Data::new(cloned_conn_fact.clone()))
.service( .service(create_static_scope())
actix_files::Files::new("/static", "./resources/static/").use_last_modified(true), .service(create_api_scope())
) .service(create_views_scope())
.service(index_views::index)
.service(index_views::login)
.service(index_views::logout)
.service(views::actions)
.service(views::accounts)
.service(views::overview)
.service(views::overview_submit_button)
.service(views::actions_partials)
.service(views::push_event)
.wrap(ErrorHandlers::new().handler(StatusCode::NOT_FOUND, not_found)) .wrap(ErrorHandlers::new().handler(StatusCode::NOT_FOUND, not_found))
.wrap(Logger::default()) .wrap(Logger::default())
}) })
@@ -121,13 +127,11 @@ pub async fn web_ui_main(
let t1 = server.run().fuse(); let t1 = server.run().fuse();
let t2 = event_processor_loop(conn_fact, event_receiver).fuse(); let t2 = event_processor_loop(conn_fact, event_receiver).fuse();
let t3 = bob().fuse(); pin_mut!(t1, t2);
pin_mut!(t1, t2, t3);
select! { select! {
x = t1 => x.map_err(Error::IOError), x = t1 => x.map_err(Error::IOError),
y = t2 => y, y = t2 => y,
z = t3 => z,
} }
} }
+1 -1
View File
@@ -72,7 +72,7 @@ struct CreateEventPayload {
event_type: String, event_type: String,
} }
#[actix_web::post("/v1/events/{event_type}")] #[actix_web::post("/events/{event_type}")]
pub async fn push_event( pub async fn push_event(
req: HttpRequest, req: HttpRequest,
tmpl_env: MiniJinjaRenderer, tmpl_env: MiniJinjaRenderer,
-6
View File
@@ -26,9 +26,3 @@ pub async fn event_processor_loop(
} }
} }
pub async fn bob() -> CustomResult<()> {
loop {
sleep(Duration::from_millis(1000)).await;
// println!("100 ms have elapsed");
}
}