wiki: add Pinned Posts page
45
Pinned-Posts.md
Normal file
45
Pinned-Posts.md
Normal file
@@ -0,0 +1,45 @@
|
||||
# Pinned Posts
|
||||
|
||||
k-ap serves `GET /users/{id}/featured` automatically as an `OrderedCollection` of pinned post URLs. By default the collection is empty.
|
||||
|
||||
---
|
||||
|
||||
## Enable pinned posts
|
||||
|
||||
Override `get_featured_objects` in your `ApContentReader`:
|
||||
|
||||
```rust
|
||||
impl ApContentReader for MyDb {
|
||||
async fn get_featured_objects(&self, user_id: Uuid) -> anyhow::Result<Vec<Url>> {
|
||||
let urls = self.fetch_pinned_post_urls(user_id).await?;
|
||||
Ok(urls)
|
||||
}
|
||||
|
||||
// ... other required methods
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Wire up the URL in ApUser
|
||||
|
||||
Set `featured_url` to the endpoint URL so it appears in actor JSON:
|
||||
|
||||
```rust
|
||||
ApUser {
|
||||
featured_url: Some(
|
||||
format!("https://example.com/users/{}/featured", user.id).parse()?
|
||||
),
|
||||
// ... other fields
|
||||
}
|
||||
```
|
||||
|
||||
k-ap includes `featured_url` as the `featured` field in actor JSON. Clients like Mastodon follow this link from the actor's `featured` field to display pinned posts on a profile.
|
||||
|
||||
---
|
||||
|
||||
## How it works
|
||||
|
||||
`GET /users/{id}/featured` is registered by `service.router()`. When a request arrives, k-ap calls `ApContentReader::get_featured_objects(user_id)` and returns an `OrderedCollection` with the returned URLs as `orderedItems`.
|
||||
|
||||
The collection is always a flat list of URLs — it does not include the full object JSON. Remote clients fetch each URL individually if they need the content.
|
||||
Reference in New Issue
Block a user