add first draft of cal

This commit is contained in:
philipp 2023-05-24 15:09:38 +02:00
parent 6b0c2059a4
commit aa2d5bc7dd
3 changed files with 50 additions and 3 deletions

View File

@ -7,12 +7,12 @@ use super::{tripdetails::TripDetails, triptype::TripType, user::User};
#[derive(Serialize, Clone, FromRow)] #[derive(Serialize, Clone, FromRow)]
pub struct PlannedEvent { pub struct PlannedEvent {
pub id: i64, pub id: i64,
name: String, pub name: String,
planned_amount_cox: i64, planned_amount_cox: i64,
trip_details_id: i64, trip_details_id: i64,
planned_starting_time: String, pub planned_starting_time: String,
max_people: i64, max_people: i64,
day: String, pub day: String,
notes: Option<String>, notes: Option<String>,
pub allow_guests: bool, pub allow_guests: bool,
trip_type_id: Option<i64>, trip_type_id: Option<i64>,
@ -89,6 +89,18 @@ WHERE day=?",
ret ret
} }
pub async fn all(db: &SqlitePool) -> Vec<PlannedEvent> {
sqlx::query_as!(
PlannedEvent,
"SELECT planned_event.id, planned_event.name, planned_amount_cox, trip_details_id, planned_starting_time, max_people, day, notes, allow_guests, trip_type_id
FROM planned_event
INNER JOIN trip_details ON planned_event.trip_details_id = trip_details.id",
)
.fetch_all(db)
.await
.unwrap() //TODO: fixme
}
async fn get_all_cox(&self, db: &SqlitePool) -> Vec<Registration> { async fn get_all_cox(&self, db: &SqlitePool) -> Vec<Registration> {
//TODO: switch to join //TODO: switch to join
sqlx::query_as!( sqlx::query_as!(

33
src/rest/cal.rs Normal file
View File

@ -0,0 +1,33 @@
use rocket::{get, routes, Route, State};
use sqlx::SqlitePool;
use crate::model::planned_event::PlannedEvent;
#[get("/")]
async fn index(db: &State<SqlitePool>) -> String {
let mut res = String::from(
r#"BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//rudernlinz.at//Trips//DE"#,
);
let events = PlannedEvent::all(db).await;
for event in events {
res.push_str("\nBEGIN:VEVENT");
res.push_str(&format!("\nUID:{}@rudernlinz.at", event.id));
res.push_str(&format!(
"\nDTSTART:{}T{}Z",
event.day, event.planned_starting_time
));
res.push_str(&format!("\nSUMMARY:{}", event.name));
res.push_str("\nEND:VEVENT");
}
res.push_str("\nEND:VCALENDAR");
res
}
pub fn routes() -> Vec<Route> {
routes![index]
}

View File

@ -21,6 +21,7 @@ use crate::model::{
mod admin; mod admin;
mod auth; mod auth;
mod cal;
mod cox; mod cox;
mod faq; mod faq;
@ -143,6 +144,7 @@ pub fn start(db: SqlitePool) -> Rocket<Build> {
.mount("/cox", cox::routes()) .mount("/cox", cox::routes())
.mount("/admin", admin::routes()) .mount("/admin", admin::routes())
.mount("/faq", faq::routes()) .mount("/faq", faq::routes())
.mount("/cal", cal::routes())
.mount("/public", FileServer::from("static/")) .mount("/public", FileServer::from("static/"))
.register("/", catchers![unauthorized_error]) .register("/", catchers![unauthorized_error])
.attach(Template::fairing()) .attach(Template::fairing())