* move api logic into separate files
* move routes logic into own directory * api: add some date in human readable format
This commit is contained in:
parent
09a1bb6603
commit
a624761182
17 changed files with 110 additions and 67 deletions
1
src/logic/api/mod.rs
Normal file
1
src/logic/api/mod.rs
Normal file
|
@ -0,0 +1 @@
|
||||||
|
pub mod v1;
|
56
src/logic/api/v1/backtofrance.rs
Normal file
56
src/logic/api/v1/backtofrance.rs
Normal file
|
@ -0,0 +1,56 @@
|
||||||
|
use std::time::Duration;
|
||||||
|
|
||||||
|
use chrono::{DateTime, Utc};
|
||||||
|
use chrono_tz::Europe;
|
||||||
|
use cyborgtime::format_duration;
|
||||||
|
use serde::Serialize;
|
||||||
|
|
||||||
|
#[derive(Serialize)]
|
||||||
|
pub struct Info {
|
||||||
|
unix_epoch: i64,
|
||||||
|
departure: String,
|
||||||
|
arrival: String,
|
||||||
|
countdown: String,
|
||||||
|
since: String,
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn json() -> Info {
|
||||||
|
let target = 1_736_618_100;
|
||||||
|
let start = 1_724_832_000;
|
||||||
|
let current_time = Utc::now().timestamp();
|
||||||
|
|
||||||
|
let departure = DateTime::from_timestamp(start, 0)
|
||||||
|
.unwrap()
|
||||||
|
.with_timezone(&Europe::Paris)
|
||||||
|
.to_rfc2822();
|
||||||
|
let arrival = DateTime::from_timestamp(target, 0)
|
||||||
|
.unwrap()
|
||||||
|
.with_timezone(&Europe::Paris)
|
||||||
|
.to_rfc2822();
|
||||||
|
|
||||||
|
if current_time > target {
|
||||||
|
Info {
|
||||||
|
unix_epoch: target,
|
||||||
|
departure,
|
||||||
|
arrival,
|
||||||
|
countdown: "Already happened".to_owned(),
|
||||||
|
since: "Not relevant anymore".to_owned(),
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
Info {
|
||||||
|
unix_epoch: target,
|
||||||
|
departure,
|
||||||
|
arrival,
|
||||||
|
countdown: {
|
||||||
|
let duration_epoch = target - current_time;
|
||||||
|
let duration = Duration::from_secs(duration_epoch.try_into().unwrap());
|
||||||
|
format_duration(duration).to_string()
|
||||||
|
},
|
||||||
|
since: {
|
||||||
|
let duration_epoch = current_time - start;
|
||||||
|
let duration = Duration::from_secs(duration_epoch.try_into().unwrap());
|
||||||
|
format_duration(duration).to_string()
|
||||||
|
},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
33
src/logic/api/v1/love.rs
Normal file
33
src/logic/api/v1/love.rs
Normal file
|
@ -0,0 +1,33 @@
|
||||||
|
use std::time::Duration;
|
||||||
|
|
||||||
|
use chrono::{DateTime, Utc};
|
||||||
|
use chrono_tz::Europe;
|
||||||
|
use cyborgtime::format_duration;
|
||||||
|
use serde::Serialize;
|
||||||
|
|
||||||
|
#[derive(Serialize)]
|
||||||
|
pub struct Info {
|
||||||
|
unix_epoch: i64,
|
||||||
|
date: String,
|
||||||
|
since: String,
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn json() -> Info {
|
||||||
|
let target = 1_605_576_600;
|
||||||
|
let current_time = Utc::now().timestamp();
|
||||||
|
|
||||||
|
let date = DateTime::from_timestamp(target, 0)
|
||||||
|
.unwrap()
|
||||||
|
.with_timezone(&Europe::Paris)
|
||||||
|
.to_rfc2822();
|
||||||
|
|
||||||
|
Info {
|
||||||
|
unix_epoch: target,
|
||||||
|
date,
|
||||||
|
since: {
|
||||||
|
let duration_epoch = current_time - target;
|
||||||
|
let duration = Duration::from_secs(duration_epoch.try_into().unwrap());
|
||||||
|
format_duration(duration).to_string()
|
||||||
|
},
|
||||||
|
}
|
||||||
|
}
|
3
src/logic/api/v1/mod.rs
Normal file
3
src/logic/api/v1/mod.rs
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
pub mod backtofrance;
|
||||||
|
pub mod love;
|
||||||
|
pub mod websites;
|
6
src/logic/api/v1/websites.rs
Normal file
6
src/logic/api/v1/websites.rs
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
pub fn tuple() -> (&'static str, &'static str) {
|
||||||
|
(
|
||||||
|
"http://www.bocal.cs.univ-paris8.fr/~akennel/",
|
||||||
|
"https://anri.up8.site/",
|
||||||
|
)
|
||||||
|
}
|
|
@ -1,3 +1,4 @@
|
||||||
|
pub mod api;
|
||||||
pub mod blog;
|
pub mod blog;
|
||||||
pub mod contact;
|
pub mod contact;
|
||||||
pub mod contrib;
|
pub mod contrib;
|
|
@ -13,6 +13,7 @@ use crate::routes::{
|
||||||
mod config;
|
mod config;
|
||||||
mod template;
|
mod template;
|
||||||
|
|
||||||
|
mod logic;
|
||||||
mod routes;
|
mod routes;
|
||||||
mod utils;
|
mod utils;
|
||||||
|
|
||||||
|
|
|
@ -1,73 +1,18 @@
|
||||||
use std::time::Duration;
|
|
||||||
|
|
||||||
use actix_web::{get, HttpResponse, Responder};
|
use actix_web::{get, HttpResponse, Responder};
|
||||||
use chrono::Utc;
|
|
||||||
use cyborgtime::format_duration;
|
|
||||||
use serde::Serialize;
|
|
||||||
|
|
||||||
/// Response for /love
|
use crate::logic::api::v1;
|
||||||
#[derive(Serialize)]
|
|
||||||
struct InfoLove {
|
|
||||||
unix_epoch: u64,
|
|
||||||
since: String,
|
|
||||||
}
|
|
||||||
|
|
||||||
#[get("/love")]
|
#[get("/love")]
|
||||||
pub async fn love() -> impl Responder {
|
pub async fn love() -> impl Responder {
|
||||||
let target = 1_605_576_600;
|
HttpResponse::Ok().json(v1::love::json())
|
||||||
let current_time: u64 = Utc::now().timestamp().try_into().unwrap();
|
|
||||||
|
|
||||||
HttpResponse::Ok().json(InfoLove {
|
|
||||||
unix_epoch: target,
|
|
||||||
since: {
|
|
||||||
let duration_epoch = current_time - target;
|
|
||||||
let duration = Duration::from_secs(duration_epoch);
|
|
||||||
format_duration(duration).to_string()
|
|
||||||
},
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Response for /backtofrance
|
|
||||||
#[derive(Serialize)]
|
|
||||||
struct InfoBTF {
|
|
||||||
unix_epoch: u64,
|
|
||||||
countdown: String,
|
|
||||||
since: String,
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#[get("/backtofrance")]
|
#[get("/backtofrance")]
|
||||||
pub async fn btf() -> impl Responder {
|
pub async fn btf() -> impl Responder {
|
||||||
let target = 1_736_618_100;
|
HttpResponse::Ok().json(v1::backtofrance::json())
|
||||||
let start = 1_724_832_000;
|
|
||||||
let current_time: u64 = Utc::now().timestamp().try_into().unwrap();
|
|
||||||
|
|
||||||
if current_time > target {
|
|
||||||
HttpResponse::Ok().json(InfoBTF {
|
|
||||||
unix_epoch: target,
|
|
||||||
countdown: "Already happened".to_owned(),
|
|
||||||
since: "Not relevant anymore".to_owned(),
|
|
||||||
})
|
|
||||||
} else {
|
|
||||||
HttpResponse::Ok().json(InfoBTF {
|
|
||||||
unix_epoch: target,
|
|
||||||
countdown: {
|
|
||||||
let duration_epoch = target - current_time;
|
|
||||||
let duration = Duration::from_secs(duration_epoch);
|
|
||||||
format_duration(duration).to_string()
|
|
||||||
},
|
|
||||||
since: {
|
|
||||||
let duration_epoch = current_time - start;
|
|
||||||
let duration = Duration::from_secs(duration_epoch);
|
|
||||||
format_duration(duration).to_string()
|
|
||||||
},
|
|
||||||
})
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#[get("/websites")]
|
#[get("/websites")]
|
||||||
pub async fn websites() -> impl Responder {
|
pub async fn websites() -> impl Responder {
|
||||||
HttpResponse::Ok().json((
|
HttpResponse::Ok().json(v1::websites::tuple())
|
||||||
"http://www.bocal.cs.univ-paris8.fr/~akennel/",
|
|
||||||
"https://anri.up8.site/",
|
|
||||||
))
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -6,12 +6,12 @@ use ramhorns::Content;
|
||||||
|
|
||||||
use crate::{
|
use crate::{
|
||||||
config::Config,
|
config::Config,
|
||||||
|
logic::blog::{build_rss, get_post, get_posts, Post, BLOG_DIR, MIME_TYPE_RSS, POST_DIR},
|
||||||
template::{InfosPage, NavBar},
|
template::{InfosPage, NavBar},
|
||||||
utils::{
|
utils::{
|
||||||
markdown::{File, FilePath},
|
markdown::{File, FilePath},
|
||||||
metadata::MType,
|
metadata::MType,
|
||||||
misc::{lang, make_kw, read_file_fallback, Html, Lang},
|
misc::{lang, make_kw, read_file_fallback, Html, Lang},
|
||||||
routes::blog::{build_rss, get_post, get_posts, Post, BLOG_DIR, MIME_TYPE_RSS, POST_DIR},
|
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -4,12 +4,12 @@ use ramhorns::Content;
|
||||||
|
|
||||||
use crate::{
|
use crate::{
|
||||||
config::Config,
|
config::Config,
|
||||||
|
logic::contact::{find_links, read, remove_paragraphs},
|
||||||
template::{InfosPage, NavBar},
|
template::{InfosPage, NavBar},
|
||||||
utils::{
|
utils::{
|
||||||
markdown::{File, FilePath},
|
markdown::{File, FilePath},
|
||||||
metadata::MType,
|
metadata::MType,
|
||||||
misc::{lang, make_kw, read_file_fallback, Html, Lang},
|
misc::{lang, make_kw, read_file_fallback, Html, Lang},
|
||||||
routes::contact::{find_links, read, remove_paragraphs},
|
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -1,10 +1,8 @@
|
||||||
use crate::{
|
use crate::{
|
||||||
config::Config,
|
config::Config,
|
||||||
|
logic::contrib::{fetch, Project},
|
||||||
template::{InfosPage, NavBar},
|
template::{InfosPage, NavBar},
|
||||||
utils::{
|
utils::misc::{make_kw, Html},
|
||||||
misc::{make_kw, Html},
|
|
||||||
routes::contrib::{fetch, Project},
|
|
||||||
},
|
|
||||||
};
|
};
|
||||||
use actix_web::{get, web, Responder};
|
use actix_web::{get, web, Responder};
|
||||||
use cached::proc_macro::once;
|
use cached::proc_macro::once;
|
||||||
|
|
|
@ -6,12 +6,12 @@ use serde::Deserialize;
|
||||||
|
|
||||||
use crate::{
|
use crate::{
|
||||||
config::Config,
|
config::Config,
|
||||||
|
logic::cours::{excluded, get_filetree},
|
||||||
template::{InfosPage, NavBar},
|
template::{InfosPage, NavBar},
|
||||||
utils::{
|
utils::{
|
||||||
markdown::{File, FilePath},
|
markdown::{File, FilePath},
|
||||||
metadata::MType,
|
metadata::MType,
|
||||||
misc::{make_kw, read_file, Html},
|
misc::{make_kw, read_file, Html},
|
||||||
routes::cours::{excluded, get_filetree},
|
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -3,4 +3,3 @@ pub mod github;
|
||||||
pub mod markdown;
|
pub mod markdown;
|
||||||
pub mod metadata;
|
pub mod metadata;
|
||||||
pub mod misc;
|
pub mod misc;
|
||||||
pub mod routes;
|
|
||||||
|
|
Loading…
Reference in a new issue