summaryrefslogtreecommitdiff
path: root/lib/VNWeb/Reviews/Elm.pm
blob: f3e28516774bccced11c9f89b941b22977c79642 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
package VNWeb::Reviews::Elm;

use VNWeb::Prelude;

my $VOTE = {
    id       => { vndbid => 'w' },
    my       => { required => 0, jsonbool => 1 },
    overrule => { anybool => 1 },
    mod      => { _when => 'out', anybool => 1 },
};

my  $VOTE_IN  = form_compile in  => $VOTE;
our $VOTE_OUT = form_compile out => $VOTE;

elm_api ReviewsVote => $VOTE_OUT, $VOTE_IN, sub {
    my($data) = @_;
    my %id = (auth ? (uid => auth->uid) : (ip => norm_ip tuwf->reqIP), id => $data->{id});
    my %val = (vote => $data->{my}?1:0, overrule => auth->permBoardmod ? $data->{overrule}?1:0 : 0, date => sql 'NOW()');
    tuwf->dbExeci(
        defined $data->{my}
        ? sql 'INSERT INTO reviews_votes', {%id,%val}, 'ON CONFLICT (id,', auth ? 'uid' : 'ip', ') DO UPDATE SET', \%val
        : sql 'DELETE FROM reviews_votes WHERE', \%id
    );
    elm_Success
};

1;