Fiks: AI-worker oppdaterer PG body direkte, SpacetimeDB er best-effort

Frontend bruker PG-polling i prod (VITE_SPACETIMEDB_URL ikke satt).
Meldinger finnes bare i PG, ikke i SpacetimeDB — worker feilet ved
STDB-oppdatering og fullførte aldri jobben.

Nå: STDB-oppdatering er best-effort (warn ved feil), PG body
oppdateres alltid direkte som fallback.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
vegard 2026-03-16 15:03:04 +01:00
parent 2ffcf96be4
commit d4d43dfcd2

View file

@ -245,11 +245,19 @@ impl AiTextProcessHandler {
.await .await
.context("Feil ved oppdatering av metadata")?; .context("Feil ved oppdatering av metadata")?;
// 9. Oppdater SpacetimeDB — dette er primær-kanalen til frontend. // 9. Oppdater SpacetimeDB + PG body.
// Gjøres ETTER PG-metadata slik at enrichMessageFromPg finner fersk data. // SpacetimeDB er primær når frontend bruker sanntid, men meldingen
self.update_spacetimedb(&message_id, workspace_id, &ai_resp.content) // kan også være opprettet via PG-polling — da finnes den ikke i STDB.
if let Err(e) = self.update_spacetimedb(&message_id, workspace_id, &ai_resp.content).await {
warn!(message_id = %message_id, error = %e, "SpacetimeDB-oppdatering feilet, oppdaterer PG direkte");
}
// Oppdater alltid PG body som fallback (sync ville gjort dette, men kan ta tid)
sqlx::query("UPDATE messages SET body = $1, edited_at = now() WHERE id = $2")
.bind(&ai_resp.content)
.bind(message_id)
.execute(pool)
.await .await
.context("Kunne ikke oppdatere SpacetimeDB med AI-resultat")?; .context("Feil ved oppdatering av body i PG")?;
// 10. Logg tokenforbruk til ai_usage_log // 10. Logg tokenforbruk til ai_usage_log
sqlx::query( sqlx::query(