Skip to content
Snippets Groups Projects
Meets.pm 6.67 KiB
package SeMeet::Controller::Meets;
use Mojo::Base 'Mojolicious::Controller', -signatures;

use UUID::URandom qw(create_uuid_string);
use Mojo::JWT;

use constant AVATAR_SIZE          => 320;
use constant JITSI_TOKEN_LIFETIME => 3600 * 24;

sub create($c) {
    $c->openapi->valid_input or return;
    my $args = $c->req->json;

    return $c->error(403, 'Access denied') if ! $c->stash->{permissions}{create};

    my $exists = $c->schema->resultset('Meet')->count({
        deleted => undef,
        name    => $args->{name},
    });

    return $c->error(400, 'DUPLICTE_NAME') if $exists;

    my $guard  = $c->schema->txn_scope_guard;

        my $meet = $c->schema->resultset('Meet')->create({
            uuid     => create_uuid_string(),
            owner_id => $c->stash->{user}->id,
            name     => $args->{name},
        });

    $guard->commit;

    $c->trace(\'User %s create meet "%s" with id %d',
        $c->stash->{user}->username,
        $meet->name,
        $meet->id,
    );

    $c->render(
        status  => 201,
        openapi => { id => $meet->id },
    );
}

sub get($c) {
    $c->openapi->valid_input or return;
    my $args = $c->req->json;

    my $meet = $c->_get($c->stash->{id}, 0) // return;

    my $users   = { 0 => [], 1 => [] };
    my @invites = ();

    USER:
    foreach my $user ( $meet->users ) {
        push @{ $users->{ $user->is_moderator} }, {
             id   => $user->id,
             name => $user->user_name,
        }
    }

    INVITE:
    foreach my $invite ( $meet->invites ) {
        push @invites, {
             id          => $invite->id,
             token       => $invite->token,
             displayname => $invite->displayname,
        }
    }