From 79b4b700735a827a42b39b2ecba046a755b3afe9 Mon Sep 17 00:00:00 2001 From: dusk Date: Thu, 10 Jul 2025 19:30:35 +0300 Subject: [PATCH] appview: invalidate cached identity on receiving identity / account deactivation events from the jetstream --- appview/idresolver/resolver.go | 9 +++++++ appview/ingester.go | 46 +++++++++++++++++++--------------- 2 files changed, 35 insertions(+), 20 deletions(-) diff --git a/appview/idresolver/resolver.go b/appview/idresolver/resolver.go index c7d2fc6..5e15ebe 100644 --- a/appview/idresolver/resolver.go +++ b/appview/idresolver/resolver.go @@ -102,3 +102,12 @@ func (r *Resolver) ResolveIdents(ctx context.Context, idents []string) []*identi 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) +} diff --git a/appview/ingester.go b/appview/ingester.go index ca797a4..0e0ea85 100644 --- a/appview/ingester.go +++ b/appview/ingester.go @@ -40,29 +40,35 @@ func (i *Ingester) Ingest() processFunc { } }() - 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) } -- 2.43.0 From a51238e4a6999929c3371751203d05ab40b1c223 Mon Sep 17 00:00:00 2001 From: dusk Date: Thu, 10 Jul 2025 19:57:15 +0300 Subject: [PATCH] appview/ingester: invalidate identity only if the account was deactivated on an account event --- appview/ingester.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/appview/ingester.go b/appview/ingester.go index 0e0ea85..a1f77ee 100644 --- a/appview/ingester.go +++ b/appview/ingester.go @@ -43,7 +43,7 @@ func (i *Ingester) Ingest() processFunc { l := i.Logger.With("kind", e.Kind) switch e.Kind { case models.EventKindAccount: - if !e.Account.Active { + if !e.Account.Active && *e.Account.Status == "deactivated" { err = i.IdResolver.InvalidateIdent(ctx, e.Account.Did) } case models.EventKindIdentity: -- 2.43.0