2017-02-24 19:27:43 +00:00
package Pear::LocalLoop::Schema::Result::User ;
use strict ;
use warnings ;
use base 'DBIx::Class::Core' ;
2017-04-21 22:12:53 +01:00
use Data::UUID ;
2017-04-21 20:52:14 +01:00
__PACKAGE__ - > load_components ( qw /
InflateColumn:: DateTime
PassphraseColumn
TimeStamp
2017-09-06 16:11:57 +01:00
FilterColumn
2017-04-21 20:52:14 +01:00
/ ) ;
2017-02-24 19:27:43 +00:00
2017-04-21 20:52:14 +01:00
__PACKAGE__ - > table ( "users" ) ;
2017-02-24 19:27:43 +00:00
__PACKAGE__ - > add_columns (
2017-04-21 20:52:14 +01:00
"id" = > {
data_type = > "integer" ,
is_auto_increment = > 1 ,
is_nullable = > 0 ,
} ,
2017-08-31 12:39:10 +01:00
"entity_id" = > {
2017-04-21 20:52:14 +01:00
data_type = > "integer" ,
is_foreign_key = > 1 ,
2017-08-31 12:39:10 +01:00
is_nullable = > 0 ,
2017-04-21 20:52:14 +01:00
} ,
"email" = > {
data_type = > "text" ,
is_nullable = > 0 ,
} ,
"join_date" = > {
data_type = > "datetime" ,
set_on_create = > 1 ,
} ,
"password" = > {
2017-04-18 22:31:08 +01:00
data_type = > "varchar" ,
is_nullable = > 0 ,
size = > 100 ,
passphrase = > 'crypt' ,
passphrase_class = > 'BlowfishCrypt' ,
passphrase_args = > {
salt_random = > 1 ,
cost = > 8 ,
} ,
passphrase_check_method = > 'check_password' ,
} ,
2017-08-31 12:39:10 +01:00
"is_admin" = > {
data_type = > "boolean" ,
2017-09-06 16:11:57 +01:00
default_value = > \ "false" ,
2017-08-31 12:39:10 +01:00
is_nullable = > 0 ,
} ,
2017-02-24 19:27:43 +00:00
) ;
2017-04-21 20:52:14 +01:00
__PACKAGE__ - > set_primary_key ( "id" ) ;
2017-02-24 19:27:43 +00:00
2017-04-21 20:52:14 +01:00
__PACKAGE__ - > add_unique_constraint ( [ "email" ] ) ;
2017-02-24 19:27:43 +00:00
__PACKAGE__ - > belongs_to (
2017-08-31 12:39:10 +01:00
"entity" ,
"Pear::LocalLoop::Schema::Result::Entity" ,
"entity_id" ,
2017-02-24 19:27:43 +00:00
) ;
__PACKAGE__ - > has_many (
"session_tokens" ,
"Pear::LocalLoop::Schema::Result::SessionToken" ,
2017-04-21 22:12:53 +01:00
{ "foreign.user_id" = > "self.id" } ,
2017-02-24 19:27:43 +00:00
{ cascade_copy = > 0 , cascade_delete = > 0 } ,
) ;
2017-07-24 14:55:05 +01:00
__PACKAGE__ - > has_many (
"feedback" ,
"Pear::LocalLoop::Schema::Result::Feedback" ,
{ "foreign.user_id" = > "self.id" } ,
{ cascade_copy = > 0 , cascade_delete = > 0 } ,
) ;
2017-09-06 16:11:57 +01:00
sub sqlt_deploy_hook {
my ( $ source_instance , $ sqlt_table ) = @ _ ;
my $ pending_field = $ sqlt_table - > get_field ( 'is_admin' ) ;
if ( $ sqlt_table - > schema - > translator - > producer_type =~ /SQLite$/ ) {
$ pending_field - > { default_value } = 0 ;
} else {
$ pending_field - > { default_value } = \ "false" ;
}
}
__PACKAGE__ - > filter_column ( is_admin = > {
filter_to_storage = > 'to_bool' ,
} ) ;
sub to_bool {
my ( $ self , $ val ) = @ _ ;
my $ driver_name = $ self - > result_source - > schema - > storage - > dbh - > { Driver } - > { Name } ;
if ( $ driver_name eq 'SQLite' ) {
return $ val ? 1 : 0 ;
} else {
return $ val ? 'true' : 'false' ;
}
}
2017-04-21 22:12:53 +01:00
sub generate_session {
my $ self = shift ;
my $ token = Data::UUID - > new - > create_str ( ) ;
$ self - > create_related (
'session_tokens' ,
{
token = > $ token ,
} ,
) ;
return $ token ;
}
2017-04-24 12:49:18 +01:00
sub name {
my $ self = shift ;
2017-08-31 12:39:10 +01:00
if ( defined $ self - > entity - > customer ) {
return $ self - > entity - > customer - > display_name ;
} elsif ( defined $ self - > entity - > organisation ) {
return $ self - > entity - > organisation - > name ;
2017-04-24 12:49:18 +01:00
} else {
2017-08-25 14:59:01 +01:00
return ;
2017-04-24 12:49:18 +01:00
}
}
2017-11-13 19:00:34 +00:00
sub full_name {
my $ self = shift ;
if ( defined $ self - > entity - > customer ) {
return $ self - > entity - > customer - > full_name ;
} elsif ( defined $ self - > entity - > organisation ) {
return $ self - > entity - > organisation - > name ;
} else {
return ;
}
}
2017-08-31 12:39:10 +01:00
# TODO Deprecate this sub?
2017-08-25 14:59:01 +01:00
sub type {
my $ self = shift ;
2017-08-31 12:39:10 +01:00
return $ self - > entity - > type ;
2017-08-25 14:59:01 +01:00
}
2017-02-24 19:27:43 +00:00
1 ;