add @mentions — parsed server-side, rendered as highlighted spans

- Backend: parse_mentions() extracts @username from content
- Message API response includes mentions: string[] field
- Frontend: renderContent() highlights @mentions in hot orange
- Works with alphanumeric + hyphens + underscores

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-03-29 20:56:45 +02:00
parent 6ab217970e
commit 8ce8ebc9b8
3 changed files with 28 additions and 1 deletions

View File

@@ -2,6 +2,16 @@ use chrono::{DateTime, Utc};
use sqlx::FromRow;
use uuid::Uuid;
/// Extract @mentions from message content
fn parse_mentions(content: &str) -> Vec<String> {
content
.split_whitespace()
.filter(|w| w.starts_with('@') && w.len() > 1)
.map(|w| w.trim_start_matches('@').trim_end_matches(|c: char| !c.is_alphanumeric() && c != '_' && c != '-').to_string())
.filter(|m| !m.is_empty())
.collect()
}
/// DB row types — these map directly to SQL tables.
/// Separate from API types in colony-types.
@@ -87,6 +97,7 @@ impl MessageRow {
} else {
self.content.clone()
},
mentions: parse_mentions(&self.content),
metadata: self
.metadata
.as_ref()