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

+30 -26
View File
@@ -3,13 +3,7 @@
use std::{env, path::PathBuf};
use actix_files;
use actix_web::{
dev::ServiceResponse,
error,
http::{header::ContentType, StatusCode},
middleware::{ErrorHandlerResponse, ErrorHandlers, Logger},
web, App, FromRequest, HttpRequest, HttpResponse, HttpServer, Responder, Result,
};
use actix_web::{dev::ServiceResponse, error, http::{header::ContentType, StatusCode}, middleware::{ErrorHandlerResponse, ErrorHandlers, Logger}, web, App, FromRequest, HttpRequest, HttpResponse, HttpServer, Responder, Result, Scope};
use actix_web_lab::respond::Html;
use async_channel;
use futures::{pin_mut, select, FutureExt};
@@ -19,13 +13,12 @@ use rusqlite::Connection;
use crate::events::Event;
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 services;
mod views;
mod worker;
struct MiniJinjaRenderer {
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]
pub async fn web_ui_main(
conn_fact: SQLiteConnectionFactory,
@@ -100,18 +115,9 @@ pub async fn web_ui_main(
.app_data(tmpl_reloader.clone())
.app_data(web::Data::new(event_sender.clone()))
.app_data(web::Data::new(cloned_conn_fact.clone()))
.service(
actix_files::Files::new("/static", "./resources/static/").use_last_modified(true),
)
.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)
.service(create_static_scope())
.service(create_api_scope())
.service(create_views_scope())
.wrap(ErrorHandlers::new().handler(StatusCode::NOT_FOUND, not_found))
.wrap(Logger::default())
})
@@ -121,13 +127,11 @@ pub async fn web_ui_main(
let t1 = server.run().fuse();
let t2 = event_processor_loop(conn_fact, event_receiver).fuse();
let t3 = bob().fuse();
pin_mut!(t1, t2, t3);
pin_mut!(t1, t2);
select! {
x = t1 => x.map_err(Error::IOError),
y = t2 => y,
z = t3 => z,
}
}