Signed-off-by: oppiliappan me@oppi.li
+35
appview/db/language.go
+35
appview/db/language.go
···
1
package db
2
3
import (
4
+
"database/sql"
5
"fmt"
6
"strings"
7
8
+
"github.com/bluesky-social/indigo/atproto/syntax"
9
+
"tangled.org/core/appview/db"
10
"tangled.org/core/appview/models"
11
)
12
···
85
86
return nil
87
}
88
+
89
+
func DeleteRepoLanguages(e Execer, filters ...filter) error {
90
+
var conditions []string
91
+
var args []any
92
+
for _, filter := range filters {
93
+
conditions = append(conditions, filter.Condition())
94
+
args = append(args, filter.Arg()...)
95
+
}
96
+
97
+
whereClause := ""
98
+
if conditions != nil {
99
+
whereClause = " where " + strings.Join(conditions, " and ")
100
+
}
101
+
102
+
query := fmt.Sprintf(`delete from repo_languages %s`, whereClause)
103
+
104
+
_, err := e.Exec(query, args...)
105
+
return err
106
+
}
107
+
108
+
func UpdateRepoLanguages(tx *sql.Tx, repoAt syntax.ATURI, ref string, langs []models.RepoLanguage) error {
109
+
err := DeleteRepoLanguages(
110
+
tx,
111
+
FilterEq("repo_at", repoAt),
112
+
FilterEq("ref", ref),
113
+
)
114
+
if err != nil {
115
+
return fmt.Errorf("failed to delete existing languages: %w", err)
116
+
}
117
+
118
+
return InsertRepoLanguages(tx, langs)
119
+
}
+12
-1
appview/repo/index.go
+12
-1
appview/repo/index.go
···
200
})
201
}
202
203
+
tx, err := rp.db.Begin()
204
+
if err != nil {
205
+
return nil, err
206
+
}
207
+
defer tx.Rollback()
208
+
209
// update appview's cache
210
+
err = db.UpdateRepoLanguages(tx, f.RepoAt(), currentRef, langs)
211
if err != nil {
212
// non-fatal
213
log.Println("failed to cache lang results", err)
214
}
215
+
216
+
err = tx.Commit()
217
+
if err != nil {
218
+
return nil, err
219
+
}
220
}
221
222
var total int64
+16
appview/state/knotstream.go
+16
appview/state/knotstream.go
···
172
})
173
}
174
175
+
tx, err := d.Begin()
176
+
if err != nil {
177
+
return err
178
+
}
179
+
defer tx.Rollback()
180
+
181
+
// update appview's cache
182
+
err = db.UpdateRepoLanguages(tx, repo.RepoAt(), ref.Short(), langs)
183
+
if err != nil {
184
+
// non-fatal
185
+
}
186
+
187
+
err = tx.Commit()
188
+
if err != nil {
189
+
return err
190
+
}
191
return db.InsertRepoLanguages(d, langs)
192
}
193