summaryrefslogtreecommitdiff
path: root/rust_backend/src/main.rs
diff options
context:
space:
mode:
authorlazydancer <jrpucula@gmail.com>2024-12-22 17:33:11 -0500
committerlazydancer <jrpucula@gmail.com>2024-12-22 17:33:11 -0500
commit2c5b7da8165e3f8b90748e8ced1de0e3e8d52309 (patch)
tree6d6e4e1d0cb0c7ec5e1dff83bfeda4b044258b81 /rust_backend/src/main.rs
downloadhaul-2c5b7da8165e3f8b90748e8ced1de0e3e8d52309.tar.gz
Initial
Diffstat (limited to 'rust_backend/src/main.rs')
-rw-r--r--rust_backend/src/main.rs95
1 files changed, 95 insertions, 0 deletions
diff --git a/rust_backend/src/main.rs b/rust_backend/src/main.rs
new file mode 100644
index 0000000..4a2e086
--- /dev/null
+++ b/rust_backend/src/main.rs
@@ -0,0 +1,95 @@
+mod manager;
+mod eve_service;
+mod eve_api;
+mod pathfinding;
+mod market;
+
+use manager::Manager;
+
+use actix_web::{web, App, HttpServer, Responder, HttpResponse, http::header};
+use std::sync::Mutex;
+use tokio::sync::watch;
+use serde::Deserialize;
+
+
+async fn index() -> impl Responder {
+ "Hi"
+}
+
+async fn location(manager: web::Data<Manager>) -> impl Responder {
+ match manager.location() {
+ Some(location) => {
+ let station_id = location.station_id.map_or("None".to_string(), |id| id.to_string());
+ let structure_id = location.structure_id.map_or("None".to_string(), |id| id.to_string());
+ format!(
+ "Current location: Solar System ID: {}, Station ID: {}, Structure ID: {}",
+ location.solar_system_id, station_id, structure_id
+ )
+ },
+ None => "No location available".to_string(),
+ }
+}
+
+async fn orders(manager: web::Data<Manager>) -> impl Responder {
+ let orders = manager.orders();
+ HttpResponse::Ok().json(orders)
+}
+
+async fn start_oauth(manager: web::Data<Manager>) -> HttpResponse {
+ let auth_url = manager.get_authorization_url();
+ HttpResponse::Found()
+ .append_header((header::LOCATION, auth_url.as_str()))
+ .finish()
+}
+
+#[derive(Deserialize)]
+struct AuthCode {
+ code: String,
+}
+
+async fn oauth_callback(
+ query: web::Query<AuthCode>,
+ manager: web::Data<Manager>,
+) -> HttpResponse {
+ match manager.exchange_code_for_token(&query.code).await {
+ Ok(_) => HttpResponse::Ok().body("Token exchange successful"),
+ Err(e) => HttpResponse::InternalServerError().body(format!("Error: {}", e)),
+ }
+}
+
+#[actix_web::main]
+async fn main() -> std::io::Result<()> {
+ let manager = web::Data::new(Manager::new());
+
+
+ let manager_clone = manager.clone();
+ let (shutdown_tx, shutdown_rx) = watch::channel(false);
+
+ let manager_handle = tokio::spawn(async move {
+ manager_clone.run(shutdown_rx).await;
+ });
+
+ let server = HttpServer::new(move || {
+ App::new()
+ .app_data(manager.clone())
+ .route("/", web::get().to(index))
+ .route("/location", web::get().to(location))
+ .route("/orders", web::get().to(orders))
+ .route("/start_oauth", web::get().to(start_oauth))
+ .route("/oauth_callback", web::get().to(oauth_callback))
+ })
+ .bind("127.0.0.1:8080")?
+ .run();
+
+ ctrlc::set_handler(move || {
+ let _ = shutdown_tx.send(true);
+ })
+ .expect("Error setting Ctrl-C handler");
+
+ tokio::select! {
+ _ = server => {},
+ _ = manager_handle => {},
+ }
+
+ Ok(())
+}