From 8b5167ef4b22f953a98aa2d34cf81bcd5308aca0 Mon Sep 17 00:00:00 2001 From: JT Smith Date: Sun, 16 Jan 2011 09:07:51 -0600 Subject: [PATCH] added remote essentia code methods --- lib/Lacuna/RPC/EssentiaCode.pm | 48 ++++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 lib/Lacuna/RPC/EssentiaCode.pm diff --git a/lib/Lacuna/RPC/EssentiaCode.pm b/lib/Lacuna/RPC/EssentiaCode.pm new file mode 100644 index 00000000..33ca257c --- /dev/null +++ b/lib/Lacuna/RPC/EssentiaCode.pm @@ -0,0 +1,48 @@ +package Lacuna::RPC::EssentiaCode; + +use Moose; +use utf8; +no warnings qw(uninitialized); +extends 'Lacuna::RPC'; +use DateTime; +use UUID::Tiny ':std'; + +sub verify_key { + my ($self, $key) = @_; + return $key ~~ Lacuna->config->get('server_keys') ? 1 : 0; +} + +sub spend { + my ($self, $key, $code_string) = @_; + confess [401, 'Invalid key.'] unless $self->verify_key($key); + my $code = Lacuna->db->resultset('Lacuna::DB::Result::EssentiaCode')->search({code => $code_string}, {rows=>1})->single; + confess [1002, 'The essentia code you specified is invalid.'] unless (defined $code); + confess [1010, 'The essentia code you specified has already been redeemed.'] if ($code->used); + $code->used(1); + $code->update; + return $code->amount; +} + +sub add { + my ($self, $key, $amount, $description) = @_; + confess [401, 'Invalid key.'] unless $self->verify_key($key); + confess [1009, 'Amount must be 1 or higher.'] unless $amount >= 1; + confess [1009, 'You must supply a description'] unless length($description); + my $code_string = create_uuid_as_string(UUID_V4); + my $code = Lacuna->db->resultset('Lacuna::DB::Result::EssentiaCode')->new({ + code => $code_string, + date_created => DateTime->now, + description => $description, + amount => $amount, + })->insert; + return $code_string; +} + +__PACKAGE__->register_rpc_method_names( + qw(add spend), +); + + +no Moose; +__PACKAGE__->meta->make_immutable; + -- 2.51.2