+4
-38
indexer/indexer.go
+4
-38
indexer/indexer.go
···
2
3
import (
4
"context"
5
-
"database/sql"
6
"errors"
7
"fmt"
8
"log/slog"
···
19
20
"go.opentelemetry.io/otel"
21
"gorm.io/gorm"
22
-
"gorm.io/gorm/clause"
23
)
24
25
const MaxEventSliceLength = 1000000
···
33
34
Crawler *CrawlDispatcher
35
36
-
doAggregations bool
37
-
doSpider bool
38
-
39
SendRemoteFollow func(context.Context, string, uint) error
40
CreateExternalUser func(context.Context, string) (*models.ActorInfo, error)
41
ApplyPDSClientSettings func(*xrpc.Client)
···
43
log *slog.Logger
44
}
45
46
-
func NewIndexer(db *gorm.DB, evtman *events.EventManager, didr did.Resolver, fetcher *RepoFetcher, crawl, aggregate, spider bool) (*Indexer, error) {
47
db.AutoMigrate(&models.FeedPost{})
48
db.AutoMigrate(&models.ActorInfo{})
49
db.AutoMigrate(&models.FollowRecord{})
···
51
db.AutoMigrate(&models.RepostRecord{})
52
53
ix := &Indexer{
54
-
db: db,
55
-
events: evtman,
56
-
didr: didr,
57
-
doAggregations: aggregate,
58
-
doSpider: spider,
59
SendRemoteFollow: func(context.Context, string, uint) error {
60
return nil
61
},
···
217
}
218
219
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
}
248
249
func isNotFound(err error) bool {
···
2
3
import (
4
"context"
5
"errors"
6
"fmt"
7
"log/slog"
···
18
19
"go.opentelemetry.io/otel"
20
"gorm.io/gorm"
21
)
22
23
const MaxEventSliceLength = 1000000
···
31
32
Crawler *CrawlDispatcher
33
34
SendRemoteFollow func(context.Context, string, uint) error
35
CreateExternalUser func(context.Context, string) (*models.ActorInfo, error)
36
ApplyPDSClientSettings func(*xrpc.Client)
···
38
log *slog.Logger
39
}
40
41
+
func NewIndexer(db *gorm.DB, evtman *events.EventManager, didr did.Resolver, fetcher *RepoFetcher, crawl bool) (*Indexer, error) {
42
db.AutoMigrate(&models.FeedPost{})
43
db.AutoMigrate(&models.ActorInfo{})
44
db.AutoMigrate(&models.FollowRecord{})
···
46
db.AutoMigrate(&models.RepostRecord{})
47
48
ix := &Indexer{
49
+
db: db,
50
+
events: evtman,
51
+
didr: didr,
52
SendRemoteFollow: func(context.Context, string, uint) error {
53
return nil
54
},
···
210
}
211
212
return &ai, nil
213
}
214
215
func isNotFound(err error) bool {
+1
-1
indexer/posts_test.go
+1
-1
indexer/posts_test.go