+4
-38
indexer/indexer.go
+4
-38
indexer/indexer.go
···
2
2
3
3
import (
4
4
"context"
5
-
"database/sql"
6
5
"errors"
7
6
"fmt"
8
7
"log/slog"
···
19
18
20
19
"go.opentelemetry.io/otel"
21
20
"gorm.io/gorm"
22
-
"gorm.io/gorm/clause"
23
21
)
24
22
25
23
const MaxEventSliceLength = 1000000
···
33
31
34
32
Crawler *CrawlDispatcher
35
33
36
-
doAggregations bool
37
-
doSpider bool
38
-
39
34
SendRemoteFollow func(context.Context, string, uint) error
40
35
CreateExternalUser func(context.Context, string) (*models.ActorInfo, error)
41
36
ApplyPDSClientSettings func(*xrpc.Client)
···
43
38
log *slog.Logger
44
39
}
45
40
46
-
func NewIndexer(db *gorm.DB, evtman *events.EventManager, didr did.Resolver, fetcher *RepoFetcher, crawl, aggregate, spider bool) (*Indexer, error) {
41
+
func NewIndexer(db *gorm.DB, evtman *events.EventManager, didr did.Resolver, fetcher *RepoFetcher, crawl bool) (*Indexer, error) {
47
42
db.AutoMigrate(&models.FeedPost{})
48
43
db.AutoMigrate(&models.ActorInfo{})
49
44
db.AutoMigrate(&models.FollowRecord{})
···
51
46
db.AutoMigrate(&models.RepostRecord{})
52
47
53
48
ix := &Indexer{
54
-
db: db,
55
-
events: evtman,
56
-
didr: didr,
57
-
doAggregations: aggregate,
58
-
doSpider: spider,
49
+
db: db,
50
+
events: evtman,
51
+
didr: didr,
59
52
SendRemoteFollow: func(context.Context, string, uint) error {
60
53
return nil
61
54
},
···
217
210
}
218
211
219
212
return &ai, nil
220
-
}
221
-
222
-
func (ix *Indexer) handleInitActor(ctx context.Context, evt *repomgr.RepoEvent, op *repomgr.RepoOp) error {
223
-
ai := op.ActorInfo
224
-
225
-
if err := ix.db.Clauses(clause.OnConflict{
226
-
Columns: []clause.Column{{Name: "uid"}},
227
-
UpdateAll: true,
228
-
}).Create(&models.ActorInfo{
229
-
Uid: evt.User,
230
-
Handle: sql.NullString{String: ai.Handle, Valid: true},
231
-
Did: ai.Did,
232
-
DisplayName: ai.DisplayName,
233
-
Type: ai.Type,
234
-
PDS: evt.PDS,
235
-
}).Error; err != nil {
236
-
return fmt.Errorf("initializing new actor info: %w", err)
237
-
}
238
-
239
-
if err := ix.db.Create(&models.FollowRecord{
240
-
Follower: evt.User,
241
-
Target: evt.User,
242
-
}).Error; err != nil {
243
-
return err
244
-
}
245
-
246
-
return nil
247
213
}
248
214
249
215
func isNotFound(err error) bool {