Add problem_status, contest_status and a method that updates them
[gruntmaster-data.git] / lib / Gruntmaster / Data / Result / User.pm
1 use utf8;
2 package Gruntmaster::Data::Result::User;
3
4 # Created by DBIx::Class::Schema::Loader
5 # DO NOT MODIFY THE FIRST PART OF THIS FILE
6
7 =head1 NAME
8
9 Gruntmaster::Data::Result::User
10
11 =cut
12
13 use strict;
14 use warnings;
15
16 use base 'DBIx::Class::Core';
17
18 =head1 TABLE: C<users>
19
20 =cut
21
22 __PACKAGE__->table("users");
23
24 =head1 ACCESSORS
25
26 =head2 id
27
28 data_type: 'text'
29 is_nullable: 0
30
31 =head2 passphrase
32
33 data_type: 'text'
34 is_nullable: 1
35
36 =head2 admin
37
38 data_type: 'boolean'
39 default_value: false
40 is_nullable: 0
41
42 =head2 name
43
44 data_type: 'text'
45 is_nullable: 1
46
47 =head2 email
48
49 data_type: 'text'
50 is_nullable: 1
51
52 =head2 phone
53
54 data_type: 'text'
55 is_nullable: 1
56
57 =head2 town
58
59 data_type: 'text'
60 is_nullable: 1
61
62 =head2 university
63
64 data_type: 'text'
65 is_nullable: 1
66
67 =head2 level
68
69 data_type: 'text'
70 is_nullable: 1
71
72 =head2 lastjob
73
74 data_type: 'bigint'
75 is_nullable: 1
76
77 =cut
78
79 __PACKAGE__->add_columns(
80 "id",
81 { data_type => "text", is_nullable => 0 },
82 "passphrase",
83 { data_type => "text", is_nullable => 1 },
84 "admin",
85 { data_type => "boolean", default_value => \"false", is_nullable => 0 },
86 "name",
87 { data_type => "text", is_nullable => 1 },
88 "email",
89 { data_type => "text", is_nullable => 1 },
90 "phone",
91 { data_type => "text", is_nullable => 1 },
92 "town",
93 { data_type => "text", is_nullable => 1 },
94 "university",
95 { data_type => "text", is_nullable => 1 },
96 "level",
97 { data_type => "text", is_nullable => 1 },
98 "lastjob",
99 { data_type => "bigint", is_nullable => 1 },
100 );
101
102 =head1 PRIMARY KEY
103
104 =over 4
105
106 =item * L</id>
107
108 =back
109
110 =cut
111
112 __PACKAGE__->set_primary_key("id");
113
114 =head1 RELATIONS
115
116 =head2 contest_statuses
117
118 Type: has_many
119
120 Related object: L<Gruntmaster::Data::Result::ContestStatus>
121
122 =cut
123
124 __PACKAGE__->has_many(
125 "contest_statuses",
126 "Gruntmaster::Data::Result::ContestStatus",
127 { "foreign.owner" => "self.id" },
128 { cascade_copy => 0, cascade_delete => 0 },
129 );
130
131 =head2 contests
132
133 Type: has_many
134
135 Related object: L<Gruntmaster::Data::Result::Contest>
136
137 =cut
138
139 __PACKAGE__->has_many(
140 "contests",
141 "Gruntmaster::Data::Result::Contest",
142 { "foreign.owner" => "self.id" },
143 { cascade_copy => 0, cascade_delete => 0 },
144 );
145
146 =head2 jobs
147
148 Type: has_many
149
150 Related object: L<Gruntmaster::Data::Result::Job>
151
152 =cut
153
154 __PACKAGE__->has_many(
155 "jobs",
156 "Gruntmaster::Data::Result::Job",
157 { "foreign.owner" => "self.id" },
158 { cascade_copy => 0, cascade_delete => 0 },
159 );
160
161 =head2 opens
162
163 Type: has_many
164
165 Related object: L<Gruntmaster::Data::Result::Open>
166
167 =cut
168
169 __PACKAGE__->has_many(
170 "opens",
171 "Gruntmaster::Data::Result::Open",
172 { "foreign.owner" => "self.id" },
173 { cascade_copy => 0, cascade_delete => 0 },
174 );
175
176 =head2 problem_statuses
177
178 Type: has_many
179
180 Related object: L<Gruntmaster::Data::Result::ProblemStatus>
181
182 =cut
183
184 __PACKAGE__->has_many(
185 "problem_statuses",
186 "Gruntmaster::Data::Result::ProblemStatus",
187 { "foreign.owner" => "self.id" },
188 { cascade_copy => 0, cascade_delete => 0 },
189 );
190
191 =head2 problems
192
193 Type: has_many
194
195 Related object: L<Gruntmaster::Data::Result::Problem>
196
197 =cut
198
199 __PACKAGE__->has_many(
200 "problems",
201 "Gruntmaster::Data::Result::Problem",
202 { "foreign.owner" => "self.id" },
203 { cascade_copy => 0, cascade_delete => 0 },
204 );
205
206
207 # Created by DBIx::Class::Schema::Loader v0.07042 @ 2014-12-11 23:51:27
208 # DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:JcVHC/n8J+NgJge9LkckYA
209
210 use Authen::Passphrase;
211 use Authen::Passphrase::BlowfishCrypt;
212
213 sub check_passphrase {
214 my ($self, $pw) = @_;
215 Authen::Passphrase->from_rfc2307($self->passphrase)->match($pw)
216 }
217
218 sub set_passphrase {
219 my ($self, $pw) = @_;
220 $self->update({passphrase => Authen::Passphrase::BlowfishCrypt->new(
221 cost => 10,
222 passphrase => $pw,
223 salt_random => 1,
224 )->as_rfc2307});
225 }
226
227 1;
228
229 __END__
230
231 =head1 METHODS
232
233 =head2 check_passphrase(I<$passphrase>)
234
235 Returns true if I<$passphrase> is the correct passphrase, false otherwise.
236
237 =head2 set_passphrase(I<$passphrase>)
238
239 Changes the passphrase to I<$passphrase>.
240
241 =head1 AUTHOR
242
243 Marius Gavrilescu E<lt>marius@ieval.roE<gt>
244
245 =head1 COPYRIGHT AND LICENSE
246
247 Copyright (C) 2014 by Marius Gavrilescu
248
249 This library is free software; you can redistribute it and/or modify
250 it under the same terms as Perl itself, either Perl version 5.18.1 or,
251 at your option, any later version of Perl 5 you may have available.
252
253
254 =cut
This page took 0.03012 seconds and 4 git commands to generate.