Skip to content
Snippets Groups Projects
Users.pm 2.53 KiB
package CF::Controller::Users;

use Mojo::Base 'Mojolicious::Controller';
use Mojo::Pg::PubSub;
use feature 'signatures';
no warnings qw{ experimental::signatures };

sub me ($c){
    my $user = $c->_get( $c->user->{id} ) // return;

    my $formatted = $user->formatted;

    if (
        ( $user->jitsi_allowed || $user->roles =~ /chairman|jitsi/ )
        && $c->cfg->{jitsi_base_url}
        && $c->cfg->{jitsi_room}
    ) {
        $formatted->{jitsi_url} = $c->jitsi_url(
            $c->cfg->{jitsi_room},
            $c->cfg->{jitsi_token_lifetime},
            $user->get_columns,
            moderator => ($user->roles =~ /chairman/) ? 1:0,
            email     => $c->oauth_claims->{mail},
        );
    }

    $c->render(openapi => $c->spec_filter($formatted, 'User'));
}

sub ban ($c){
    my $user   = $c->_get( $c->stash->{id} ) // return;
    my $guard  = $c->schema->txn_scope_guard;

    $user->update({ banned_until => \"now()+'8 hour'", });

    #TODO: do modelu
    my $msg = $c->schema->resultset('Announcement')->from_template(
        5, $user->name,
    );

    my $announcement = $c->schema->resultset('Announcement')->create({
        user_id  => $c->user->{id},
        type     => 5,
        content  => $msg,
    });

    # potrebujeme kvuli datumu
    $announcement = $c->schema->resultset('Announcement')->find({
        id => $announcement->id,
    });

    $c->notify('announcement_created',
        $announcement->format(),
    );

    $c->notify('user_banned',
        $c->spec_filter($user->formatted, 'User'),
    );

    $guard->commit;
    $c->render(status => 204, text => '');
}

sub unban ($c) {
    my $user   = $c->_get( $c->stash->{id} ) // return;
    my $guard  = $c->schema->txn_scope_guard;

    $user->update({ banned_until => undef });
    #TODO: ANN