Monorepo for Tangled tangled.org
5

Configure Feed

Select the types of activity you want to include in your feed.

at icy/kxpzqo 1.4 kB View raw
1package db 2 3import ( 4 "database/sql" 5 "fmt" 6 "strings" 7 8 "github.com/bluesky-social/indigo/atproto/syntax" 9 "tangled.org/core/appview/models" 10 "tangled.org/core/orm" 11) 12 13func InsertRepoLanguages(e Execer, langs []models.RepoLanguage) error { 14 stmt, err := e.Prepare( 15 "insert or replace into repo_languages (repo_did, ref, is_default_ref, language, bytes) values (?, ?, ?, ?, ?)", 16 ) 17 if err != nil { 18 return err 19 } 20 21 for _, l := range langs { 22 isDefaultRef := 0 23 if l.IsDefaultRef { 24 isDefaultRef = 1 25 } 26 27 _, err := stmt.Exec(l.RepoDid, l.Ref, isDefaultRef, l.Language, l.Bytes) 28 if err != nil { 29 return err 30 } 31 } 32 33 return nil 34} 35 36func DeleteRepoLanguages(e Execer, filters ...orm.Filter) error { 37 var conditions []string 38 var args []any 39 for _, filter := range filters { 40 conditions = append(conditions, filter.Condition()) 41 args = append(args, filter.Arg()...) 42 } 43 44 whereClause := "" 45 if conditions != nil { 46 whereClause = " where " + strings.Join(conditions, " and ") 47 } 48 49 query := fmt.Sprintf(`delete from repo_languages %s`, whereClause) 50 51 _, err := e.Exec(query, args...) 52 return err 53} 54 55func UpdateRepoLanguages(tx *sql.Tx, repoDid syntax.DID, ref string, langs []models.RepoLanguage) error { 56 err := DeleteRepoLanguages( 57 tx, 58 orm.FilterEq("repo_did", repoDid), 59 orm.FilterEq("ref", ref), 60 ) 61 if err != nil { 62 return fmt.Errorf("failed to delete existing languages: %w", err) 63 } 64 65 return InsertRepoLanguages(tx, langs) 66}