a love letter to tangled (android, iOS, and a search API)
at main 51 lines 1.2 kB view raw
1package normalize 2 3import ( 4 "fmt" 5 6 "tangled.org/desertthunder.dev/twister/internal/store" 7) 8 9const collectionIssue = "sh.tangled.repo.issue" 10 11// IssueAdapter normalizes sh.tangled.repo.issue records. 12type IssueAdapter struct{} 13 14func (a *IssueAdapter) Collection() string { return collectionIssue } 15func (a *IssueAdapter) RecordType() string { return "issue" } 16 17func (a *IssueAdapter) Searchable(_ map[string]any) bool { return true } 18 19func (a *IssueAdapter) Normalize(event TapRecordEvent) (*store.Document, error) { 20 r := event.Record 21 rec := r.Record 22 23 title := str(rec, "title") 24 body := str(rec, "body") 25 repoURI := str(rec, "repo") 26 27 repoDID := "" 28 if repoURI != "" { 29 did, _, _, err := ParseATURI(repoURI) 30 if err != nil { 31 return nil, fmt.Errorf("issue repo AT-URI: %w", err) 32 } 33 repoDID = did 34 } 35 36 return &store.Document{ 37 ID: StableID(r.DID, r.Collection, r.RKey), 38 DID: r.DID, 39 Collection: r.Collection, 40 RKey: r.RKey, 41 ATURI: BuildATURI(r.DID, r.Collection, r.RKey), 42 CID: r.CID, 43 RecordType: a.RecordType(), 44 Title: title, 45 Body: body, 46 Summary: truncate(body, 200), 47 RepoDID: repoDID, 48 TagsJSON: "[]", 49 CreatedAt: str(rec, "createdAt"), 50 }, nil 51}