blib/lib/WebService/Mattermost/V4/API/Resource/Channel/Member.pm | |||
---|---|---|---|
Criterion | Covered | Total | % |
statement | 6 | 10 | 60.0 |
branch | n/a | ||
condition | n/a | ||
subroutine | 2 | 3 | 66.6 |
pod | 1 | 1 | 100.0 |
total | 9 | 14 | 64.2 |
line | stmt | bran | cond | sub | pod | time | code |
---|---|---|---|---|---|---|---|
1 | package WebService::Mattermost::V4::API::Resource::Channel::Member; 2: 3: # ABSTRACT: Wrapped API methods for the channel member API endpoints. 4: 5: use Moo; 6: use Types::Standard 'Str'; 7: 8: extends 'WebService::Mattermost::V4::API::Resource::Channel'; 9: with qw( 10: WebService::Mattermost::V4::API::Resource::Role::View::Channel::Member 11: ); 12: 13: ################################################################################ 14: 15: has channel_id => (is => 'rw', isa => Str); 16: has user_id => (is => 'rw', isa => Str); 17: 18: ################################################################################ 19: 20: around [ qw( 21: all 22: get 23: get_many 24: remove 25: set_notify_props 26: set_roles 27: set_scheme_roles 28: set_viewed 29: ) ] => sub { 30: my $orig = shift; 31: my $self = shift; 32: 33: my @args = ( 34: !$_[0] || ref $_[0] ? $self->channel_id : $_[0], 35: !$_[1] ? $self->user_id : $_[1], 36: ); 37: 38: if (ref $_[-1]) { 39: push @args, $_[-1]; 40: } else { 41: push @args, ref $_[0] ? $_[0] : {}; 42: } 43: 44: if (scalar @args != 3) { 45: return $self->error_return('Unexpected number of arguments provided'); 46: } 47: 48: return $self->$orig(@args); 49: }; 50: 51: 52: sub add { 53: my $self = shift; 54: my $id = shift; 55: my $args = shift; 56: 57: return $self->_single_view_post({ 58: endpoint => '%s/members', 59: ids => [ $id ], 60: parameters => $args, 61: required => [ 'user_id' ], 62: }); 63: } 64: 65: sub all { 66: my $self = shift; 67: my $id = shift; 68: 69: return $self->_get({ 70: endpoint => '%s/members', 71: ids => [ $id ], 72: }); 73: } 74: 75: sub get { 76: my $self = shift; 77: my $channel_id = shift; 78: my $user_id = shift; 79: 80: return $self->_single_view_get({ 81: endpoint => '%s/members/%s', 82: ids => [ $channel_id, $user_id ], 83: }); 84: } 85: 86: sub get_many { 87: my $self = shift; 88: my $channel_id = shift; 89: my $user_ids = shift; 90: 91: unless (ref $user_ids eq 'ARRAY') { 92: return $self->error_return('An ArrayRef of user IDs is required'); 93: } 94: 95: return $self->_post({ 96: endpoint => '%s/members/ids', 97: ids => [ $channel_id ], 98: parameters => $user_ids, 99: }); 100: } 101: 102: sub remove { 103: my $self = shift; 104: my $channel_id = shift; 105: my $user_id = shift; 106: 107: return $self->error_return('A user ID is required') unless $user_id; 108: return $self->_single_view_delete({ 109: endpoint => '%s/members/%s', 110: ids => [ $channel_id, $user_id ], 111: view => 'Status', 112: }); 113: } 114: 115: sub set_notify_props { 116: my $self = shift; 117: my $channel_id = shift; 118: my $user_id = shift; 119: my $args = shift; 120: 121: return $self->_single_view_put({ 122: endpoint => '%s/members/%s/notify_props', 123: ids => [ $channel_id, $user_id ], 124: parameters => $args, 125: view => 'Status', 126: }); 127: } 128: 129: sub set_roles { 130: my $self = shift; 131: my $channel_id = shift; 132: my $user_id = shift; 133: my $args = shift; 134: 135: return $self->_single_view_put({ 136: endpoint => '%s/members/%s/roles', 137: ids => [ $channel_id, $user_id ], 138: parameters => $args, 139: required => [ 'roles' ], 140: view => 'Status', 141: }); 142: } 143: 144: sub set_scheme_roles { 145: my $self = shift; 146: my $channel_id = shift; 147: my $user_id = shift; 148: my $args = shift; 149: 150: return $self->_single_view_put({ 151: endpoint => '%s/members/%s/schemeRoles', 152: ids => [ $channel_id, $user_id ], 153: parameters => $args, 154: required => [ qw(scheme_admin scheme_user) ], 155: view => 'Status', 156: }); 157: } 158: 159: sub set_viewed { 160: my $self = shift; 161: my $channel_id = shift; 162: my $user_id = shift; 163: my $args = shift; 164: 165: $args->{channel_id} = $channel_id; 166: 167: return $self->_single_view_post({ 168: endpoint => '%s/members/%s/view', 169: ids => [ $user_id, $channel_id ], 170: parameters => $args, 171: required => [ qw(channel_id) ], 172: view => 'Status', 173: }); 174: } 175: 176: ################################################################################ 177: 178: 1; 179: 180: __END__ 181: 182: =pod 183: 184: =encoding UTF-8 185: 186: =head1 NAME 187: 188: WebService::Mattermost::V4::API::Resource::Channel::Member - Wrapped API methods for the channel member API endpoints. 189: 190: =head1 VERSION 191: 192: version 0.28 193: 194: =head1 DESCRIPTION 195: 196: Channel member related API calls. 197: 198: =head2 USAGE 199: 200: my $mm = WebService::Mattermost->new({ 201: authenticate => 1, 202: username => 'me@somewhere.com', 203: password => 'hunter2', 204: base_url => 'https://my.mattermost.server.com/api/v4/', 205: }); 206: 207: my $resource = $mm->api->channel_member; 208: 209: Optionally, you can set global channel and user IDs, and not pass those arguments 210: to every method: 211: 212: $resource->channel_id('CHANNEL-ID-HERE'); 213: $resource->user_id('USER-ID-HERE'); 214: 215: This would make the C<get()> call look like: 216: 217: my $response = $resource->get(); 218: 219: And the C<add()> one look like: 220: 221: my $response = $resource->add({ 222: user_id => '...', 223: post_root_id => '...', 224: }); 225: 226: =head2 METHODS 227: 228: =over 4 229: 230: =item C<add()> 231: 232: L<Add user to channel|https://api.mattermost.com/#tag/channels%2Fpaths%2F~1channels~1%7Bchannel_id%7D~1members%2Fpost> 233: 234: my $response = $resource->add('CHANNEL-ID-HERE', { 235: # Required parameters: 236: user_id => '...', 237: 238: # Optional parameters: 239: post_root_id => '...', 240: }); 241: 242: =item C<all()> 243: 244: L<Get channel members|https://api.mattermost.com/#tag/channels%2Fpaths%2F~1channels~1%7Bchannel_id%7D~1members%2Fget> 245: 246: my $response = $resource->all('CHANNEL-ID-HERE'); 247: 248: =item C<get()> 249: 250: L<Get channel member|https://api.mattermost.com/#tag/channels%2Fpaths%2F~1channels~1%7Bchannel_id%7D~1members~1%7Buser_id%7D%2Fget> 251: 252: my $response = $resource->get('CHANNEL-ID-HERE', 'USER-ID-HERE'); 253: 254: =item C<get_many()> 255: 256: L<Get channel members by IDs|https://api.mattermost.com/#tag/channels%2Fpaths%2F~1channels~1%7Bchannel_id%7D~1members~1ids%2Fpost> 257: 258: =item C<remove()> 259: 260: L<Remove user from channel|https://api.mattermost.com/#tag/channels%2Fpaths%2F~1channels~1%7Bchannel_id%7D~1members~1%7Buser_id%7D%2Fdelete> 261: 262: my $response = $resource->remove('CHANNEL-ID-HERE', 'USER-ID-HERE'); 263: 264: =item C<set_notify_props()> 265: 266: L<Update channel notifications|https://api.mattermost.com/#tag/channels%2Fpaths%2F~1channels~1%7Bchannel_id%7D~1members~1%7Buser_id%7D~1notify_props%2Fput> 267: 268: my $response = $resource->set_notify_props('CHANNEL-ID-HERE', 'USER-ID-HERE', { 269: email => \1, # or \0 for false 270: push => \1, 271: desktop => \1, 272: mark_unread => \1, 273: }); 274: 275: =item C<set_roles()> 276: 277: L<Update channel roles|https://api.mattermost.com/#tag/channels%2Fpaths%2F~1channels~1%7Bchannel_id%7D~1members~1%7Buser_id%7D~1roles%2Fput> 278: 279: my $response = $resource->set_roles('CHANNEL-ID-HERE', 'USER-ID-HERE', { 280: # Required parameters: 281: roles => 'SPACE DELIMITED ROLES', 282: }); 283: 284: =item C<set_scheme_roles()> 285: 286: L<Update the scheme-derived roles of a channel member|https://api.mattermost.com/#tag/channels%2Fpaths%2F~1channels~1%7Bchannel_id%7D~1members~1%7Buser_id%7D~1schemeRoles%2Fput> 287: 288: my $response = $resource->set_scheme_roles('CHANNEL-ID-HERE', 'USER-ID-HERE', { 289: # Required parameters: 290: scheme_admin => \0, # false 291: scheme_user => \1, # or true 292: }); 293: 294: =item C<set_viewed()> 295: 296: L<View channel|https://api.mattermost.com/#tag/channels%2Fpaths%2F~1channels~1members~1%7Buser_id%7D~1view%2Fpost> 297: 298: my $response = $resource->set_viewed('CHANNEL-ID-HERE', 'USER-ID-HERE', { 299: # Optional parameters: 300: prev_channel_id => '...', 301: }); 302: 303: =back 304: 305: =head1 AUTHOR 306: 307: Mike Jones <mike@netsplit.org.uk> 308: 309: =head1 COPYRIGHT AND LICENSE 310: 311: This software is Copyright (c) 2020 by Mike Jones. 312: 313: This is free software, licensed under: 314: 315: The MIT (X11) License 316: 317: =cut 318: |