Peace/lib/Peace/DAO/Developer.pm

84 lines
2.2 KiB
Perl

package Peace::DAO::Developer;
use v5.30.0;
use strict;
use warnings;
use Params::ValidationCompiler qw/validation_for/;
use Types::Standard qw/HasMethods InstanceOf Str/;
{
my $validator = validation_for(
params => {
dbh => { type => HasMethods ['selectall_arrayref'] },
}
);
sub new {
my $class = shift;
my %params = $validator->(@_);
my $self = bless {}, $class;
$self->{dbh} = $params{dbh};
return $self;
}
}
{
my $validator = validation_for(
params => {
developer => { type => InstanceOf ['Peace::Model::Developer'] },
}
);
sub create {
my $self = shift;
my %params = $validator->(@_);
my $developer = $params{developer};
my $dbh = $self->_dbh;
my $insert = <<'EOF';
INSERT INTO developers (secret_bcrypt, name, surname, email, country, verified)
VALUES (?, ?, ?, ?, ?, ?)
RETURNING uuid;
EOF
my $result = $dbh->selectrow_hashref(
$insert, undef, $developer->secret,
$developer->name, $developer->surname, $developer->email,
$developer->country, $developer->verified
);
my $uuid = $result->{uuid};
$developer->uuid($uuid);
my $new_developer = $self->recover_by_uuid( uuid => $uuid );
$developer->date_creation( $new_developer->date_creation )
if defined $new_developer->date_creation;
return $developer;
}
}
{
my $validator = validation_for(
params => {
uuid => { type => Str },
}
);
sub recover_by_uuid {
my $self = shift;
my %params = $validator->(@_);
my $uuid = $params{uuid};
my $dbh = $self->_dbh;
my $result = $dbh->selectrow_hashref( <<'EOF', undef, $uuid );
SELECT uuid, date_creation, secret_bcrypt, name, surname, email, stripe_id, country, verified
FROM customer
WHERE uuid = ?;
EOF
for my $key (keys %$result) {
delete $result->{$key} unless defined $result->{$key};
}
my $developer = Peace::Model::Developer->new(%$result);
return $developer;
}
}
1;