summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMatthias Beyer <mail@beyermatthias.de>2021-10-24 11:29:53 +0200
committerMatthias Beyer <mail@beyermatthias.de>2021-10-24 12:02:00 +0200
commit104f04bd1bef70ff20f66a787e7ad54148ac78be (patch)
treed06d64888df5b496ddac87d458df142754eac018
parentdfd72a3b32e4cfd877e2e2238849e23d3427d872 (diff)
Move DB utilities to db module
Signed-off-by: Matthias Beyer <mail@beyermatthias.de>
-rw-r--r--service-person/src/db.rs24
-rw-r--r--service-person/src/main.rs27
2 files changed, 27 insertions, 24 deletions
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<ConnectionManager<PgConnection>>;
+
+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<ConnectionManager<PgConnection>>;
-
-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<DbPool>, person: web::Json<Person>) -> Result<HttpResponse> {
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");