diff --git a/src/db.rs b/src/db.rs index ea1e19f..088f833 100644 --- a/src/db.rs +++ b/src/db.rs @@ -40,7 +40,7 @@ impl std::fmt::Display for AnnouncementFlag { pub struct Announcement { pub id: i64, pub author: String, - pub text_content: String, + pub text_content: Option, pub start_date: String, pub end_date: String, pub created_at: String, @@ -53,7 +53,7 @@ pub fn open(db_path: &str) -> Result { "CREATE TABLE IF NOT EXISTS announcements ( id INTEGER PRIMARY KEY AUTOINCREMENT, author TEXT NOT NULL, - text_content TEXT NOT NULL, + text_content TEXT, start_date TEXT NOT NULL, end_date TEXT NOT NULL, flags TEXT NOT NULL DEFAULT '[]', @@ -138,7 +138,7 @@ pub fn count_all(conn: &Connection, filter_date: Option<&str>) -> Result { pub fn create( conn: &Connection, author: &str, - text_content: &str, + text_content: Option<&str>, start_date: &str, end_date: &str, flags: &[AnnouncementFlag], diff --git a/src/management/mod.rs b/src/management/mod.rs index 999b4a2..07e7f4c 100644 --- a/src/management/mod.rs +++ b/src/management/mod.rs @@ -109,11 +109,16 @@ async fn management_page( }) .collect::>() .join(" "); + let text_display = a + .text_content + .as_ref() + .map(|t| escape_html(t)) + .unwrap_or_else(|| "—".to_string()); format!( include_str!("../../templates/announcement_row.html"), id = a.id, author = escape_html(&a.author), - text = escape_html(&a.text_content), + text = text_display, start = a.start_date, end = a.end_date, flags_display = flags_display, @@ -236,7 +241,7 @@ fn render_pagination(current: u32, total: u32, count: u64, filter_param: &str) - #[derive(Deserialize)] struct CreateInput { author: String, - text_content: String, + text_content: Option, start_date: String, end_date: String, #[serde(default, deserialize_with = "one_or_many")] @@ -258,8 +263,10 @@ async fn create_announcement( .filter_map(|s| s.parse::().ok()) .collect(); + let text = input.text_content.filter(|s| !s.is_empty()); + let conn = db.lock().await; - if let Err(e) = db::create(&conn, &input.author, &input.text_content, &input.start_date, &input.end_date, &flags) { + if let Err(e) = db::create(&conn, &input.author, text.as_deref(), &input.start_date, &input.end_date, &flags) { return ( StatusCode::INTERNAL_SERVER_ERROR, [("location", "/")], diff --git a/templates/management_page.html b/templates/management_page.html index 15c02f3..8f50c00 100644 --- a/templates/management_page.html +++ b/templates/management_page.html @@ -115,7 +115,7 @@