Feat add actors to meilisearch (#1048)

* initial commit

* update api docs

* adds search token versioning

* make id filterable

* isLocal -> is_local

* add iri to actor index

* update gitignore

* Merge remote-tracking branch 'origin/main' into feat-add-actors-to-meilisearch

* fix sharing for newly discovered actors

* fix ActorSearchResult type

---------

Co-authored-by: Christian Beutel <>
This commit is contained in:
Flomp
2026-06-09 21:02:05 +02:00
committed by GitHub
parent 1e2b4ea75d
commit c04a719ca6
45 changed files with 392 additions and 108 deletions

View File

@@ -15,7 +15,7 @@ import (
"github.com/pocketbase/pocketbase/core"
)
func documentFromTrailRecord(app core.App, r *core.Record, author *core.Record, includeShares bool) (map[string]interface{}, error) {
func documentFromTrailRecord(r *core.Record, author *core.Record, includeShares bool) (map[string]interface{}, error) {
photos := r.GetStringSlice("photos")
thumbnail := ""
if len(photos) > 0 {
@@ -42,7 +42,7 @@ func documentFromTrailRecord(app core.App, r *core.Record, author *core.Record,
bounds := getStoredBounds(r)
domain := ""
if !author.GetBool("isLocal") {
if !author.GetBool("is_local") {
domain = author.GetString("domain")
}
@@ -157,7 +157,7 @@ func documentFromListRecord(r *core.Record, author *core.Record, includeShares b
totalDuration := 0.0
trails := len(r.GetStringSlice("trails"))
if r.GetString("iri") != "" && !author.GetBool("isLocal") {
if r.GetString("iri") != "" && !author.GetBool("is_local") {
doc, err := documentFromRemoteRecord(r, "lists")
if err == nil {
totalElevationGain = doc["elevation_gain"].(float64)
@@ -181,7 +181,7 @@ func documentFromListRecord(r *core.Record, author *core.Record, includeShares b
}
domain := ""
if !author.GetBool("isLocal") {
if !author.GetBool("is_local") {
domain = author.GetString("domain")
}
@@ -222,6 +222,21 @@ func documentFromListRecord(r *core.Record, author *core.Record, includeShares b
return document, nil
}
func documentFromActorRecord(r *core.Record) (map[string]any, error) {
document := map[string]any{
"id": r.Id,
"username": r.GetString("username"),
"preferred_username": r.GetString("preferred_username"),
"domain": r.GetString("domain"),
"iri": r.GetString("iri"),
"icon": r.GetString("icon"),
"is_local": r.GetBool("is_local"),
}
return document, nil
}
func documentFromRemoteRecord(r *core.Record, index string) (map[string]any, error) {
client := &http.Client{}
@@ -309,7 +324,7 @@ func IndexTrails(app core.App, trails []*core.Record, client meilisearch.Service
author := r.ExpandedOne("author")
doc, err := documentFromTrailRecord(app, r, author, true)
doc, err := documentFromTrailRecord(r, author, true)
if err != nil {
return err
}
@@ -334,7 +349,7 @@ func UpdateTrail(app core.App, r *core.Record, author *core.Record, client meili
return fmt.Errorf("meilisearch update trail: failed to expand category: %v", errs)
}
doc, err := documentFromTrailRecord(app, r, author, false)
doc, err := documentFromTrailRecord(r, author, false)
if err != nil {
return err
}
@@ -424,6 +439,37 @@ func UpdateList(app core.App, r *core.Record, author *core.Record, client meilis
return nil
}
func IndexActors(actors []*core.Record, client meilisearch.ServiceManager) error {
documents := make([]map[string]any, len(actors))
for i, r := range actors {
doc, err := documentFromActorRecord(r)
if err != nil {
return err
}
documents[i] = doc
}
if _, err := client.Index("actors").AddDocuments(documents, nil); err != nil {
return err
}
return nil
}
func UpdateActor(r *core.Record, client meilisearch.ServiceManager) error {
documents, err := documentFromActorRecord(r)
if err != nil {
return err
}
if _, err = client.Index("actors").UpdateDocuments(documents, nil); err != nil {
return err
}
return nil
}
func UpdateListShares(listId string, shares []string, client meilisearch.ServiceManager) error {
documents := []map[string]interface{}{
{