package Peace::DAO::Release; use v5.30.0; use strict; use warnings; use Data::Dumper; use Params::ValidationCompiler qw/validation_for/; use Types::Standard qw/HasMethods InstanceOf Str HashRef/; { my $validator = validation_for( params => { dbh => { type => HasMethods ['selectrow_hashref'], optional => 1 }, } ); sub new { my $class = shift; my %params = $validator->(@_); my $self = bless {}, $class; $self->{dbh} = $params{dbh}; return $self; } } { my $validator = validation_for( params => { release => { type => InstanceOf ['Peace::Model::Release'] }, } ); sub create { my $self = shift; my %params = $validator->(@_); my $release = $params{release}; my $dbh = $self->_dbh; my $insert = <<'EOF'; INSERT INTO releases (application, tag, name) VALUES (?, ?, ?) RETURNING uuid; EOF my $result = $dbh->selectrow_hashref( $insert, undef, $release->application->uuid, $release->tag, $release->name ); my $uuid = $result->{uuid}; my $new_release = $self->recover_by_uuid( uuid => $uuid ); $release->uuid( $new_release->uuid ); $release->date_creation( $new_release->date_creation ); return $release; } } { my $validator = validation_for( params => { uuid => { type => Str }, } ); sub recover_by_uuid { my $self = shift; my %params = $validator->(@_); my $dbh = $self->_dbh; my $uuid = $params{uuid}; my $result = $dbh->selectrow_hashref( <<'EOF', undef, $uuid ); SELECT uuid, date_creation, application, name, tag FROM releases WHERE uuid = ? EOF if ( !defined $result ) { die "Release with uuid $uuid not found."; } return $self->_select_result_to_release($result); } } { my $validator = validation_for( params => [ { type => HashRef }, ] ); sub _select_result_to_release { my $self = shift; my ($result) = $validator->(@_); if ( exists $result->{application} ) { $result->{application_uuid} = delete $result->{application}; $result->{dbh} = $self->_dbh; } if ( exists $result->{date_creation} ) { my $iso8601 = DateTime::Format::Pg->new; $result->{date_creation} = $iso8601->parse_datetime( $result->{date_creation} ); } my $release = Peace::Model::Release->new(%$result); return $release; } } sub _dbh { my $self = shift; return $self->{dbh}; } 1; =encoding utf8 =head1 NAME Peace::DAO::Release - The database access object of releases. =head1 SYNOPSIS my $release_dao = Peace::DAO::Release->new( dbh => $dbh ); $release_dao->create( release => $release ); my $release = $release_dao->recover_by_uuid( uuid => $uuid ); =head1 DESCRIPTION Peace::DAO::Release allows you to do database operations over L objects. =head1 INSTANCE METHODS Peace::DAO::Release implements the following intance methods: =head2 new my $release_dao = Peace::DAO::Release->new( dbh => $dbh ) Instances a Peace::DAO::Release object. =head1 METHODS Peace::DAO::Release implements the following methods: =head2 recover_by_uuid my $release = $release_dao->recover_by_uuid( uuid => $uuid ); Recovers a L by uuid. =head2 create $release_dao->create( release => $release ); Creates row in the table releases from a L =head1 SEE ALSO L =cut