···23232424func DeletePublicKeyByRkey(e Execer, did, rkey string) error {2525 _, err := e.Exec(`2626- delete or ignore from public_keys 2727- where did = ? and name = ? and rkey = ?`,2626+ delete from public_keys 2727+ where did = ? and rkey = ?`,2828 did, rkey)2929 return err3030}
+133
appview/ingester.go
···11+package appview22+33+import (44+ "context"55+ "encoding/json"66+ "fmt"77+ "log"88+99+ "github.com/bluesky-social/indigo/atproto/syntax"1010+ "github.com/bluesky-social/jetstream/pkg/models"1111+ tangled "tangled.sh/tangled.sh/core/api/tangled"1212+ "tangled.sh/tangled.sh/core/appview/db"1313+)1414+1515+type Ingester func(ctx context.Context, e *models.Event) error1616+1717+func Ingest(d db.DbWrapper) Ingester {1818+ return func(ctx context.Context, e *models.Event) error {1919+ var err error2020+ defer func() {2121+ eventTime := e.TimeUS2222+ lastTimeUs := eventTime + 12323+ if err := d.SaveLastTimeUs(lastTimeUs); err != nil {2424+ err = fmt.Errorf("(deferred) failed to save last time us: %w", err)2525+ }2626+ }()2727+2828+ if e.Kind != models.EventKindCommit {2929+ return nil3030+ }3131+3232+ switch e.Commit.Collection {3333+ case tangled.GraphFollowNSID:3434+ ingestFollow(&d, e)3535+ case tangled.FeedStarNSID:3636+ ingestStar(&d, e)3737+ case tangled.PublicKeyNSID:3838+ ingestPublicKey(&d, e)3939+ }4040+4141+ return err4242+ }4343+}4444+4545+func ingestStar(d *db.DbWrapper, e *models.Event) error {4646+ var err error4747+ did := e.Did4848+4949+ switch e.Commit.Operation {5050+ case models.CommitOperationCreate, models.CommitOperationUpdate:5151+ var subjectUri syntax.ATURI5252+5353+ raw := json.RawMessage(e.Commit.Record)5454+ record := tangled.FeedStar{}5555+ err := json.Unmarshal(raw, &record)5656+ if err != nil {5757+ log.Println("invalid record")5858+ return err5959+ }6060+6161+ subjectUri, err = syntax.ParseATURI(record.Subject)6262+ if err != nil {6363+ log.Println("invalid record")6464+ return err6565+ }6666+ err = db.AddStar(d, did, subjectUri, e.Commit.RKey)6767+ case models.CommitOperationDelete:6868+ err = db.DeleteStarByRkey(d, did, e.Commit.RKey)6969+ }7070+7171+ if err != nil {7272+ return fmt.Errorf("failed to %s star record: %w", e.Commit.Operation, err)7373+ }7474+7575+ return nil7676+}7777+7878+func ingestFollow(d *db.DbWrapper, e *models.Event) error {7979+ var err error8080+ did := e.Did8181+8282+ switch e.Commit.Operation {8383+ case models.CommitOperationCreate, models.CommitOperationUpdate:8484+ raw := json.RawMessage(e.Commit.Record)8585+ record := tangled.GraphFollow{}8686+ err = json.Unmarshal(raw, &record)8787+ if err != nil {8888+ log.Println("invalid record")8989+ return err9090+ }9191+9292+ subjectDid := record.Subject9393+ err = db.AddFollow(d, did, subjectDid, e.Commit.RKey)9494+ case models.CommitOperationDelete:9595+ err = db.DeleteFollowByRkey(d, did, e.Commit.RKey)9696+ }9797+9898+ if err != nil {9999+ return fmt.Errorf("failed to %s follow record: %w", e.Commit.Operation, err)100100+ }101101+102102+ return nil103103+}104104+105105+func ingestPublicKey(d *db.DbWrapper, e *models.Event) error {106106+ did := e.Did107107+ var err error108108+109109+ switch e.Commit.Operation {110110+ case models.CommitOperationCreate, models.CommitOperationUpdate:111111+ log.Println("processing add of pubkey")112112+ raw := json.RawMessage(e.Commit.Record)113113+ record := tangled.PublicKey{}114114+ err = json.Unmarshal(raw, &record)115115+ if err != nil {116116+ log.Printf("invalid record: %s", err)117117+ return err118118+ }119119+120120+ name := record.Name121121+ key := record.Key122122+ err = db.AddPublicKey(d, did, name, key, e.Commit.RKey)123123+ case models.CommitOperationDelete:124124+ log.Println("processing delete of pubkey")125125+ err = db.DeletePublicKeyByRkey(d, did, e.Commit.RKey)126126+ }127127+128128+ if err != nil {129129+ return fmt.Errorf("failed to %s pubkey record: %w", e.Commit.Operation, err)130130+ }131131+132132+ return nil133133+}
-70
appview/state/jetstream.go
···11-package state22-33-import (44- "context"55- "encoding/json"66- "fmt"77- "log"88-99- "github.com/bluesky-social/indigo/atproto/syntax"1010- "github.com/bluesky-social/jetstream/pkg/models"1111- tangled "tangled.sh/tangled.sh/core/api/tangled"1212- "tangled.sh/tangled.sh/core/appview/db"1313-)1414-1515-type Ingester func(ctx context.Context, e *models.Event) error1616-1717-func jetstreamIngester(d db.DbWrapper) Ingester {1818- return func(ctx context.Context, e *models.Event) error {1919- var err error2020- defer func() {2121- eventTime := e.TimeUS2222- lastTimeUs := eventTime + 12323- if err := d.SaveLastTimeUs(lastTimeUs); err != nil {2424- err = fmt.Errorf("(deferred) failed to save last time us: %w", err)2525- }2626- }()2727-2828- if e.Kind != models.EventKindCommit {2929- return nil3030- }3131-3232- did := e.Did3333- raw := json.RawMessage(e.Commit.Record)3434-3535- switch e.Commit.Collection {3636- case tangled.GraphFollowNSID:3737- record := tangled.GraphFollow{}3838- err := json.Unmarshal(raw, &record)3939- if err != nil {4040- log.Println("invalid record")4141- return err4242- }4343- err = db.AddFollow(d, did, record.Subject, e.Commit.RKey)4444- if err != nil {4545- return fmt.Errorf("failed to add follow to db: %w", err)4646- }4747- case tangled.FeedStarNSID:4848- record := tangled.FeedStar{}4949- err := json.Unmarshal(raw, &record)5050- if err != nil {5151- log.Println("invalid record")5252- return err5353- }5454-5555- subjectUri, err := syntax.ParseATURI(record.Subject)5656-5757- if err != nil {5858- log.Println("invalid record")5959- return err6060- }6161-6262- err = db.AddStar(d, did, subjectUri, e.Commit.RKey)6363- if err != nil {6464- return fmt.Errorf("failed to add follow to db: %w", err)6565- }6666- }6767-6868- return err6969- }7070-}