From a77fce417c16dff29bc97d3b2428c91810fb472e Mon Sep 17 00:00:00 2001 From: Artus Date: Sat, 22 Jun 2019 15:23:29 +0200 Subject: [PATCH] extracts server in its own module --- lootalot_db/src/lib.rs | 2 +- src/api.rs | 10 +++++----- src/main.rs | 37 +++---------------------------------- src/server.rs | 34 ++++++++++++++++++++++++++++++++++ 4 files changed, 43 insertions(+), 40 deletions(-) create mode 100644 src/server.rs diff --git a/lootalot_db/src/lib.rs b/lootalot_db/src/lib.rs index d70c6bd..e330b39 100644 --- a/lootalot_db/src/lib.rs +++ b/lootalot_db/src/lib.rs @@ -48,7 +48,7 @@ impl Player { pub fn create_pool() -> Pool { - dotenv::dotenv().ok(); + dbg!(dotenv::dotenv().ok()); let connspec = std::env::var("DATABASE_URL").expect("DATABASE_URL"); let manager = ConnectionManager::::new(connspec); r2d2::Pool::builder() diff --git a/src/api.rs b/src/api.rs index 4b234b5..aee1544 100644 --- a/src/api.rs +++ b/src/api.rs @@ -2,7 +2,7 @@ use actix_web::{web, web::Json, Error, HttpResponse, Result}; use futures::Future; use lootalot_db::Pool; -use lootalot_db::{ActionResult, DbConnection, Item, Player as PlayerData, QueryResult}; +use lootalot_db::{ActionResult, DbConnection, Item, Player, QueryResult}; pub struct DbApi<'q>(&'q DbConnection); @@ -11,8 +11,8 @@ impl<'q> DbApi<'q> { Self(conn) } - pub fn fetch_players(self) -> QueryResult> { - PlayerData::fetch_list(self.0) + pub fn fetch_players(self) -> QueryResult> { + Player::fetch_list(self.0) } pub fn as_player(self, id: i32) -> AsPlayer<'q> { @@ -28,10 +28,10 @@ pub struct AsPlayer<'q> { impl<'q> AsPlayer<'q> { /// Fetch the content of a player's chest pub fn loot(self) -> QueryResult> { - PlayerData::fetch_loot(self.id, self.conn) + Player::fetch_loot(self.id, self.conn) } pub fn claim(self, item: i32) -> ActionResult { - PlayerData::action_claim_object(self.id, item, self.conn) + Player::action_claim_object(self.id, item, self.conn) } } diff --git a/src/main.rs b/src/main.rs index e4f8797..6c266bf 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,44 +1,13 @@ extern crate dotenv; extern crate env_logger; - extern crate actix_web; extern crate lootalot_db; -use actix_files as fs; -use actix_web::{web, App, HttpServer}; -use std::env; - mod api; +mod server; -fn main() -> std::io::Result<()> { - env::set_var("RUST_LOG", "actix_web=debug"); +fn main() { env_logger::init(); dotenv::dotenv().ok(); - let www_root: String = env::var("WWW_ROOT").expect("WWW_ROOT must be set"); - println!("serving files from: {}", &www_root); - - use lootalot_db::Pool; - type AppPool = web::Data; - - let pool = lootalot_db::create_pool(); - HttpServer::new(move || { - App::new() - .data(pool.clone()) - .route( - "/players", - web::get().to_async(move |pool: AppPool| { - api::db_call(pool, move |api| api.fetch_players()) - }), - ) - .route( - "/loot/{player_id}", - web::get().to_async(move |pool: AppPool, player_id: web::Path| { - let player_id: i32 = *player_id; - api::db_call(pool, move |api| api.as_player(player_id).loot()) - }), - ) - .service(fs::Files::new("/", www_root.clone()).index_file("index.html")) - }) - .bind("127.0.0.1:8088")? - .run() + server::serve(); } diff --git a/src/server.rs b/src/server.rs new file mode 100644 index 0000000..b1ee20e --- /dev/null +++ b/src/server.rs @@ -0,0 +1,34 @@ +use std::env; +use actix_files as fs; +use actix_web::{web, App, HttpServer}; +use lootalot_db::Pool; +use crate::api; + +type AppPool = web::Data; + +pub(crate) fn serve() -> std::io::Result<()> { + let www_root: String = env::var("WWW_ROOT").expect("WWW_ROOT must be set"); + dbg!(&www_root); + let pool = lootalot_db::create_pool(); + + HttpServer::new(move || { + App::new() + .data(pool.clone()) + .route( + "/players", + web::get().to_async(move |pool: AppPool| { + api::db_call(pool, move |api| api.fetch_players()) + }), + ) + .route( + "/loot/{player_id}", + web::get().to_async(move |pool: AppPool, player_id: web::Path| { + let player_id: i32 = *player_id; + api::db_call(pool, move |api| api.as_player(player_id).loot()) + }), + ) + .service(fs::Files::new("/", www_root.clone()).index_file("index.html")) + }) + .bind("127.0.0.1:8088")? + .run() +}