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:
parent
ad7f430534
commit
71ad21e4d5
1 changed files with 48 additions and 0 deletions
|
|
@ -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::*;
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue