--- trunk/lib/App/RoomReservation/Reservation.pm 2009/06/28 18:51:49 1095 +++ trunk/lib/App/RoomReservation/Reservation.pm 2009/07/02 10:12:54 1155 @@ -1,10 +1,18 @@ package App::RoomReservation::Reservation; use Moose; -extends 'Frey'; -with 'Frey::Web'; +use Moose::Util::TypeConstraints; +use Regexp::Common qw[Email::Address]; + +subtype 'Email', + as 'Str', + where { /^$RE{Email}{Address}$/ }, + message { "$_ is not valid e-mail" }; + +extends 'App::RoomReservation'; + +with 'App::RoomReservation::Email', 'App::RoomReservation::Messages'; -use DBI; use lib 'lib'; use Frey::PPI; @@ -58,24 +66,50 @@ has email => ( is => 'rw', - isa => 'Str', + isa => 'Email', required => 1, ); has email_verify => ( is => 'rw', - isa => 'Str', + isa => 'Email', required => 1, ); has _confirmed => ( is => 'rw', isa => 'Bool', - required => 1, +# required => 1, default => sub { 0 }, ); -sub dsn { 'DBI:Pg:dbname=room-reservation' } +has _seat_number => ( + is => 'rw', + isa => 'Int', +); + +has _canceled => ( + is => 'rw', + isa => 'Bool', + default => sub { 0 }, +); + +sub BUILD { + my $self = shift; + my $email = $self->email; + die "e-mail not verified\n" unless $email eq $self->email_verify; + my $sth = $self->dbh->prepare(qq{ + select count(*) from reservation where email = ? + }); + $sth->execute( $email ); + my ($registred) = $sth->fetchrow_array; + if ( $registred ) { + die qq| + e-mail address $email allready registred + | . $self->seat_confirmation_message( email => $email ) + ; + } +} my @cols = Frey::PPI->new( class => __PACKAGE__ )->attribute_order; warn "# cols = ",join(',', @cols), $/; @@ -83,9 +117,6 @@ sub create_as_markup { my ($self) = @_; - my $dbh = DBI->connect( $self->dsn, '', '', { RaiseError => 1 } ) || die $DBI::errstr; - $dbh->do( qq{ set client_encoding='utf-8' } ) if $self->dsn =~ m{pg}i; - my @vals; my @p; @@ -106,10 +137,15 @@ warn "sql: $sql\n"; - my $sth = $dbh->prepare( $sql ); + my $sth = $self->dbh->prepare( $sql ); $sth->execute( @vals ); - $sth->rows; + return $self->seat_confirmation_message( email => $self->email ); + } +__PACKAGE__->meta->make_immutable; +no Moose; +no Moose::Util::TypeConstraints; + 1;