improved actix structure.
This commit is contained in:
1 parent
e14af22d3c
commit
663bf85257
4 files changed
+32
-34
No files matched your search
@@ -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
@@ -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
@@ -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,
|
||||||
|
|||||||
@@ -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");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Reference in new issue
Block a user