fix(rpc): sync preserve complete username projections
This commit is contained in:
parent
464d4edb4a
commit
ee74d941bb
10 changed files with 411 additions and 22 deletions
|
|
@ -217,6 +217,17 @@ func (r *Router) tgUpdatesDifference(ctx context.Context, viewerUserID int64, di
|
|||
return out
|
||||
}
|
||||
|
||||
func (r *Router) tgChannelDifference(ctx context.Context, viewerUserID int64, diff domain.ChannelDifference) tg.UpdatesChannelDifferenceClass {
|
||||
out := tgChannelDifference(viewerUserID, diff)
|
||||
switch v := out.(type) {
|
||||
case *tg.UpdatesChannelDifference:
|
||||
r.applyPeerReadModels(ctx, viewerUserID, v.Users, v.Chats)
|
||||
case *tg.UpdatesChannelDifferenceTooLong:
|
||||
r.applyPeerReadModels(ctx, viewerUserID, v.Users, v.Chats)
|
||||
}
|
||||
return out
|
||||
}
|
||||
|
||||
func (r *Router) withStoryUpdatePeerObjects(ctx context.Context, viewerUserID int64, updates *tg.Updates, peers ...domain.Peer) *tg.Updates {
|
||||
if updates == nil {
|
||||
return nil
|
||||
|
|
@ -232,6 +243,28 @@ func (r *Router) withStoryUpdatePeerObjects(ctx context.Context, viewerUserID in
|
|||
return updates
|
||||
}
|
||||
|
||||
// withStoryUpdatePeerObjectsForOutbox keeps the viewer-specific story overlay
|
||||
// local to one update while deferring viewer-independent username projection to
|
||||
// BuildOutboxUpdates' claim-wide pass. This avoids turning story events into an
|
||||
// extra username-registry query per event before the final batch projection.
|
||||
func (r *Router) withStoryUpdatePeerObjectsForOutbox(ctx context.Context, viewerUserID int64, updates *tg.Updates, peers ...domain.Peer) *tg.Updates {
|
||||
if updates == nil {
|
||||
return nil
|
||||
}
|
||||
users, channels := r.storyPeerObjects(ctx, viewerUserID, peers)
|
||||
if len(users) > 0 {
|
||||
projected := tgUsersForViewer(viewerUserID, r.withUsersPresence(users))
|
||||
updates.Users = appendUniqueTGUsers(updates.Users, projected...)
|
||||
}
|
||||
if len(channels) > 0 {
|
||||
updates.Chats = appendUniqueTGChats(updates.Chats, tgChannels(viewerUserID, channels)...)
|
||||
}
|
||||
r.withBotProfileFlagsForUsers(ctx, updates.Users)
|
||||
r.applyStoryMaxIDsToPeerObjects(ctx, viewerUserID, updates.Users, updates.Chats)
|
||||
r.applyBotVerificationIconsToPeerObjects(ctx, updates.Users, updates.Chats)
|
||||
return updates
|
||||
}
|
||||
|
||||
func (r *Router) withStoryListPeerObjects(ctx context.Context, viewerUserID int64, list domain.StoryList) domain.StoryList {
|
||||
users, channels := r.storyPeerObjects(ctx, viewerUserID, storyListOwnerPeers(list))
|
||||
if len(users) > 0 {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue