Add middleware
This commit is contained in:
		
							parent
							
								
									483fd60daa
								
							
						
					
					
						commit
						e6278176e4
					
				
					 6 changed files with 65 additions and 13 deletions
				
			
		
							
								
								
									
										49
									
								
								Cargo.lock
									
										
									
										generated
									
									
									
								
							
							
						
						
									
										49
									
								
								Cargo.lock
									
										
									
										generated
									
									
									
								
							| 
						 | 
				
			
			@ -289,6 +289,17 @@ dependencies = [
 | 
			
		|||
 "syn",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "atty"
 | 
			
		||||
version = "0.2.14"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "hermit-abi",
 | 
			
		||||
 "libc",
 | 
			
		||||
 "winapi 0.3.9",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "autocfg"
 | 
			
		||||
version = "1.0.1"
 | 
			
		||||
| 
						 | 
				
			
			@ -560,6 +571,7 @@ dependencies = [
 | 
			
		|||
 "diesel",
 | 
			
		||||
 "diesel_migrations",
 | 
			
		||||
 "dotenv",
 | 
			
		||||
 "env_logger",
 | 
			
		||||
 "serde",
 | 
			
		||||
 "serde_derive",
 | 
			
		||||
 "serde_json",
 | 
			
		||||
| 
						 | 
				
			
			@ -587,6 +599,19 @@ dependencies = [
 | 
			
		|||
 "syn",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "env_logger"
 | 
			
		||||
version = "0.9.0"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "0b2cf0344971ee6c64c31be0d530793fba457d322dfec2810c453d0ef228f9c3"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "atty",
 | 
			
		||||
 "humantime",
 | 
			
		||||
 "log",
 | 
			
		||||
 "regex",
 | 
			
		||||
 "termcolor",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "flate2"
 | 
			
		||||
version = "1.0.22"
 | 
			
		||||
| 
						 | 
				
			
			@ -826,6 +851,12 @@ version = "1.5.1"
 | 
			
		|||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "acd94fdbe1d4ff688b67b04eee2e17bd50995534a61539e45adfefb45e5e5503"
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "humantime"
 | 
			
		||||
version = "2.1.0"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4"
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "idna"
 | 
			
		||||
version = "0.2.3"
 | 
			
		||||
| 
						 | 
				
			
			@ -1546,6 +1577,15 @@ dependencies = [
 | 
			
		|||
 "unicode-xid",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "termcolor"
 | 
			
		||||
version = "1.1.2"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "2dfed899f0eb03f32ee8c6a0aabdb8a7949659e3466561fc0adf54e26d88c5f4"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "winapi-util",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "thiserror"
 | 
			
		||||
version = "1.0.30"
 | 
			
		||||
| 
						 | 
				
			
			@ -1924,6 +1964,15 @@ version = "0.4.0"
 | 
			
		|||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "winapi-util"
 | 
			
		||||
version = "0.1.5"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "winapi 0.3.9",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "winapi-x86_64-pc-windows-gnu"
 | 
			
		||||
version = "0.4.0"
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -15,6 +15,7 @@ chrono = { version = "0.4", features = ["serde"] }
 | 
			
		|||
diesel = { version = "1.4", features = ["sqlite", "uuid"] }
 | 
			
		||||
diesel_migrations = "1.4"
 | 
			
		||||
dotenv = "0.15"
 | 
			
		||||
env_logger = "0.9.0"
 | 
			
		||||
serde = "1.0"
 | 
			
		||||
serde_json = "1.0"
 | 
			
		||||
serde_derive = "1.0"
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -44,10 +44,8 @@ CREATE TABLE schedules
 | 
			
		|||
    periods BLOB
 | 
			
		||||
            NOT NULL
 | 
			
		||||
);
 | 
			
		||||
--INSERT INTO schedules (uid, name, periods) VALUES (x'6f666600000000000000000000000000', 'off', x'00');
 | 
			
		||||
--INSERT INTO schedules (uid, name, periods) VALUES (x'6f6e0000000000000000000000000000',  'on', x'010000009F05');
 | 
			
		||||
INSERT INTO schedules (uid, name, periods) VALUES (x'00', 'off', x'');
 | 
			
		||||
INSERT INTO schedules (uid, name, periods) VALUES (x'01',  'on', x'0000173B');
 | 
			
		||||
INSERT INTO schedules (uid, name, periods) VALUES (x'01',  'on', x'00000000');
 | 
			
		||||
 | 
			
		||||
CREATE TABLE tags
 | 
			
		||||
(
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -15,7 +15,7 @@ use crate::types::EmgauwaUid;
 | 
			
		|||
pub struct Schedule {
 | 
			
		||||
    #[serde(skip)]
 | 
			
		||||
    pub id: i32,
 | 
			
		||||
    #[serde(alias = "id")]
 | 
			
		||||
    #[serde(rename(serialize = "id"))]
 | 
			
		||||
    pub uid: EmgauwaUid,
 | 
			
		||||
    pub name: String,
 | 
			
		||||
    pub periods: Periods,
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -45,17 +45,10 @@ pub async fn show(web::Path((schedule_uid,)): web::Path<(String,)>) -> impl Resp
 | 
			
		|||
}
 | 
			
		||||
 | 
			
		||||
pub async fn add(post: web::Json<RequestSchedule>) -> impl Responder {
 | 
			
		||||
 | 
			
		||||
    println!("model: {:?}", post);
 | 
			
		||||
 | 
			
		||||
    for period in post.periods.0.iter() {
 | 
			
		||||
        println!("start: {:?}; end: {:?}", period.start, period.end);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    let new_schedule = db::create_schedule(&post.name, &post.periods);
 | 
			
		||||
 | 
			
		||||
    match new_schedule {
 | 
			
		||||
        Ok(ok) => HttpResponse::Ok().json(ok),
 | 
			
		||||
        Ok(ok) => HttpResponse::Created().json(ok),
 | 
			
		||||
        Err(err) => HttpResponse::InternalServerError().json(err),
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										13
									
								
								src/main.rs
									
										
									
									
									
								
							
							
						
						
									
										13
									
								
								src/main.rs
									
										
									
									
									
								
							| 
						 | 
				
			
			@ -4,7 +4,9 @@ extern crate diesel;
 | 
			
		|||
extern crate diesel_migrations;
 | 
			
		||||
extern crate dotenv;
 | 
			
		||||
 | 
			
		||||
use actix_web::{App, HttpServer, web};
 | 
			
		||||
use actix_web::{middleware, web, App, HttpServer};
 | 
			
		||||
use actix_web::middleware::normalize::TrailingSlash;
 | 
			
		||||
use env_logger::{Builder, Env};
 | 
			
		||||
 | 
			
		||||
mod db;
 | 
			
		||||
mod handlers;
 | 
			
		||||
| 
						 | 
				
			
			@ -14,8 +16,17 @@ mod types;
 | 
			
		|||
async fn main() -> std::io::Result<()> {
 | 
			
		||||
    db::run_migrations();
 | 
			
		||||
 | 
			
		||||
    Builder::from_env(Env::default().default_filter_or("info")).init();
 | 
			
		||||
 | 
			
		||||
    HttpServer::new(|| {
 | 
			
		||||
        App::new()
 | 
			
		||||
            .wrap(middleware::DefaultHeaders::new()
 | 
			
		||||
                .header("Access-Control-Allow-Origin", "*")
 | 
			
		||||
                .header("Access-Control-Allow-Headers", "*")
 | 
			
		||||
                .header("Access-Control-Allow-Methods", "*")
 | 
			
		||||
            )
 | 
			
		||||
            .wrap(middleware::Logger::default())
 | 
			
		||||
            .wrap(middleware::NormalizePath::new(TrailingSlash::Trim))
 | 
			
		||||
            .route(
 | 
			
		||||
                "/api/v1/schedules",
 | 
			
		||||
                web::get().to(handlers::v1::schedules::index),
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue