forked from tangled.org/core
Monorepo for Tangled

appview/ingester: simplify ingesters

- create/updates are unified because db handles upserts
- use new DB APIs that support db.Filter

Signed-off-by: oppiliappan <me@oppi.li>

oppi.li 9a9c2d44 32dbd785

verified
Changed files
+19 -53
appview
+19 -53
appview/ingester.go
··· 6 6 "fmt" 7 7 "log/slog" 8 8 "strings" 9 + 9 10 "time" 10 11 11 12 "github.com/bluesky-social/indigo/atproto/syntax" ··· 790 791 } 791 792 792 793 switch e.Commit.Operation { 793 - case models.CommitOperationCreate: 794 + case models.CommitOperationCreate, models.CommitOperationUpdate: 794 795 raw := json.RawMessage(e.Commit.Record) 795 796 record := tangled.RepoIssue{} 796 797 err = json.Unmarshal(raw, &record) ··· 814 815 l.Error("failed to begin transaction", "err", err) 815 816 return err 816 817 } 818 + defer tx.Rollback() 817 819 818 820 err = db.NewIssue(tx, &issue) 819 821 if err != nil { ··· 821 823 return err 822 824 } 823 825 824 - return nil 825 - 826 - case models.CommitOperationUpdate: 827 - raw := json.RawMessage(e.Commit.Record) 828 - record := tangled.RepoIssue{} 829 - err = json.Unmarshal(raw, &record) 830 - if err != nil { 831 - l.Error("invalid record", "err", err) 832 - return err 833 - } 834 - 835 - body := "" 836 - if record.Body != nil { 837 - body = *record.Body 838 - } 839 - 840 - sanitizer := markup.NewSanitizer() 841 - if st := strings.TrimSpace(sanitizer.SanitizeDescription(record.Title)); st == "" { 842 - return fmt.Errorf("title is empty after HTML sanitization") 843 - } 844 - if sb := strings.TrimSpace(sanitizer.SanitizeDefault(body)); sb == "" { 845 - return fmt.Errorf("body is empty after HTML sanitization") 846 - } 847 - 848 - err = db.UpdateIssueByRkey(ddb, did, rkey, record.Title, body) 826 + err = tx.Commit() 849 827 if err != nil { 850 - l.Error("failed to update issue", "err", err) 828 + l.Error("failed to commit txn", "err", err) 851 829 return err 852 830 } 853 831 854 832 return nil 855 833 856 834 case models.CommitOperationDelete: 857 - if err := db.DeleteIssueByRkey(ddb, did, rkey); err != nil { 835 + if err := db.DeleteIssues( 836 + ddb, 837 + db.FilterEq("did", did), 838 + db.FilterEq("rkey", rkey), 839 + ); err != nil { 858 840 l.Error("failed to delete", "err", err) 859 841 return fmt.Errorf("failed to delete issue record: %w", err) 860 842 } ··· 862 844 return nil 863 845 } 864 846 865 - return fmt.Errorf("unknown operation: %s", e.Commit.Operation) 847 + return nil 866 848 } 867 849 868 850 func (i *Ingester) ingestIssueComment(e *models.Event) error { ··· 880 862 } 881 863 882 864 switch e.Commit.Operation { 883 - case models.CommitOperationCreate: 865 + case models.CommitOperationCreate, models.CommitOperationUpdate: 884 866 raw := json.RawMessage(e.Commit.Record) 885 867 record := tangled.RepoIssueComment{} 886 868 err = json.Unmarshal(raw, &record) ··· 898 880 return fmt.Errorf("body is empty after HTML sanitization") 899 881 } 900 882 901 - err = db.NewIssueComment(ddb, &comment) 883 + _, err = db.AddIssueComment(ddb, *comment) 902 884 if err != nil { 903 885 return fmt.Errorf("failed to create issue comment: %w", err) 904 886 } 905 887 906 888 return nil 907 889 908 - case models.CommitOperationUpdate: 909 - raw := json.RawMessage(e.Commit.Record) 910 - record := tangled.RepoIssueComment{} 911 - err = json.Unmarshal(raw, &record) 912 - if err != nil { 913 - return fmt.Errorf("invalid record: %w", err) 914 - } 915 - 916 - sanitizer := markup.NewSanitizer() 917 - if sb := strings.TrimSpace(sanitizer.SanitizeDefault(record.Body)); sb == "" { 918 - return fmt.Errorf("body is empty after HTML sanitization") 919 - } 920 - 921 - err = db.UpdateCommentByRkey(ddb, did, rkey, record.Body) 922 - if err != nil { 923 - return fmt.Errorf("failed to update issue comment: %w", err) 924 - } 925 - 926 - return nil 927 - 928 890 case models.CommitOperationDelete: 929 - if err := db.DeleteCommentByRkey(ddb, did, rkey); err != nil { 891 + if err := db.DeleteIssueComments( 892 + ddb, 893 + db.FilterEq("did", did), 894 + db.FilterEq("rkey", rkey), 895 + ); err != nil { 930 896 return fmt.Errorf("failed to delete issue comment record: %w", err) 931 897 } 932 898 933 899 return nil 934 900 } 935 901 936 - return fmt.Errorf("unknown operation: %s", e.Commit.Operation) 902 + return nil 937 903 }