-
Notifications
You must be signed in to change notification settings - Fork 0
/
Model.pm
137 lines (119 loc) · 3.12 KB
/
Model.pm
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
package ParlAPI::Model;
use MooseX::Singleton;
use ParlAPI::DB;
use ParlAPI::Model::Parliament;
use ParlAPI::Model::Member;
use ParlAPI::Model::Bill;
use namespace::clean -except => 'meta';
has 'db' => (is => 'ro', isa => 'ParlAPI::DB', lazy_build => 1);
sub get_parliament {
my $self = shift;
my %p = @_;
my ($where, @bind);
if ($p{parl_id}) {
$where = 'parl_id = ?';
push @bind, $p{parl_id};
}
elsif ($p{parliament} and $p{session}) {
$where = 'parl = ? AND session = ?';
push @bind, $p{parliament}, $p{session};
}
else { die "Look ups by parl_id or parliament & session only" }
my $sth = $self->db->sql_execute(qq{SELECT * FROM parliament WHERE $where}, @bind);
my $result = $sth->fetchall_arrayref({});
return undef unless $result->[0];
return ParlAPI::Model::Parliament->new($result->[0]);
}
sub get_member {
my $self = shift;
my $maybe_id = shift;
my $where;
if ($maybe_id =~ m/\D/) {
$where = 'LOWER(name) = LOWER(?)';
}
else {
$where = 'member_id = ?';
}
my $sth = $self->db->sql_execute(qq{
SELECT *
FROM member
WHERE $where
}, $maybe_id
);
my $result = $sth->fetchall_arrayref({});
return undef unless $result->[0];
return ParlAPI::Model::Member->new($result->[0]);
}
sub get_bill {
my $self = shift;
my $parl = shift;
my $bill_name = uc shift;
my $sth = $self->db->sql_execute(qq{
SELECT *
FROM bill
WHERE parl_id = ? AND name = ?
}, $parl->parl_id, $bill_name
);
my $result = $sth->fetchall_arrayref({});
return undef unless $result->[0];
return ParlAPI::Model::Bill->new($result->[0]);
}
sub delete_member {
my $self = shift;
my $member_id = shift;
$self->db->sql_execute(
q{DELETE FROM member WHERE member_id = ?},
$member_id,
);
$self->db->sql_execute(
q{DELETE FROM parliament_members WHERE member_id = ?},
$member_id,
);
}
sub delete_bill {
my $self = shift;
my $bill_name = shift;
$self->db->sql_execute(
q{DELETE FROM bill WHERE name = ?},
$bill_name,
);
}
sub create_member {
my $self = shift;
my $m = ParlAPI::Model::Member->new(@_);
$self->db->sql_execute( $m->insert_sql );
return $m;
}
sub create_bill {
my $self = shift;
my $bill_hash = shift;
my $b = ParlAPI::Model::Bill->new($bill_hash);
$b->insert($self->db);
return $b;
}
sub parliaments {
my $self = shift;
return ParlAPI::Model::Parliament->All($self->db);
}
sub members {
my $self = shift;
my $parl = shift;
return ParlAPI::Model::Member->All(
$self->db,
'join' => 'LEFT JOIN parliament_members USING (member_id)',
where => 'parl_id = ?',
'bind' => [$parl->parl_id],
);
}
sub bills {
my $self = shift;
my $parl = shift;
return ParlAPI::Model::Bill->All(
$self->db,
where => 'parl_id = ?',
'bind' => [$parl->parl_id],
);
}
sub _build_db { ParlAPI::DB->new }
__PACKAGE__->meta->make_immutable;
1;