2025-07-04 10:39:31 -03:00
|
|
|
use actix_cors::Cors;
|
|
|
|
use actix_web::http::header;
|
2025-06-30 11:15:14 -03:00
|
|
|
use actix_web::{web, App, HttpServer};
|
2025-06-19 23:16:57 -03:00
|
|
|
use dotenv::dotenv;
|
2025-07-04 23:20:48 -03:00
|
|
|
|
2025-07-14 16:34:09 -03:00
|
|
|
use services::script
|
|
|
|
::*;
|
2025-06-20 21:34:48 -03:00
|
|
|
use services::config::*;
|
2025-06-30 11:15:14 -03:00
|
|
|
use services::email::*;
|
2025-06-20 22:11:45 -03:00
|
|
|
use services::file::*;
|
|
|
|
use services::state::*;
|
2025-07-04 23:20:48 -03:00
|
|
|
use services::llm::*;
|
2025-07-14 21:05:55 -03:00
|
|
|
use sqlx::PgPool;
|
|
|
|
//use services:: find::*;
|
2025-06-20 21:34:48 -03:00
|
|
|
mod services;
|
|
|
|
|
2025-06-19 23:16:57 -03:00
|
|
|
#[actix_web::main]
|
|
|
|
async fn main() -> std::io::Result<()> {
|
|
|
|
dotenv().ok();
|
2025-06-30 10:14:25 -03:00
|
|
|
let config = AppConfig::from_env();
|
2025-06-19 23:16:57 -03:00
|
|
|
|
2025-07-14 21:05:55 -03:00
|
|
|
|
|
|
|
// let table_str = "rob";
|
|
|
|
// let filter_str = "ACTION=EMUL1";
|
|
|
|
|
|
|
|
// match execute_find(table_str, filter_str) {
|
|
|
|
// Ok(result) => println!("{}", result),
|
|
|
|
// Err(e) => eprintln!("Error: {}", e),
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
2025-07-14 16:34:09 -03:00
|
|
|
let script_service = ScriptService::new();
|
|
|
|
|
|
|
|
let script = r#"
|
2025-07-17 20:26:26 -03:00
|
|
|
let items = FIND "rob", "ACTION=EMUL1"
|
2025-07-16 01:38:09 -03:00
|
|
|
FOR EACH item IN items
|
2025-07-17 20:26:26 -03:00
|
|
|
let text = GET "example.com"
|
|
|
|
PRINT item.name
|
|
|
|
NEXT item "#;
|
2025-07-14 16:34:09 -03:00
|
|
|
|
|
|
|
match script_service.compile(script) {
|
|
|
|
Ok(ast) => {
|
|
|
|
match script_service.run(&ast) {
|
|
|
|
Ok(result) => println!("Script executed successfully: {:?}", result),
|
|
|
|
Err(e) => eprintln!("Error executing script: {}", e),
|
|
|
|
}
|
|
|
|
},
|
|
|
|
Err(e) => eprintln!("Error compiling script: {}", e),
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2025-07-04 10:39:31 -03:00
|
|
|
let db_url = config.database_url();
|
2025-07-14 21:05:55 -03:00
|
|
|
let db = PgPool::connect(&db_url).await.unwrap();
|
2025-06-19 23:16:57 -03:00
|
|
|
|
2025-07-14 21:05:55 -03:00
|
|
|
let minio_client = init_minio(&config)
|
|
|
|
.await
|
|
|
|
.expect("Failed to initialize Minio");
|
2025-06-19 23:16:57 -03:00
|
|
|
|
|
|
|
let app_state = web::Data::new(AppState {
|
2025-07-14 21:05:55 -03:00
|
|
|
db: db.into(),
|
2025-06-19 23:16:57 -03:00
|
|
|
config: Some(config.clone()),
|
2025-07-14 21:05:55 -03:00
|
|
|
minio_client: minio_client.into(),
|
2025-06-19 23:16:57 -03:00
|
|
|
});
|
2025-07-04 10:39:31 -03:00
|
|
|
|
2025-06-19 23:16:57 -03:00
|
|
|
// Start HTTP server
|
|
|
|
HttpServer::new(move || {
|
2025-07-04 10:39:31 -03:00
|
|
|
let cors = Cors::default()
|
|
|
|
.allowed_origin("http://localhost:3000") // Your Next.js port
|
|
|
|
.allowed_methods(vec!["GET", "POST", "PUT", "DELETE"])
|
|
|
|
.allowed_headers(vec![header::AUTHORIZATION, header::ACCEPT])
|
|
|
|
.allowed_header(header::CONTENT_TYPE)
|
|
|
|
.max_age(3600);
|
2025-06-19 23:16:57 -03:00
|
|
|
App::new()
|
2025-07-14 21:06:22 -03:00
|
|
|
//.wrap(cors)
|
2025-06-19 23:16:57 -03:00
|
|
|
.app_data(app_state.clone())
|
2025-06-20 22:11:45 -03:00
|
|
|
.service(upload_file)
|
2025-06-30 10:14:25 -03:00
|
|
|
.service(list_file)
|
|
|
|
.service(save_click)
|
|
|
|
.service(get_emails)
|
2025-07-04 10:39:31 -03:00
|
|
|
.service(list_emails)
|
|
|
|
.service(send_email)
|
2025-07-04 23:20:48 -03:00
|
|
|
.service(chat_stream)
|
|
|
|
.service(chat)
|
2025-06-30 10:14:25 -03:00
|
|
|
})
|
2025-06-19 23:16:57 -03:00
|
|
|
.bind((config.server.host.clone(), config.server.port))?
|
|
|
|
.run()
|
|
|
|
.await
|
|
|
|
}
|