refactor: extract DB init to database.rs
This commit is contained in:
36
k-tv-backend/api/src/database.rs
Normal file
36
k-tv-backend/api/src/database.rs
Normal file
@@ -0,0 +1,36 @@
|
|||||||
|
use std::sync::Arc;
|
||||||
|
use std::time::Duration as StdDuration;
|
||||||
|
|
||||||
|
use crate::config::Config;
|
||||||
|
use infra::run_migrations;
|
||||||
|
use k_core::db::DatabasePool;
|
||||||
|
|
||||||
|
pub async fn init_database(config: &Config) -> anyhow::Result<Arc<DatabasePool>> {
|
||||||
|
tracing::info!("Connecting to database: {}", config.database_url);
|
||||||
|
|
||||||
|
#[cfg(all(feature = "sqlite", not(feature = "postgres")))]
|
||||||
|
let db_type = k_core::db::DbType::Sqlite;
|
||||||
|
|
||||||
|
#[cfg(all(feature = "postgres", not(feature = "sqlite")))]
|
||||||
|
let db_type = k_core::db::DbType::Postgres;
|
||||||
|
|
||||||
|
// Both features enabled: fall back to URL inspection at runtime
|
||||||
|
#[cfg(all(feature = "sqlite", feature = "postgres"))]
|
||||||
|
let db_type = if config.database_url.starts_with("postgres") {
|
||||||
|
k_core::db::DbType::Postgres
|
||||||
|
} else {
|
||||||
|
k_core::db::DbType::Sqlite
|
||||||
|
};
|
||||||
|
|
||||||
|
let db_config = k_core::db::DatabaseConfig {
|
||||||
|
db_type,
|
||||||
|
url: config.database_url.clone(),
|
||||||
|
max_connections: config.db_max_connections,
|
||||||
|
min_connections: config.db_min_connections,
|
||||||
|
acquire_timeout: StdDuration::from_secs(30),
|
||||||
|
};
|
||||||
|
|
||||||
|
let pool = k_core::db::connect(&db_config).await?;
|
||||||
|
run_migrations(&pool).await?;
|
||||||
|
Ok(Arc::new(pool))
|
||||||
|
}
|
||||||
@@ -4,7 +4,6 @@
|
|||||||
|
|
||||||
use std::net::SocketAddr;
|
use std::net::SocketAddr;
|
||||||
use std::sync::Arc;
|
use std::sync::Arc;
|
||||||
use std::time::Duration as StdDuration;
|
|
||||||
|
|
||||||
use axum::Router;
|
use axum::Router;
|
||||||
use axum::http::{HeaderName, HeaderValue};
|
use axum::http::{HeaderName, HeaderValue};
|
||||||
@@ -15,11 +14,11 @@ use domain::{ChannelService, IMediaProvider, IProviderRegistry, ProviderCapabili
|
|||||||
use infra::factory::{build_activity_log_repository, build_channel_repository, build_provider_config_repository, build_schedule_repository, build_user_repository};
|
use infra::factory::{build_activity_log_repository, build_channel_repository, build_provider_config_repository, build_schedule_repository, build_user_repository};
|
||||||
#[cfg(feature = "local-files")]
|
#[cfg(feature = "local-files")]
|
||||||
use infra::factory::build_transcode_settings_repository;
|
use infra::factory::build_transcode_settings_repository;
|
||||||
use infra::run_migrations;
|
|
||||||
use k_core::http::server::{ServerConfig, apply_standard_middleware};
|
use k_core::http::server::{ServerConfig, apply_standard_middleware};
|
||||||
use tokio::net::TcpListener;
|
use tokio::net::TcpListener;
|
||||||
|
|
||||||
mod config;
|
mod config;
|
||||||
|
mod database;
|
||||||
mod dto;
|
mod dto;
|
||||||
mod error;
|
mod error;
|
||||||
mod events;
|
mod events;
|
||||||
@@ -44,33 +43,7 @@ async fn main() -> anyhow::Result<()> {
|
|||||||
info!("Starting server on {}:{}", config.host, config.port);
|
info!("Starting server on {}:{}", config.host, config.port);
|
||||||
|
|
||||||
// Setup database
|
// Setup database
|
||||||
tracing::info!("Connecting to database: {}", config.database_url);
|
let db_pool = database::init_database(&config).await?;
|
||||||
|
|
||||||
#[cfg(all(feature = "sqlite", not(feature = "postgres")))]
|
|
||||||
let db_type = k_core::db::DbType::Sqlite;
|
|
||||||
|
|
||||||
#[cfg(all(feature = "postgres", not(feature = "sqlite")))]
|
|
||||||
let db_type = k_core::db::DbType::Postgres;
|
|
||||||
|
|
||||||
// Both features enabled: fall back to URL inspection at runtime
|
|
||||||
#[cfg(all(feature = "sqlite", feature = "postgres"))]
|
|
||||||
let db_type = if config.database_url.starts_with("postgres") {
|
|
||||||
k_core::db::DbType::Postgres
|
|
||||||
} else {
|
|
||||||
k_core::db::DbType::Sqlite
|
|
||||||
};
|
|
||||||
|
|
||||||
let db_config = k_core::db::DatabaseConfig {
|
|
||||||
db_type,
|
|
||||||
url: config.database_url.clone(),
|
|
||||||
max_connections: config.db_max_connections,
|
|
||||||
min_connections: config.db_min_connections,
|
|
||||||
acquire_timeout: StdDuration::from_secs(30),
|
|
||||||
};
|
|
||||||
|
|
||||||
let db_pool = k_core::db::connect(&db_config).await?;
|
|
||||||
run_migrations(&db_pool).await?;
|
|
||||||
let db_pool = Arc::new(db_pool);
|
|
||||||
|
|
||||||
let user_repo = build_user_repository(&db_pool).await?;
|
let user_repo = build_user_repository(&db_pool).await?;
|
||||||
let channel_repo = build_channel_repository(&db_pool).await?;
|
let channel_repo = build_channel_repository(&db_pool).await?;
|
||||||
|
|||||||
Reference in New Issue
Block a user