Compare commits

..

2 commits

Author SHA1 Message Date
6af4576fed Merge branch 'fix/channel-getparticipant-left-member'
Some checks are pending
CI / Go tests (push) Waiting to run
CI / Admin web build (push) Waiting to run
CI / Grammy store bot (push) Waiting to run
CI / Docker main topology smoke (push) Waiting to run
2026-09-16 14:35:19 +01:00
61908d1ac2 channels: fix getParticipant returning success for a left/kicked member
GetParticipant only converted a stale "left" row into USER_NOT_PARTICIPANT
when the participant being queried was the viewer themselves. Querying
about a different user who previously left/was kicked returned their stale
row as a successful result instead, which a client can't classify as a
proper participant type. Check the status regardless of who's asking.
2026-09-16 14:35:15 +01:00

View file

@ -184,7 +184,12 @@ func (s *ChannelStore) GetParticipant(ctx context.Context, viewerUserID, channel
if errors.Is(err, domain.ErrChannelPrivate) {
return domain.ChannelMember{}, domain.ErrUserNotParticipant
}
if err == nil && participantUserID == viewerUserID && member.Status == domain.ChannelMemberLeft {
// A stale row for a former member (left/kicked) is not a current
// participant for any caller, not just a self-check: channels.getParticipant
// on someone who has left must surface USER_NOT_PARTICIPANT like a missing
// row does, or callers get a "successful" ChannelParticipantLeft result for
// what protocol-wise is an absent participant.
if err == nil && member.Status != domain.ChannelMemberActive {
return domain.ChannelMember{}, domain.ErrUserNotParticipant
}
return member, err