Add channel creation, subscription

This commit is contained in:
Rumperuu 2021-03-25 13:54:04 +00:00
parent def0cbb93a
commit 5292540d1d
9 changed files with 109 additions and 40 deletions

View file

@ -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,

View file

@ -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;