Legg til GET /query/aliases for å hente brukerens aliaser

Del av oppgave 8.1. Endepunktet returnerer alle alias-noder
koblet til brukerens hovednode via alias-edges (system=true).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
vegard 2026-03-17 19:02:33 +01:00
parent ad7f430534
commit 71ad21e4d5

View file

@ -558,6 +558,54 @@ async fn run_query_nodes(
Ok(QueryNodesResponse { nodes, total }) Ok(QueryNodesResponse { nodes, total })
} }
// =============================================================================
// GET /query/aliases — brukerens alias-noder
// =============================================================================
#[derive(Serialize, sqlx::FromRow)]
pub struct AliasResult {
pub node_id: Uuid,
pub title: Option<String>,
pub metadata: serde_json::Value,
pub created_at: chrono::DateTime<chrono::Utc>,
}
#[derive(Serialize)]
pub struct QueryAliasesResponse {
pub aliases: Vec<AliasResult>,
}
/// GET /query/aliases
///
/// Returnerer alle alias-noder for den autentiserte brukeren.
/// Henter via alias-edges (system=true) fra brukerens hovednode.
/// Ingen RLS nødvendig — vi spør direkte med brukerens node_id.
pub async fn query_aliases(
State(state): State<AppState>,
user: AuthUser,
) -> Result<Json<QueryAliasesResponse>, (StatusCode, Json<ErrorResponse>)> {
let aliases = sqlx::query_as::<_, AliasResult>(
r#"
SELECT n.id AS node_id, n.title, n.metadata, n.created_at
FROM edges e
JOIN nodes n ON n.id = e.target_id
WHERE e.source_id = $1
AND e.edge_type = 'alias'
AND e.system = true
ORDER BY n.created_at
"#,
)
.bind(user.node_id)
.fetch_all(&state.db)
.await
.map_err(|e| {
tracing::error!(error = %e, "query_aliases feilet");
internal_error("Databasefeil ved henting av aliaser")
})?;
Ok(Json(QueryAliasesResponse { aliases }))
}
#[cfg(test)] #[cfg(test)]
mod tests { mod tests {
use super::*; use super::*;