Add channel creation, subscription
This commit is contained in:
parent
def0cbb93a
commit
5292540d1d
9 changed files with 109 additions and 40 deletions
|
@ -89,18 +89,6 @@ sub create {
|
|||
my $response = $ua->request($request);
|
||||
|
||||
if ( $response->is_success ) {
|
||||
my $deviceToken =
|
||||
$c->schema->resultset('DeviceToken')->find( { 'token' => $token } );
|
||||
my $topic =
|
||||
$c->schema->resultset('Topic')->find( { 'name' => 'default' } );
|
||||
|
||||
$deviceToken->create_related(
|
||||
'device_subscriptions',
|
||||
{
|
||||
topic => $topic
|
||||
}
|
||||
);
|
||||
|
||||
return $c->render(
|
||||
json => {
|
||||
success => Mojo::JSON->true,
|
||||
|
|
|
@ -6,12 +6,21 @@ use JSON::Parse 'parse_json';
|
|||
use Mojo::JWT;
|
||||
use Mojo::File;
|
||||
use Carp;
|
||||
use Data::Dumper;
|
||||
|
||||
has error_messages => sub {
|
||||
return {
|
||||
topic => {
|
||||
required => { message => 'Topic is required', status => 400 },
|
||||
not_in_resultset => { message => 'Topic already exists', status => 400 },
|
||||
},
|
||||
token => {
|
||||
required => { message => 'Device token is required', status => 400 },
|
||||
in_resultset => { message => 'Device token doesn\'t exist', status => 400 },
|
||||
},
|
||||
topicSubscriptions => {
|
||||
required => { message => 'Set of topic subscriptions is required', status => 400 },
|
||||
in_resultset => { message => 'Topic doesn\'t exist', status => 400 },
|
||||
}
|
||||
};
|
||||
};
|
||||
|
@ -62,7 +71,7 @@ sub get_all {
|
|||
id => $_->id,
|
||||
name => $_->name,
|
||||
numberOfSubscribers =>
|
||||
$_->search_related( 'device_subscriptions',
|
||||
$_->search_related( 'user_topic_subscriptions',
|
||||
{ 'topic_id' => $_->id } )->count,
|
||||
}
|
||||
} $topic_rs->all
|
||||
|
@ -75,4 +84,73 @@ sub get_all {
|
|||
}
|
||||
);
|
||||
}
|
||||
|
||||
sub get_all_and_subscriptions {
|
||||
my $c = shift;
|
||||
|
||||
my $user = $c->stash->{api_user};
|
||||
|
||||
my $validation = $c->validation;
|
||||
$validation->input( $c->stash->{api_json} );
|
||||
my $topic_rs = $c->schema->resultset('Topic');
|
||||
|
||||
my @topics = (
|
||||
map {
|
||||
{
|
||||
id => $_->id,
|
||||
name => $_->name,
|
||||
isSubscribed => $_->search_related( 'user_topic_subscriptions',
|
||||
{ 'topic_id' => $_->id, 'user_id' => $user->id })->count
|
||||
}
|
||||
} $topic_rs->all
|
||||
);
|
||||
|
||||
return $c->render(
|
||||
json => {
|
||||
success => Mojo::JSON->true,
|
||||
topics => \@topics,
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
sub update_subscriptions {
|
||||
my $c = shift;
|
||||
|
||||
my $user = $c->stash->{api_user};
|
||||
my $topic_rs = $c->schema->resultset('Topic');
|
||||
|
||||
my $validation = $c->validation;
|
||||
$validation->input( $c->stash->{api_json} );
|
||||
$validation->required('topicSubscriptions');
|
||||
|
||||
foreach my $sub ( @{ $validation->every_param('topicSubscriptions') } ) {
|
||||
my $subscription = $user->find_related( 'user_topic_subscriptions',
|
||||
{ 'topic_id' => $sub->{id} }
|
||||
);
|
||||
|
||||
if ( $sub->{isSubscribed} && !$subscription ) {
|
||||
$user->create_related(
|
||||
'user_topic_subscriptions',
|
||||
{
|
||||
topic_id => $sub->{id},
|
||||
}
|
||||
);
|
||||
} elsif ( !$sub->{isSubscribed} && $subscription ) {
|
||||
$user->delete_related(
|
||||
'user_topic_subscriptions',
|
||||
{
|
||||
topic_id => $sub->{id},
|
||||
}
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
return $c->render(
|
||||
json => {
|
||||
success => Mojo::JSON->true,
|
||||
message => 'Topic subscriptions updated successfully!',
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
1;
|
||||
|
|
Reference in a new issue