diff --git a/backend/post.sql b/backend/post.sql index 9460010..120e885 100644 --- a/backend/post.sql +++ b/backend/post.sql @@ -1,18 +1,20 @@ CREATE TABLE IF NOT EXISTS Post ( - post_id UUID PRIMARY KEY, - title VARCHAR(255) NOT NULL, - summary TEXT NOT NULL, - content TEXT NOT NULL, - last_update TIMESTAMP + post_id UUID PRIMARY KEY, + title VARCHAR(255) NOT NULL, + summary TEXT NOT NULL, + content TEXT NOT NULL, + last_update TIMESTAMP, + first_update TIMESTAMP NOT NULL ); drop table if exists post; -INSERT INTO Post (post_id, title, summary, content, last_update) -VALUES ($1, $2, $3, $4, $5) +INSERT INTO Post (post_id, title, summary, content, last_update, first_update) +VALUES ($1, $2, $3, $4, $5, $6) ON CONFLICT (post_id) - DO UPDATE SET title = excluded.title, - summary = excluded.summary, - content = excluded.content, - last_update = excluded.last_update + DO UPDATE SET title = excluded.title, + summary = excluded.summary, + content = excluded.content, + last_update = excluded.last_update, + first_update = excluded.first_update diff --git a/backend/src/api/post/refresh.rs b/backend/src/api/post/refresh.rs index e0b1d20..79e504a 100644 --- a/backend/src/api/post/refresh.rs +++ b/backend/src/api/post/refresh.rs @@ -49,11 +49,12 @@ pub async fn refresh( r##" CREATE TABLE IF NOT EXISTS Post ( - post_id UUID PRIMARY KEY, - title VARCHAR(255) NOT NULL, - summary TEXT NOT NULL, - content TEXT NOT NULL, - last_update TIMESTAMP + post_id UUID PRIMARY KEY, + title VARCHAR(255) NOT NULL, + summary TEXT NOT NULL, + content TEXT NOT NULL, + last_update TIMESTAMP, + first_update TIMESTAMP NOT NULL ); "##, ) @@ -81,13 +82,15 @@ CREATE TABLE IF NOT EXISTS Tag // table Post match query( r##" -INSERT INTO Post (post_id, title, summary, content, last_update) -VALUES ($1, $2, $3, $4, $5) +INSERT INTO Post (post_id, title, summary, content, last_update, first_update) +VALUES ($1, $2, $3, $4, $5, $6) ON CONFLICT (post_id) - DO UPDATE SET title = excluded.title, - summary = excluded.summary, - content = excluded.content, - last_update = excluded.last_update + DO UPDATE SET title = excluded.title, + summary = excluded.summary, + content = excluded.content, + last_update = excluded.last_update, + first_update = excluded.first_update + "##, ) .bind(post.post_id) @@ -95,6 +98,7 @@ ON CONFLICT (post_id) .bind(post.summary) .bind(&post.content) .bind(post.last_update) + .bind(post.first_update) .execute(&db_connection) .await { diff --git a/backend/src/model/mod.rs b/backend/src/model/mod.rs index 234d051..fe50300 100644 --- a/backend/src/model/mod.rs +++ b/backend/src/model/mod.rs @@ -12,6 +12,7 @@ pub struct Post { pub summary: String, pub content: String, pub last_update: NaiveDateTime, + pub first_update: NaiveDateTime, } diff --git a/backend/src/model/post.rs b/backend/src/model/post.rs index 28e6bcf..81877fd 100644 --- a/backend/src/model/post.rs +++ b/backend/src/model/post.rs @@ -3,7 +3,7 @@ use std::error::Error; use std::process::Command; use std::str; -use chrono::{NaiveDateTime, Utc}; +use chrono::{NaiveDate, NaiveDateTime, Utc}; use uuid::Uuid; use crate::markdown::meta::parse_meta; @@ -44,12 +44,21 @@ impl Post { Utc::now().naive_utc() }; + let first_update: NaiveDateTime = match meta.get("date") { + None => Utc::now().naive_utc(), + Some(date) => NaiveDateTime::from( + NaiveDate::parse_from_str(date, "%Y-%m-%d%z") + .expect("Failed to parse first_update time"), + ), + }; + Ok(Post { post_id: Uuid::new_v4(), title, summary, content: md_content, last_update, + first_update, }) } }