forked from
tangled.org/core
fork
Configure Feed
Select the types of activity you want to include in your feed.
this repo has no description
fork
Configure Feed
Select the types of activity you want to include in your feed.
1package db
2
3import (
4 "fmt"
5 "strings"
6
7 "github.com/bluesky-social/indigo/atproto/syntax"
8)
9
10type RepoLanguage struct {
11 Id int64
12 RepoAt syntax.ATURI
13 Ref string
14 IsDefaultRef bool
15 Language string
16 Bytes int64
17}
18
19func GetRepoLanguages(e Execer, filters ...filter) ([]RepoLanguage, error) {
20 var conditions []string
21 var args []any
22 for _, filter := range filters {
23 conditions = append(conditions, filter.Condition())
24 args = append(args, filter.Arg()...)
25 }
26
27 whereClause := ""
28 if conditions != nil {
29 whereClause = " where " + strings.Join(conditions, " and ")
30 }
31
32 query := fmt.Sprintf(
33 `select id, repo_at, ref, is_default_ref, language, bytes from repo_languages %s`,
34 whereClause,
35 )
36 rows, err := e.Query(query, args...)
37
38 if err != nil {
39 return nil, fmt.Errorf("failed to execute query: %w ", err)
40 }
41
42 var langs []RepoLanguage
43 for rows.Next() {
44 var rl RepoLanguage
45 var isDefaultRef int
46
47 err := rows.Scan(
48 &rl.Id,
49 &rl.RepoAt,
50 &rl.Ref,
51 &isDefaultRef,
52 &rl.Language,
53 &rl.Bytes,
54 )
55 if err != nil {
56 return nil, fmt.Errorf("failed to scan: %w ", err)
57 }
58
59 if isDefaultRef != 0 {
60 rl.IsDefaultRef = true
61 }
62
63 langs = append(langs, rl)
64 }
65 if err = rows.Err(); err != nil {
66 return nil, fmt.Errorf("failed to scan rows: %w ", err)
67 }
68
69 return langs, nil
70}
71
72func InsertRepoLanguages(e Execer, langs []RepoLanguage) error {
73 stmt, err := e.Prepare(
74 "insert or replace into repo_languages (repo_at, ref, is_default_ref, language, bytes) values (?, ?, ?, ?, ?)",
75 )
76 if err != nil {
77 return err
78 }
79
80 for _, l := range langs {
81 isDefaultRef := 0
82 if l.IsDefaultRef {
83 isDefaultRef = 1
84 }
85
86 _, err := stmt.Exec(l.RepoAt, l.Ref, isDefaultRef, l.Language, l.Bytes)
87 if err != nil {
88 return err
89 }
90 }
91
92 return nil
93}