(&self, message: &SessionMessage)
| 418 | } |
| 419 | |
| 420 | pub async fn upsert(&self, message: &SessionMessage) -> Result<(), DatabaseError> { |
| 421 | let data_json = serde_json::to_string(&message.parts) |
| 422 | .map_err(|e| DatabaseError::QueryError(e.to_string()))?; |
| 423 | |
| 424 | let role_str = match message.role { |
| 425 | MessageRole::User => "user", |
| 426 | MessageRole::Assistant => "assistant", |
| 427 | MessageRole::System => "system", |
| 428 | MessageRole::Tool => "tool", |
| 429 | }; |
| 430 | |
| 431 | sqlx::query( |
| 432 | r#" |
| 433 | INSERT INTO messages (id, session_id, role, created_at, data) |
| 434 | VALUES (?, ?, ?, ?, ?) |
| 435 | ON CONFLICT(id) DO UPDATE SET |
| 436 | session_id = excluded.session_id, |
| 437 | role = excluded.role, |
| 438 | created_at = excluded.created_at, |
| 439 | data = excluded.data |
| 440 | "#, |
| 441 | ) |
| 442 | .bind(&message.id) |
| 443 | .bind(&message.session_id) |
| 444 | .bind(role_str) |
| 445 | .bind(message.created_at.timestamp_millis()) |
| 446 | .bind(&data_json) |
| 447 | .execute(&self.pool) |
| 448 | .await |
| 449 | .map_err(|e| DatabaseError::QueryError(e.to_string()))?; |
| 450 | |
| 451 | Ok(()) |
| 452 | } |
| 453 | |
| 454 | pub async fn list_for_session( |
| 455 | &self, |
no test coverage detected