a love letter to tangled (android, iOS, and a search API)
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}