From 104f04bd1bef70ff20f66a787e7ad54148ac78be Mon Sep 17 00:00:00 2001 From: Matthias Beyer Date: Sun, 24 Oct 2021 11:29:53 +0200 Subject: Move DB utilities to db module Signed-off-by: Matthias Beyer --- service-person/src/db.rs | 24 ++++++++++++++++++++++++ service-person/src/main.rs | 27 +++------------------------ 2 files changed, 27 insertions(+), 24 deletions(-) create mode 100644 service-person/src/db.rs diff --git a/service-person/src/db.rs b/service-person/src/db.rs new file mode 100644 index 0000000..1094233 --- /dev/null +++ b/service-person/src/db.rs @@ -0,0 +1,24 @@ +use std::str::FromStr; + +use diesel::pg::PgConnection; +use diesel::r2d2::ConnectionManager; +use diesel::r2d2::Pool; + +pub type DbPool = Pool>; + +pub fn establish_connection() -> DbPool { + let database_url = std::env::var("DATABASE_URL") + .expect("DATABASE_URL must be set"); + + let pool_max_size = std::env::var("DATABASE_MAX_CONNECTIONS") + .as_ref() + .map(|s| u32::from_str(s)) + .expect("DATABASE_URL must be set") + .expect("Failed to parse string into integer for DATABASE_MAX_CONNECTIONS"); + + let manager = diesel::r2d2::ConnectionManager::new(&database_url); + diesel::r2d2::Pool::builder() + .max_size(pool_max_size) + .build(manager) + .expect(&format!("Error connection to {}", database_url)) +} diff --git a/service-person/src/main.rs b/service-person/src/main.rs index 2c86a37..5fd9a9d 100644 --- a/service-person/src/main.rs +++ b/service-person/src/main.rs @@ -7,37 +7,16 @@ use std::str::FromStr; use anyhow::Context; use actix_web::{web, App, HttpServer, HttpResponse, Result}; -use diesel::pg::PgConnection; -use diesel::prelude::*; -use diesel::r2d2::ConnectionManager; -use diesel::r2d2::Pool; +mod db; mod model; mod schema; use crate::model::*; +use crate::db::DbPool; embed_migrations!("migrations"); -type DbPool = Pool>; - -pub fn establish_connection() -> DbPool { - let database_url = std::env::var("DATABASE_URL") - .expect("DATABASE_URL must be set"); - - let pool_max_size = std::env::var("DATABASE_MAX_CONNECTIONS") - .as_ref() - .map(|s| u32::from_str(s)) - .expect("DATABASE_URL must be set") - .expect("Failed to parse string into integer for DATABASE_MAX_CONNECTIONS"); - - let manager = diesel::r2d2::ConnectionManager::new(&database_url); - diesel::r2d2::Pool::builder() - .max_size(pool_max_size) - .build(manager) - .expect(&format!("Error connection to {}", database_url)) -} - async fn create_person(db: web::Data, person: web::Json) -> Result { log::debug!("Creating person = {:?}", person); Ok(HttpResponse::Ok().finish()) @@ -54,7 +33,7 @@ async fn main() -> anyhow::Result<()> { .expect("environment: PORT variable not set") .context("Failed to parse port as integer")?; - let db_connection_pool = establish_connection(); + let db_connection_pool = crate::db::establish_connection(); { let conn = db_connection_pool.get().expect("Failed to get connection from pool"); -- cgit v1.2.3