From 921e0a03d1529217ad43d66d7887cbdfe2d142d1 Mon Sep 17 00:00:00 2001 From: franklinblanco Date: Thu, 23 Jun 2022 15:55:06 -0400 Subject: [PATCH] Added working database connectivity --- src/dao/main_dao.rs | 22 ++++++++++++++++++++++ src/dao/user_dao.rs | 4 +++- src/main.rs | 10 ++++++++-- src/routes/main_router.rs | 2 +- src/routes/user_routes.rs | 4 ++-- 5 files changed, 36 insertions(+), 6 deletions(-) diff --git a/src/dao/main_dao.rs b/src/dao/main_dao.rs index e69de29..8acd33f 100644 --- a/src/dao/main_dao.rs +++ b/src/dao/main_dao.rs @@ -0,0 +1,22 @@ +use std::collections::HashMap; +use sqlx::{MySqlConnection, Connection}; + +pub async fn start_database_connection(env_vars: &HashMap) -> Result{ + let db_user = match env_vars.get("DB_USER") { + Some(str) => str, + None => panic!("DB_USER env var not found") + }; + let db_pass = match env_vars.get("DB_PASS") { + Some(str) => str, + None => panic!("DB_PASS env var not found") + }; + let db_host = match env_vars.get("DB_HOST") { + Some(str) => str, + None => panic!("DB_HOST env var not found") + }; + let db_database_name = match env_vars.get("DB_DATABASE_NAME") { + Some(str) => str, + None => panic!("DB_DATABASE_NAME env var not found") + }; + MySqlConnection::connect(&format!("mysql://{db_user}:{db_pass}@{db_host}/{db_database_name}")).await +} \ No newline at end of file diff --git a/src/dao/user_dao.rs b/src/dao/user_dao.rs index 7b48289..054ea63 100644 --- a/src/dao/user_dao.rs +++ b/src/dao/user_dao.rs @@ -1,6 +1,8 @@ +use sqlx::{ MySqlConnection}; + use crate::r#do::user::User; -pub async fn insert_user(user: User) -> Result<(), sqlx::Error>{ +pub async fn _insert_user(_conn: &mut MySqlConnection, _user: User) -> Result<(), sqlx::Error>{ Ok(()) } \ No newline at end of file diff --git a/src/main.rs b/src/main.rs index c408b59..270a4c8 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,17 +1,23 @@ mod r#do; mod dao; mod routes; mod service; mod util; + use util::env_util; use routes::main_router::{start_all_routes, after_startup_fn}; +use dao::main_dao; #[tokio::main] async fn main() -> Result<(), std::io::Error> { + // Retrieve env variables and send to services that need them. let env_vars = env_util::get_dot_env_map(); // Start database - + let _db_conn = match main_dao::start_database_connection(&env_vars).await { + Ok(conn) => conn, + Err(e) => panic!("{}", e) + }; // Start server - start_all_routes(&after_startup_fn, env_vars).await + start_all_routes(&after_startup_fn, &env_vars).await } diff --git a/src/routes/main_router.rs b/src/routes/main_router.rs index f26e66b..ba5c464 100644 --- a/src/routes/main_router.rs +++ b/src/routes/main_router.rs @@ -7,7 +7,7 @@ pub fn after_startup_fn(){ println!("{}", "Started server."); } -pub async fn start_all_routes(after_startup_fn_call: &dyn Fn(), env_vars: HashMap) +pub async fn start_all_routes(after_startup_fn_call: &dyn Fn(), env_vars: &HashMap) -> Result<(), std::io::Error> { // Get env variables to build server address diff --git a/src/routes/user_routes.rs b/src/routes/user_routes.rs index e3f5664..ffcddd4 100644 --- a/src/routes/user_routes.rs +++ b/src/routes/user_routes.rs @@ -1,8 +1,8 @@ -use actix_web::{get, web, Responder, HttpResponse, body::MessageBody}; +use actix_web::{get, web::{self, Path}, HttpResponse}; use crate::r#do::user::User; #[get("/user/{id}")] -pub async fn get_user_from_db(id: web::Path) -> HttpResponse { +pub async fn get_user_from_db(id: Path) -> HttpResponse { HttpResponse::Ok().json(web::Json(User {id: *id, name: "nigga".to_string()})) } \ No newline at end of file