use crate::config::CONFIG;
use sea_orm::{ConnectionTrait, Database, DatabaseConnection, DbErr, Schema};
pub type DbPool = DatabaseConnection;
pub async fn init_db() -> Result<DbPool, DbErr> {
let database_url = &CONFIG.database_url;
println!("Connecting to database at: {}", database_url);
let db = Database::connect(database_url).await?;
let schema = Schema::new(db.get_database_backend());
db.execute(
db.get_database_backend().build(
schema
.create_table_from_entity(crate::entities::chat_history::Entity)
.if_not_exists(),
),
)
.await?;
if let Err(e) = db
.execute(
db.get_database_backend().build(
schema
.create_table_from_entity(crate::entities::llm::Entity)
.if_not_exists(),
),
)
.await
{
eprintln!("Error creating `llms` table: {}", e);
return Err(e);
} else {
println!("`llms` table created or already exists.");
}
if let Err(e) = db
.execute(
db.get_database_backend().build(
schema
.create_table_from_entity(crate::entities::buffer::Entity)
.if_not_exists(),
),
)
.await
{
eprintln!("Error creating `buffers` table: {}", e);
return Err(e);
} else {
println!("`buffers` table created or already exists.");
}
if let Err(e) = db
.execute(
db.get_database_backend().build(
schema
.create_table_from_entity(crate::entities::human::Entity)
.if_not_exists(),
),
)
.await
{
eprintln!("Error creating `humans` table: {}", e);
return Err(e);
} else {
println!("`humans` table created or already exists.");
}
if let Err(e) = db
.execute(
db.get_database_backend().build(
schema
.create_table_from_entity(crate::entities::feedback::Entity)
.if_not_exists(),
),
)
.await
{
eprintln!("Error creating `feedback` table: {}", e);
return Err(e);
} else {
println!("`feedback` table created or already exists.");
}
Ok(db)
}