Fiks: bevar originale timestamps ved warmup i stedet for ctx.timestamp
load_messages satte alle meldinger til nåtidspunkt. Parser nå PG-timestamp til SpacetimeDB Timestamp slik at created_at bevares korrekt. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
parent
718f202014
commit
b6fd6b5ef0
1 changed files with 19 additions and 1 deletions
|
|
@ -435,6 +435,9 @@ pub fn load_messages(
|
|||
continue;
|
||||
}
|
||||
|
||||
let created_at = parse_timestamp(item["created_at"].as_str().unwrap_or_default())
|
||||
.unwrap_or(ctx.timestamp);
|
||||
|
||||
ctx.db.chat_message().insert(ChatMessage {
|
||||
id,
|
||||
channel_id: item["channel_id"].as_str().unwrap_or_default().to_string(),
|
||||
|
|
@ -444,7 +447,7 @@ pub fn load_messages(
|
|||
body: item["body"].as_str().unwrap_or_default().to_string(),
|
||||
message_type: item["message_type"].as_str().unwrap_or("text").to_string(),
|
||||
reply_to: item["reply_to"].as_str().unwrap_or_default().to_string(),
|
||||
created_at: ctx.timestamp,
|
||||
created_at,
|
||||
metadata: item["metadata"].as_str().unwrap_or_default().to_string(),
|
||||
edited_at: item["edited_at"].as_str().unwrap_or_default().to_string(),
|
||||
});
|
||||
|
|
@ -533,6 +536,21 @@ pub fn mark_synced(ctx: &ReducerContext, ids: Vec<u64>) -> Result<(), String> {
|
|||
|
||||
// === Hjelpefunksjoner ===
|
||||
|
||||
/// Parse en PG-tekststreng ("2026-03-15 23:57:11.677139+00") til SpacetimeDB Timestamp.
|
||||
fn parse_timestamp(s: &str) -> Option<Timestamp> {
|
||||
if s.is_empty() { return None; }
|
||||
// Prøv standard ISO-parse først, deretter PG-formater
|
||||
let dt = s.parse::<chrono::DateTime<chrono::FixedOffset>>()
|
||||
.map(|d| d.to_utc())
|
||||
.or_else(|_| {
|
||||
chrono::NaiveDateTime::parse_from_str(s, "%Y-%m-%d %H:%M:%S%.f")
|
||||
.or_else(|_| chrono::NaiveDateTime::parse_from_str(s, "%Y-%m-%d %H:%M:%S"))
|
||||
.map(|naive| naive.and_utc())
|
||||
})
|
||||
.ok()?;
|
||||
Some(Timestamp::from_micros_since_unix_epoch(dt.timestamp_micros()))
|
||||
}
|
||||
|
||||
/// Formater en SpacetimeDB Timestamp til ISO 8601-streng.
|
||||
fn format_timestamp(ts: Timestamp) -> String {
|
||||
let duration = ts.to_duration_since_unix_epoch().unwrap_or_default();
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue