Skip to content

Commit b97f390

Browse files
authored
refactor: minor tweaks (#87)
## Description Some minor tweaks: - **[Quests Server]** Runs DB migrations on start - **[Quests System]** Doesn't run DB migrations on start - **[Quests System]** EventProcessor now uses Arc<Self>
1 parent 888d536 commit b97f390

16 files changed

+207
-227
lines changed

crates/db/src/lib.rs

+4-2
Original file line numberDiff line numberDiff line change
@@ -414,7 +414,7 @@ impl Migrate for Database {
414414
}
415415
}
416416

417-
pub async fn create_quests_db_component(db_url: &str) -> DBResult<Database> {
417+
pub async fn create_quests_db_component(db_url: &str, run_migrations: bool) -> DBResult<Database> {
418418
println!("Database URL: {}", &db_url);
419419
let mut db_options = DatabaseOptions::new(db_url);
420420
db_options.pool_options = db_options
@@ -426,7 +426,9 @@ pub async fn create_quests_db_component(db_url: &str) -> DBResult<Database> {
426426

427427
match db_pool {
428428
Ok(db) => {
429-
db.migrate().await?;
429+
if run_migrations {
430+
db.migrate().await?;
431+
}
430432
Ok(db)
431433
}
432434
Err(error) => {

crates/server/src/components.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ pub async fn init_components() -> (Config, Database, RedisMessagesQueue, RedisCh
1010

1111
log::debug!("Configuration: {config:?}");
1212

13-
let quests_database = create_quests_db_component(&config.database_url)
13+
let quests_database = create_quests_db_component(&config.database_url, true)
1414
.await
1515
.expect("unable to run the migrations"); // we know that the migrations failed because if connection fails, the app panics
1616

crates/server/src/lib.rs

+19-21
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,8 @@ pub mod configuration;
44
pub mod domain;
55
pub mod rpc;
66

7-
use actix_web::web::Data;
7+
use std::sync::Arc;
8+
89
use api::middlewares::initialize_telemetry;
910
use components::init_components;
1011
use env_logger::init as initialize_logger;
@@ -15,33 +16,30 @@ pub async fn run_app() {
1516
initialize_telemetry();
1617

1718
let (config, db, redis_events_queue, redis_quests_channel) = init_components().await;
18-
19-
// Need to be a Data type for Actix. When it's a Data type, it's an Arc too.
20-
// So this let us to reuse the Arc instead of having a Data<Arc<Arc<T>>>
21-
// and then we can do the `into_inner()` to get the Arc that Data created.
22-
let config_arc = Data::new(config);
23-
let db_arc = Data::new(db);
24-
let redis_events_queue_arc = Data::new(redis_events_queue);
25-
26-
let actix_rest_api_server = api::run_server((
27-
config_arc.clone(),
28-
db_arc.clone(),
29-
redis_events_queue_arc.clone(),
30-
))
31-
.await;
19+
let (config, db, redis_events_queue) =
20+
(Arc::new(config), Arc::new(db), Arc::new(redis_events_queue));
3221

3322
let (warp_websocket_server, rpc_server) = rpc::run_rpc_server((
34-
config_arc.into_inner(),
35-
db_arc.into_inner(),
36-
redis_events_queue_arc.into_inner(),
23+
config.clone(),
24+
db.clone(),
25+
redis_events_queue.clone(),
3726
redis_quests_channel,
3827
))
3928
.await;
4029

30+
let actix_rest_api_server =
31+
api::run_server((config.into(), db.into(), redis_events_queue.into())).await;
32+
4133
select! {
42-
_ = actix_rest_api_server => {},
43-
_ = warp_websocket_server => {},
44-
_ = rpc_server => {},
34+
_ = actix_rest_api_server => {
35+
log::info!("> run_app > REST API finished. Exiting...");
36+
},
37+
_ = warp_websocket_server => {
38+
log::info!("> run_app > Warp server finished. Exiting...");
39+
},
40+
_ = rpc_server => {
41+
log::info!("> run_app > RPC Server finished. Exiting...");
42+
},
4543
_ = signal::ctrl_c() => {
4644
log::info!("> run_app > SIGINT catched. Exiting...");
4745
}

crates/server/src/main.rs

+2-3
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,8 @@
11
use quests_server::run_app;
22

33
#[actix_web::main]
4-
async fn main() -> std::io::Result<()> {
4+
async fn main() {
55
log::info!("Starting Quests API...");
6-
run_app().await;
76

8-
Ok(())
7+
run_app().await;
98
}

crates/server/tests/abandon_quest.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ use quests_server::api::routes::quests::{
1313
#[actix_web::test]
1414
async fn abandon_quest_should_be_200() {
1515
let config = get_configuration().await;
16-
let db = create_quests_db_component(&config.database_url)
16+
let db = create_quests_db_component(&config.database_url, true)
1717
.await
1818
.unwrap();
1919

@@ -74,7 +74,7 @@ async fn abandon_quest_should_be_200() {
7474
#[actix_web::test]
7575
async fn abandon_quest_should_be_403() {
7676
let config = get_configuration().await;
77-
let db = create_quests_db_component(&config.database_url)
77+
let db = create_quests_db_component(&config.database_url, true)
7878
.await
7979
.unwrap();
8080

crates/server/tests/common/mod.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ pub async fn build_app(
2929
InitError = (),
3030
>,
3131
> {
32-
let db = create_quests_db_component(&config.database_url)
32+
let db = create_quests_db_component(&config.database_url, true)
3333
.await
3434
.unwrap();
3535

crates/server/tests/deactivate_quest.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ use quests_server::api::routes::ErrorResponse;
99
#[actix_web::test]
1010
async fn deactivate_quest_should_be_200() {
1111
let config = get_configuration().await;
12-
let db = create_quests_db_component(&config.database_url)
12+
let db = create_quests_db_component(&config.database_url, true)
1313
.await
1414
.unwrap();
1515

crates/server/tests/get_all_states_by_address.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ use quests_server::api::routes::quests::{GetQuestStateByUserAddressResponse, Sta
1111
#[actix_web::test]
1212
async fn get_all_states_by_user_address_should_be_200() {
1313
let config = get_configuration().await;
14-
let db = create_quests_db_component(&config.database_url)
14+
let db = create_quests_db_component(&config.database_url, true)
1515
.await
1616
.unwrap();
1717

crates/server/tests/get_quest.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ use quests_server::api::routes::ErrorResponse;
1010
#[actix_web::test]
1111
async fn get_quest_should_be_200() {
1212
let config = get_configuration().await;
13-
let db = create_quests_db_component(&config.database_url)
13+
let db = create_quests_db_component(&config.database_url, true)
1414
.await
1515
.unwrap();
1616

crates/server/tests/get_quest_state.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ use uuid::Uuid;
1717
#[actix_web::test]
1818
async fn get_quest_state_should_be_200() {
1919
let config = get_configuration().await;
20-
let db = create_quests_db_component(&config.database_url)
20+
let db = create_quests_db_component(&config.database_url, true)
2121
.await
2222
.unwrap();
2323

crates/server/tests/start_quest.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ use uuid::Uuid;
1111
#[actix_web::test]
1212
async fn start_quest_should_be_200() {
1313
let config = get_configuration().await;
14-
let db = create_quests_db_component(&config.database_url)
14+
let db = create_quests_db_component(&config.database_url, true)
1515
.await
1616
.unwrap();
1717

@@ -44,7 +44,7 @@ async fn start_quest_should_be_200() {
4444
async fn start_quest_should_be_400() {
4545
// should not be able to start a quest that is inactive
4646
let config = get_configuration().await;
47-
let db = create_quests_db_component(&config.database_url)
47+
let db = create_quests_db_component(&config.database_url, true)
4848
.await
4949
.unwrap();
5050

crates/server/tests/update_quest.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ use quests_server::api::routes::ErrorResponse;
1313
#[actix_web::test]
1414
async fn update_quest_should_be_200() {
1515
let config = get_configuration().await;
16-
let db = create_quests_db_component(&config.database_url)
16+
let db = create_quests_db_component(&config.database_url, true)
1717
.await
1818
.unwrap();
1919

crates/system/src/configuration.rs

+4-8
Original file line numberDiff line numberDiff line change
@@ -5,28 +5,24 @@ use serde::Deserialize;
55
pub struct Config {
66
pub redis_url: String,
77
pub database_url: String,
8-
pub server_port: String,
8+
pub http_server_port: String,
99
}
1010

1111
const REDIS_URL: &str = "REDIS_URL";
1212
const DATABASE_URL: &str = "DATABASE_URL";
13+
const HTTP_SERVER_PORT: &str = "HTTP_SERVER_PORT";
1314

1415
impl Config {
1516
pub fn new() -> Result<Self, ConfigError> {
1617
let config = config::Config::builder()
17-
.add_source(
18-
config::Environment::with_prefix("HTTP") // => For HTTP_SERVER_PORT in WCK ENV
19-
.separator("_")
20-
.list_separator(" ")
21-
.try_parsing(true),
22-
)
2318
.add_source(
2419
config::Environment::default()
2520
.with_list_parse_key(REDIS_URL)
2621
.with_list_parse_key(DATABASE_URL)
22+
.with_list_parse_key(HTTP_SERVER_PORT)
2723
.try_parsing(true),
2824
)
29-
.set_default("server_port", "4000")?
25+
.set_default("http_server_port", "4000")?
3026
.set_default("redis_url", "127.0.0.1:6379")?
3127
.set_default(
3228
"database_url",

0 commit comments

Comments
 (0)