node: Introduce `AliasStore` trait
httpd: use the `AliasStore` trait Signed-off-by: xphoniex <dj.2dixx@gmail.com>
This commit is contained in:
parent
4652f309b4
commit
738d0dcbad
|
|
@ -14,7 +14,7 @@ use radicle::cob::thread;
|
|||
use radicle::cob::thread::{CommentId, Thread};
|
||||
use radicle::cob::{ActorId, Author, Reaction, Timestamp};
|
||||
use radicle::git::RefString;
|
||||
use radicle::node::tracking::store as TrackingStore;
|
||||
use radicle::node::AliasStore;
|
||||
use radicle::prelude::NodeId;
|
||||
use radicle::storage::{git, refs, ReadRepository};
|
||||
use radicle_surf::blob::Blob;
|
||||
|
|
@ -96,7 +96,7 @@ pub(crate) fn tree(tree: &Tree, path: &str, stats: &Stats) -> Value {
|
|||
}
|
||||
|
||||
/// Returns JSON for an `issue`.
|
||||
pub(crate) fn issue(id: IssueId, issue: Issue, aliases: &TrackingStore::Config) -> Value {
|
||||
pub(crate) fn issue(id: IssueId, issue: Issue, aliases: &impl AliasStore) -> Value {
|
||||
json!({
|
||||
"id": id.to_string(),
|
||||
"author": author(&issue.author(), aliases.alias(issue.author().id())),
|
||||
|
|
@ -116,7 +116,7 @@ pub(crate) fn patch(
|
|||
id: PatchId,
|
||||
patch: Patch,
|
||||
repo: &git::Repository,
|
||||
aliases: &TrackingStore::Config,
|
||||
aliases: &impl AliasStore,
|
||||
) -> Value {
|
||||
json!({
|
||||
"id": id.to_string(),
|
||||
|
|
@ -249,7 +249,7 @@ impl<'a> Comment<'a> {
|
|||
id: &'a CommentId,
|
||||
comment: &'a thread::Comment,
|
||||
thread: &'a Thread,
|
||||
aliases: &TrackingStore::Config,
|
||||
aliases: &impl AliasStore,
|
||||
) -> Self {
|
||||
let comment_author = Author::new(comment.author());
|
||||
Self {
|
||||
|
|
|
|||
|
|
@ -15,6 +15,7 @@ use tower_http::set_header::SetResponseHeaderLayer;
|
|||
use radicle::cob::{issue, patch, thread, ActorId, Tag};
|
||||
use radicle::identity::Id;
|
||||
use radicle::node::routing::Store;
|
||||
use radicle::node::AliasStore;
|
||||
use radicle::node::NodeId;
|
||||
use radicle::storage::git::paths;
|
||||
use radicle::storage::{ReadRepository, ReadStorage, WriteRepository};
|
||||
|
|
@ -456,7 +457,7 @@ async fn issues_handler(
|
|||
let tracking_store = &ctx.profile.tracking()?;
|
||||
let issues = issues
|
||||
.into_iter()
|
||||
.map(|(id, issue, _)| api::json::issue(id, issue, tracking_store))
|
||||
.map(|(id, issue, _)| api::json::issue(id, issue, &tracking_store))
|
||||
.skip(page * per_page)
|
||||
.take(per_page)
|
||||
.collect::<Vec<_>>();
|
||||
|
|
@ -578,7 +579,7 @@ async fn issue_handler(
|
|||
Ok::<_, Error>(Json(api::json::issue(
|
||||
issue_id.into(),
|
||||
issue,
|
||||
tracking_store,
|
||||
&tracking_store,
|
||||
)))
|
||||
}
|
||||
|
||||
|
|
@ -740,7 +741,7 @@ async fn patches_handler(
|
|||
let tracking_store = &ctx.profile.tracking()?;
|
||||
let patches = patches
|
||||
.into_iter()
|
||||
.map(|(id, patch, _)| api::json::patch(id, patch, &repo, tracking_store))
|
||||
.map(|(id, patch, _)| api::json::patch(id, patch, &repo, &tracking_store))
|
||||
.skip(page * per_page)
|
||||
.take(per_page)
|
||||
.collect::<Vec<_>>();
|
||||
|
|
@ -765,7 +766,7 @@ async fn patch_handler(
|
|||
patch_id.into(),
|
||||
patch,
|
||||
&repo,
|
||||
tracking_store,
|
||||
&tracking_store,
|
||||
)))
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -694,6 +694,12 @@ impl Handle for Node {
|
|||
}
|
||||
}
|
||||
|
||||
/// A trait for different sources which can potentially return an alias.
|
||||
pub trait AliasStore {
|
||||
/// Returns alias of a `NodeId`.
|
||||
fn alias(&self, nid: &NodeId) -> Option<String>;
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod test {
|
||||
use super::*;
|
||||
|
|
|
|||
|
|
@ -5,6 +5,7 @@ use std::{fmt, io, ops::Not as _, time};
|
|||
use sqlite as sql;
|
||||
use thiserror::Error;
|
||||
|
||||
use crate::node::AliasStore;
|
||||
use crate::prelude::{Id, NodeId};
|
||||
|
||||
use super::{Node, Policy, Repo, Scope};
|
||||
|
|
@ -254,10 +255,12 @@ impl Config {
|
|||
}
|
||||
Ok(Box::new(entries.into_iter()))
|
||||
}
|
||||
}
|
||||
|
||||
impl AliasStore for &Config {
|
||||
/// Retrieve `alias` of given node.
|
||||
/// Calls `Self::node_policy` under the hood.
|
||||
pub fn alias(&self, nid: &NodeId) -> Option<String> {
|
||||
fn alias(&self, nid: &NodeId) -> Option<String> {
|
||||
self.node_policy(nid)
|
||||
.map(|node| node.and_then(|n| n.alias))
|
||||
.unwrap_or(None)
|
||||
|
|
|
|||
Loading…
Reference in New Issue