feat: allow paginating content by actor audience

basically to browse lemmy communities
This commit is contained in:
əlemi 2024-07-03 01:58:02 +02:00
parent 45da3a1684
commit e707bf7344
Signed by: alemi
GPG key ID: A4895B84D311642C
3 changed files with 40 additions and 0 deletions

View file

@ -0,0 +1,37 @@
use axum::extract::{Path, Query, State};
use sea_orm::{Condition, ColumnTrait};
use upub::Context;
use crate::{activitypub::Pagination, builders::JsonLD, AuthIdentity, Identity};
pub async fn get(
State(ctx): State<Context>,
Path(id): Path<String>,
) -> crate::ApiResult<JsonLD<serde_json::Value>> {
crate::builders::collection(
&upub::url!(ctx, "/actors/{id}/audience"),
None,
)
}
pub async fn page(
State(ctx): State<Context>,
Path(id): Path<String>,
AuthIdentity(auth): AuthIdentity,
Query(page): Query<Pagination>,
) -> crate::ApiResult<JsonLD<serde_json::Value>> {
let filter = Condition::all()
.add(auth.filter())
.add(upub::model::object::Column::Audience.eq(ctx.uid(&id)));
crate::builders::paginate_feed(
upub::url!(ctx, "/actors/{id}/audience/page"),
filter,
ctx.db(),
page,
auth.my_id(),
false,
)
.await
}

View file

@ -2,6 +2,7 @@ pub mod inbox;
pub mod outbox; pub mod outbox;
pub mod following; pub mod following;
pub mod notifications; pub mod notifications;
pub mod audience;
use axum::extract::{Path, Query, State}; use axum::extract::{Path, Query, State};

View file

@ -55,6 +55,8 @@ impl ActivityPubRouter for Router<upub::Context> {
.route("/actors/:id/followers/page", get(ap::actor::following::page::<false>)) .route("/actors/:id/followers/page", get(ap::actor::following::page::<false>))
.route("/actors/:id/following", get(ap::actor::following::get::<true>)) .route("/actors/:id/following", get(ap::actor::following::get::<true>))
.route("/actors/:id/following/page", get(ap::actor::following::page::<true>)) .route("/actors/:id/following/page", get(ap::actor::following::page::<true>))
.route("/actors/:id/audience", get(ap::actor::audience::get))
.route("/actors/:id/audience/page", get(ap::actor::audience::page))
// activities // activities
.route("/activities/:id", get(ap::activity::view)) .route("/activities/:id", get(ap::activity::view))
// specific object routes // specific object routes