Skip to content

Commit c83c828

Browse files
committed
feat: uso global pool connection db
1 parent ae036d2 commit c83c828

File tree

2 files changed

+38
-14
lines changed

2 files changed

+38
-14
lines changed

src/database.rs

Lines changed: 24 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,13 @@ use axum::{
33
};
44
use mysql::{Opts, Pool};
55
use std::env;
6+
use std::sync::OnceLock;
67

7-
pub fn connect_to_database() -> Result<mysql::PooledConn, (StatusCode, String)> {
8+
// Pool global usando OnceLock para inicialização única
9+
static DB_POOL: OnceLock<Pool> = OnceLock::new();
10+
11+
12+
pub fn init_db_pool() -> Result<(), (StatusCode, String)> {
813
let db_url = env::var("DB_URL").map_err(|_| {
914
(
1015
StatusCode::INTERNAL_SERVER_ERROR,
@@ -26,14 +31,28 @@ pub fn connect_to_database() -> Result<mysql::PooledConn, (StatusCode, String)>
2631
)
2732
})?;
2833

29-
let conn = pool.get_conn().map_err(|_| {
34+
DB_POOL.set(pool).map_err(|_| {
3035
(
3136
StatusCode::INTERNAL_SERVER_ERROR,
32-
"Falha ao obter conexão do pool".to_string(),
37+
"Falha ao configurar o pool global".to_string(),
3338
)
34-
})?;
39+
})
40+
}
41+
3542

36-
Ok(conn)
43+
44+
pub fn connect_to_database() -> Result<mysql::PooledConn, (StatusCode, String)> {
45+
let pool = DB_POOL.get().ok_or((
46+
StatusCode::INTERNAL_SERVER_ERROR,
47+
"Pool de conexões não inicializado".to_string(),
48+
))?;
49+
50+
pool.get_conn().map_err(|_| {
51+
(
52+
StatusCode::INTERNAL_SERVER_ERROR,
53+
"Falha ao obter conexão do pool".to_string(),
54+
)
55+
})
3756
}
3857

3958

src/main.rs

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,20 @@ async fn main() {
4545
.with(tracing_subscriber::fmt::layer())
4646
.init();
4747

48+
let _db_url = match env::var("DB_URL") {
49+
Ok(url) => url,
50+
Err(_) => {
51+
tracing::info!("error url");
52+
panic!("Erro crítico: DB_URL não está configurada");
53+
54+
}
55+
};
56+
// Inicializa o pool de conexões do banco de dados
57+
if let Err((status, message)) = database::init_db_pool() {
58+
tracing::error!("Falha ao inicializar o pool de banco de dados: {}", message);
59+
panic!("Erro crítico: Falha ao inicializar o pool de banco de dados");
60+
}
61+
4862
let app = Router::new()
4963
.route("/api/healthcheck", get(health_check_handler))
5064
.route("/api/authors", post(add_author))
@@ -56,15 +70,6 @@ async fn main() {
5670
.layer(middleware::from_fn(validation_fingerprint))
5771
.layer(middleware::from_fn(error_logging_middleware));
5872

59-
let _db_url = match env::var("DB_URL") {
60-
Ok(url) => url,
61-
Err(_) => {
62-
tracing::info!("error url");
63-
panic!("Erro crítico: DB_URL não está configurada");
64-
65-
}
66-
};
67-
6873
let _api_token = match env::var("API_TOKEN") {
6974
Ok(url) => url,
7075
Err(_) => {

0 commit comments

Comments
 (0)