From 71ad21e4d54f53fe4416b9217665f02be7e53181 Mon Sep 17 00:00:00 2001 From: vegard Date: Tue, 17 Mar 2026 19:02:33 +0100 Subject: [PATCH] =?UTF-8?q?Legg=20til=20GET=20/query/aliases=20for=20?= =?UTF-8?q?=C3=A5=20hente=20brukerens=20aliaser?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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 --- maskinrommet/src/queries.rs | 48 +++++++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) diff --git a/maskinrommet/src/queries.rs b/maskinrommet/src/queries.rs index 837241d..f8212dd 100644 --- a/maskinrommet/src/queries.rs +++ b/maskinrommet/src/queries.rs @@ -558,6 +558,54 @@ async fn run_query_nodes( Ok(QueryNodesResponse { nodes, total }) } +// ============================================================================= +// GET /query/aliases — brukerens alias-noder +// ============================================================================= + +#[derive(Serialize, sqlx::FromRow)] +pub struct AliasResult { + pub node_id: Uuid, + pub title: Option, + pub metadata: serde_json::Value, + pub created_at: chrono::DateTime, +} + +#[derive(Serialize)] +pub struct QueryAliasesResponse { + pub aliases: Vec, +} + +/// 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, + user: AuthUser, +) -> Result, (StatusCode, Json)> { + 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)] mod tests { use super::*;