summaryrefslogtreecommitdiff
path: root/lib/VNWeb/Reviews/Elm.pm
blob: 527da2394ef46a3f2b42b590312026d86b2ecd0e (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
28
29
package VNWeb::Reviews::Elm;

use VNWeb::Prelude;

my $VOTE = {
    id   => { vndbid => 'w' },
    my   => { required => 0, jsonbool => 1 },
    can  => { _when => 'out', anybool => 1 },
    up   => { _when => 'out', uint => 1 },
    down => { _when => 'out', uint => 1 },
};

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

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

1;