Skip to content

Commit 60b5fab

Browse files
feat: added support for archiving / unarchiving channels
1 parent fcfd18b commit 60b5fab

File tree

2 files changed

+105
-0
lines changed

2 files changed

+105
-0
lines changed

channel.go

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -898,3 +898,39 @@ func (ch *Channel) Unpin(ctx context.Context, userID string) (*ChannelMemberResp
898898
err := ch.client.makeRequest(ctx, http.MethodPatch, p, nil, data, resp)
899899
return resp, err
900900
}
901+
902+
func (ch *Channel) Archive(ctx context.Context, userID string) (*ChannelMemberResponse, error) {
903+
if userID == "" {
904+
return nil, errors.New("user ID must be not empty")
905+
}
906+
907+
p := path.Join("channels", url.PathEscape(ch.Type), url.PathEscape(ch.ID), "member", url.PathEscape(userID))
908+
909+
data := map[string]interface{}{
910+
"set": map[string]interface{}{
911+
"archived": true,
912+
},
913+
}
914+
915+
resp := &ChannelMemberResponse{}
916+
err := ch.client.makeRequest(ctx, http.MethodPatch, p, nil, data, resp)
917+
return resp, err
918+
}
919+
920+
func (ch *Channel) Unarchive(ctx context.Context, userID string) (*ChannelMemberResponse, error) {
921+
if userID == "" {
922+
return nil, errors.New("user ID must be not empty")
923+
}
924+
925+
p := path.Join("channels", url.PathEscape(ch.Type), url.PathEscape(ch.ID), "member", url.PathEscape(userID))
926+
927+
data := map[string]interface{}{
928+
"set": map[string]interface{}{
929+
"archived": false,
930+
},
931+
}
932+
933+
resp := &ChannelMemberResponse{}
934+
err := ch.client.makeRequest(ctx, http.MethodPatch, p, nil, data, resp)
935+
return resp, err
936+
}

channel_test.go

Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -679,6 +679,75 @@ func TestChannel_Pin(t *testing.T) {
679679
require.NoError(t, err, "query pinned channel")
680680
require.Len(t, channels, 1)
681681
require.Equal(t, channels[0].CID, ch.CID)
682+
683+
member, err = ch.Unpin(ctx, users[0].ID)
684+
require.NoError(t, err, "unpin channel")
685+
require.Nil(t, member.ChannelMember.PinnedAt)
686+
687+
// query for pinned the channel
688+
queryChannResp, err = c.QueryChannels(ctx, &QueryOption{
689+
UserID: users[0].ID,
690+
Filter: map[string]interface{}{
691+
"pinned": false,
692+
"cid": ch.CID,
693+
},
694+
})
695+
696+
channels = queryChannResp.Channels
697+
require.NoError(t, err, "query pinned channel")
698+
require.Len(t, channels, 1)
699+
require.Equal(t, channels[0].CID, ch.CID)
700+
}
701+
702+
func TestChannel_Archive(t *testing.T) {
703+
c := initClient(t)
704+
ctx := context.Background()
705+
users := randomUsers(t, c, 5)
706+
707+
members := make([]string, 0, len(users))
708+
for i := range users {
709+
members = append(members, users[i].ID)
710+
}
711+
ch := initChannel(t, c, members...)
712+
713+
//pin the channel
714+
now := time.Now()
715+
member, err := ch.Archive(ctx, users[0].ID)
716+
require.NoError(t, err, "archive channel")
717+
require.NotNil(t, member.ChannelMember.ArchivedAt)
718+
require.GreaterOrEqual(t, member.ChannelMember.ArchivedAt.Unix(), now.Unix())
719+
720+
// query for pinned the channel
721+
queryChannResp, err := c.QueryChannels(ctx, &QueryOption{
722+
UserID: users[0].ID,
723+
Filter: map[string]interface{}{
724+
"archived": true,
725+
"cid": ch.CID,
726+
},
727+
})
728+
729+
channels := queryChannResp.Channels
730+
require.NoError(t, err, "query archived channel")
731+
require.Len(t, channels, 1)
732+
require.Equal(t, channels[0].CID, ch.CID)
733+
734+
member, err = ch.Unarchive(ctx, users[0].ID)
735+
require.NoError(t, err, "unarchive channel")
736+
require.Nil(t, member.ChannelMember.ArchivedAt)
737+
738+
// query for pinned the channel
739+
queryChannResp, err = c.QueryChannels(ctx, &QueryOption{
740+
UserID: users[0].ID,
741+
Filter: map[string]interface{}{
742+
"archived": false,
743+
"cid": ch.CID,
744+
},
745+
})
746+
747+
channels = queryChannResp.Channels
748+
require.NoError(t, err, "query archived channel")
749+
require.Len(t, channels, 1)
750+
require.Equal(t, channels[0].CID, ch.CID)
682751
}
683752

684753
func ExampleChannel_Update() {

0 commit comments

Comments
 (0)