···
"github.com/bluesky-social/indigo/atproto/syntax"
···
"tangled.sh/tangled.sh/core/api/tangled"
"tangled.sh/tangled.sh/core/appview/config"
"tangled.sh/tangled.sh/core/appview/db"
+
"tangled.sh/tangled.sh/core/appview/pages/markup"
"tangled.sh/tangled.sh/core/appview/spindleverify"
"tangled.sh/tangled.sh/core/idresolver"
"tangled.sh/tangled.sh/core/rbac"
···
case tangled.ActorProfileNSID:
case tangled.SpindleMemberNSID:
+
err = i.ingestSpindleMember(ctx, e)
case tangled.SpindleNSID:
+
err = i.ingestSpindle(ctx, e)
+
case tangled.RepoIssueNSID:
+
err = i.ingestIssue(ctx, e)
l = i.Logger.With("nsid", e.Commit.Collection)
···
+
func (i *Ingester) ingestSpindleMember(ctx context.Context, e *models.Event) error {
···
return fmt.Errorf("failed to enforce permissions: %w", err)
+
memberId, err := i.IdResolver.ResolveIdent(ctx, record.Subject)
···
+
func (i *Ingester) ingestSpindle(ctx context.Context, e *models.Event) error {
···
+
err = spindleverify.RunVerification(ctx, instance, did, i.Config.Core.Dev)
l.Error("failed to add spindle to db", "err", err, "instance", instance)
···
+
func (i *Ingester) ingestIssue(ctx context.Context, e *models.Event) error {
+
l := i.Logger.With("handler", "ingestIssue", "nsid", e.Commit.Collection, "did", did, "rkey", rkey)
+
l.Info("ingesting record")
+
ddb, ok := i.Db.Execer.(*db.DB)
+
return fmt.Errorf("failed to index issue record, invalid db cast")
+
switch e.Commit.Operation {
+
case models.CommitOperationCreate:
+
raw := json.RawMessage(e.Commit.Record)
+
record := tangled.RepoIssue{}
+
err = json.Unmarshal(raw, &record)
+
l.Error("invalid record", "err", err)
+
issue := db.IssueFromRecord(did, rkey, record)
+
sanitizer := markup.NewSanitizer()
+
if st := strings.TrimSpace(sanitizer.SanitizeDescription(issue.Title)); st == "" {
+
return fmt.Errorf("title is empty after HTML sanitization")
+
if sb := strings.TrimSpace(sanitizer.SanitizeDefault(issue.Body)); sb == "" {
+
return fmt.Errorf("body is empty after HTML sanitization")
+
tx, err := ddb.BeginTx(ctx, nil)
+
l.Error("failed to begin transaction", "err", err)
+
err = db.NewIssue(tx, &issue)
+
l.Error("failed to create issue", "err", err)
+
case models.CommitOperationUpdate:
+
// TODO: implement updates
+
case models.CommitOperationDelete:
+
// TODO: implement issue deletion
+
return fmt.Errorf("unknown operation: %s", e.Commit.Operation)