Error handling
This commit is contained in:
16
backend/Cargo.lock
generated
16
backend/Cargo.lock
generated
@@ -19,6 +19,21 @@ dependencies = [
|
||||
"tracing",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "actix-cors"
|
||||
version = "0.6.4"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "b340e9cfa5b08690aae90fb61beb44e9b06f44fe3d0f93781aaa58cfba86245e"
|
||||
dependencies = [
|
||||
"actix-utils",
|
||||
"actix-web",
|
||||
"derive_more",
|
||||
"futures-util",
|
||||
"log",
|
||||
"once_cell",
|
||||
"smallvec",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "actix-http"
|
||||
version = "3.4.0"
|
||||
@@ -258,6 +273,7 @@ checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
|
||||
name = "aviation-weather-backend"
|
||||
version = "0.1.0"
|
||||
dependencies = [
|
||||
"actix-cors",
|
||||
"actix-rt",
|
||||
"actix-web",
|
||||
"chrono",
|
||||
|
||||
@@ -23,3 +23,4 @@ serde_json = "1.0.105"
|
||||
tokio = { version = "1.32.0", features = ["macros", "rt"] }
|
||||
uuid = { version = "1.4.1", features = ["serde", "v4"] }
|
||||
log = "0.4.20"
|
||||
actix-cors = "0.6.4"
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
CREATE TABLE "airports" (
|
||||
id SERIAL PRIMARY KEY,
|
||||
full_name VARCHAR NOT NULL,
|
||||
icao VARCHAR NOT NULL,
|
||||
latitude INT NOT NULL,
|
||||
longitude INT NOT NULL
|
||||
full_name TEXT NOT NULL,
|
||||
icao TEXT NOT NULL,
|
||||
latitude DOUBLE PRECISION NOT NULL,
|
||||
longitude DOUBLE PRECISION NOT NULL
|
||||
)
|
||||
@@ -1,38 +1,66 @@
|
||||
use crate::airports::{Airport, Airports};
|
||||
use crate::error_handler::CustomError;
|
||||
use actix_web::{delete, get, post, put, web, HttpResponse};
|
||||
use log::error;
|
||||
use serde_json::json;
|
||||
|
||||
#[get("/airports")]
|
||||
async fn find_all() -> Result<HttpResponse, CustomError> {
|
||||
let airports = web::block(|| Airports::find_all()).await.unwrap();
|
||||
let airports = match web::block(|| Airports::find_all()).await.unwrap() {
|
||||
Ok(a) => a,
|
||||
Err(err) => {
|
||||
error!("{}", err);
|
||||
return Err(err);
|
||||
}
|
||||
};
|
||||
Ok(HttpResponse::Ok().json(airports))
|
||||
}
|
||||
|
||||
#[get("/airports/{id}")]
|
||||
async fn find(id: web::Path<i32>) -> Result<HttpResponse, CustomError> {
|
||||
let airport = Airports::find(id.into_inner())?;
|
||||
let airport = match Airports::find(id.into_inner()) {
|
||||
Ok(a) => a,
|
||||
Err(err) => {
|
||||
error!("{}", err);
|
||||
return Err(err);
|
||||
}
|
||||
};
|
||||
Ok(HttpResponse::Ok().json(airport))
|
||||
}
|
||||
|
||||
#[post("/airports")]
|
||||
async fn create(airport: web::Json<Airport>) -> Result<HttpResponse, CustomError> {
|
||||
let airport = Airports::create(airport.into_inner())?;
|
||||
let airport = match Airports::create(airport.into_inner()) {
|
||||
Ok(a) => a,
|
||||
Err(err) => {
|
||||
error!("{}", err);
|
||||
return Err(err);
|
||||
}
|
||||
};
|
||||
Ok(HttpResponse::Ok().json(airport))
|
||||
}
|
||||
|
||||
#[put("/airports/{id}")]
|
||||
async fn update(
|
||||
id: web::Path<i32>,
|
||||
airport: web::Json<Airport>,
|
||||
) -> Result<HttpResponse, CustomError> {
|
||||
let airport = Airports::update(id.into_inner(), airport.into_inner())?;
|
||||
async fn update(id: web::Path<i32>, airport: web::Json<Airport>) -> Result<HttpResponse, CustomError> {
|
||||
let airport = match Airports::update(id.into_inner(), airport.into_inner()) {
|
||||
Ok(a) => a,
|
||||
Err(err) => {
|
||||
error!("{}", err);
|
||||
return Err(err);
|
||||
}
|
||||
};
|
||||
Ok(HttpResponse::Ok().json(airport))
|
||||
}
|
||||
|
||||
#[delete("/airports/{id}")]
|
||||
async fn delete(id: web::Path<i32>) -> Result<HttpResponse, CustomError> {
|
||||
let deleted_airport = Airports::delete(id.into_inner())?;
|
||||
let deleted_airport = match Airports::delete(id.into_inner()) {
|
||||
Ok(a) => a,
|
||||
Err(err) => {
|
||||
error!("{}", err);
|
||||
return Err(err);
|
||||
}
|
||||
};
|
||||
Ok(HttpResponse::Ok().json(json!({ "deleted": deleted_airport })))
|
||||
}
|
||||
|
||||
|
||||
@@ -3,9 +3,11 @@ extern crate diesel;
|
||||
#[macro_use]
|
||||
extern crate diesel_migrations;
|
||||
|
||||
use actix_web::{App, HttpServer};
|
||||
use actix_cors::Cors;
|
||||
use actix_web::{App, HttpServer, middleware::Logger};
|
||||
use dotenv::dotenv;
|
||||
use listenfd::ListenFd;
|
||||
use log::debug;
|
||||
use std::env;
|
||||
|
||||
mod airports;
|
||||
@@ -17,20 +19,31 @@ mod schema;
|
||||
#[actix_rt::main]
|
||||
async fn main() -> std::io::Result<()> {
|
||||
dotenv().ok();
|
||||
if std::env::var_os("RUST_LOG").is_none() {
|
||||
std::env::set_var("RUST_LOG", "info,actix=info,diesel_migrations=warn,reqwest=warn,hyper=warn");
|
||||
}
|
||||
env_logger::init();
|
||||
db::init();
|
||||
|
||||
let mut listenfd = ListenFd::from_env();
|
||||
let mut server = HttpServer::new(|| App::new()
|
||||
let mut server = HttpServer::new(|| {
|
||||
let cors = Cors::default()
|
||||
.allow_any_origin()
|
||||
.allow_any_method()
|
||||
.allow_any_header();
|
||||
App::new()
|
||||
.configure(airports::init_routes)
|
||||
.configure(metars::init_routes)
|
||||
);
|
||||
.wrap(cors)
|
||||
.wrap(Logger::default())
|
||||
});
|
||||
|
||||
server = match listenfd.take_tcp_listener(0)? {
|
||||
Some(listener) => server.listen(listener)?,
|
||||
None => {
|
||||
let host = env::var("HOST").expect("Please set host in .env");
|
||||
let port = env::var("PORT").expect("Please set port in .env");
|
||||
debug!("Binding server to {}:{}", host, port);
|
||||
server.bind(format!("{}:{}", host, port))?
|
||||
}
|
||||
};
|
||||
|
||||
@@ -1,16 +1,27 @@
|
||||
use crate::error_handler::CustomError;
|
||||
use crate::metars::Metars;
|
||||
use actix_web::{get, web, HttpResponse};
|
||||
use actix_web::{get, web, HttpResponse, Responder};
|
||||
|
||||
// #[get("metars/{ids}")]
|
||||
// async fn get_all(ids: web::Path<String>) -> Result<HttpResponse, CustomError> {
|
||||
// let airports = web::block(|| Ok::<_, CustomError>(async {Metars::get_all(ids.into_inner()).await}))
|
||||
// .await
|
||||
// .unwrap()
|
||||
// .unwrap()
|
||||
// .await
|
||||
// .unwrap();
|
||||
// Ok(HttpResponse::Ok().json(airports))
|
||||
// }
|
||||
|
||||
#[get("metars/{ids}")]
|
||||
async fn get_all(ids: web::Path<String>) -> Result<HttpResponse, CustomError> {
|
||||
async fn get_all(ids: web::Path<String>) -> impl Responder {
|
||||
let airports = web::block(|| Ok::<_, CustomError>(async {Metars::get_all(ids.into_inner()).await}))
|
||||
.await
|
||||
.unwrap()
|
||||
.unwrap()
|
||||
.await
|
||||
.unwrap();
|
||||
Ok(HttpResponse::Ok().json(airports))
|
||||
HttpResponse::Ok().json(airports)
|
||||
}
|
||||
|
||||
pub fn init_routes(config: &mut web::ServiceConfig) {
|
||||
|
||||
Reference in New Issue
Block a user