appview: invalidate cached identity on receiving identity / account deactivation events from the jetstream #268

merged
opened by ptr.pet targeting master from ptr.pet/core: master
Changed files
+35 -20
appview
+9
appview/idresolver/resolver.go
···
wg.Wait()
return results
}
+
+
func (r *Resolver) InvalidateIdent(ctx context.Context, arg string) error {
+
id, err := syntax.ParseAtIdentifier(arg)
+
if err != nil {
+
return err
+
}
+
+
return r.directory.Purge(ctx, *id)
+
}
+26 -20
appview/ingester.go
···
}
}()
-
if e.Kind != models.EventKindCommit {
-
return nil
-
}
-
-
switch e.Commit.Collection {
-
case tangled.GraphFollowNSID:
-
err = i.ingestFollow(e)
-
case tangled.FeedStarNSID:
-
err = i.ingestStar(e)
-
case tangled.PublicKeyNSID:
-
err = i.ingestPublicKey(e)
-
case tangled.RepoArtifactNSID:
-
err = i.ingestArtifact(e)
-
case tangled.ActorProfileNSID:
-
err = i.ingestProfile(e)
-
case tangled.SpindleMemberNSID:
-
err = i.ingestSpindleMember(e)
-
case tangled.SpindleNSID:
-
err = i.ingestSpindle(e)
+
l := i.Logger.With("kind", e.Kind)
+
switch e.Kind {
+
case models.EventKindAccount:
+
if !e.Account.Active {
+
err = i.IdResolver.InvalidateIdent(ctx, e.Account.Did)
+
}
+
case models.EventKindIdentity:
+
err = i.IdResolver.InvalidateIdent(ctx, e.Identity.Did)
+
case models.EventKindCommit:
+
switch e.Commit.Collection {
+
case tangled.GraphFollowNSID:
+
err = i.ingestFollow(e)
+
case tangled.FeedStarNSID:
+
err = i.ingestStar(e)
+
case tangled.PublicKeyNSID:
+
err = i.ingestPublicKey(e)
+
case tangled.RepoArtifactNSID:
+
err = i.ingestArtifact(e)
+
case tangled.ActorProfileNSID:
+
err = i.ingestProfile(e)
+
case tangled.SpindleMemberNSID:
+
err = i.ingestSpindleMember(e)
+
case tangled.SpindleNSID:
+
err = i.ingestSpindle(e)
+
}
+
l = i.Logger.With("nsid", e.Commit.Collection)
}
if err != nil {
-
l := i.Logger.With("nsid", e.Commit.Collection)
l.Error("error ingesting record", "err", err)
}