root/veekun/trunk/lib/Vee/Schema/Threads.pm @ 350

Revision 350, 1.8 KB (checked in by eevee, 2 years ago)

I discovered that DBIx::Class::Schema::Loader had been filling my table classes with lines of the form __PACKAGE__->add_unique_constraint(['id'], undef); erroneously, due to someone's inadvertently iterating over %hash rather than keys %hash. Not only were these lines redundant in the case of a primary key, but the parameters are supposed to be a name and a list of columns: thus I had a lot of constraints with ARRAY(0x...) as names and no columns. This was thoroughly breaking $schema->deploy, as it was trying to create indices with garbage names that looked like functions. I have, obviously, removed them all.
In the process, I have done something I've been meaning to do for a while: cleaned up the source in every single file to match my usual style. No auto-gen comment, no redundant loading of PK::Auto, no double-newline after the 1;, proper POD, use of qw// for passing lists, etc. This is actually a teeny part of my db cleanup tracking bug. (#58)

Line 
1package Vee::Schema::Threads;
2
3use strict;
4use warnings;
5use base 'DBIx::Class';
6
7=head1 NAME
8
9Vee::Schema::Threads - DBIC class for the C<threads> table
10
11=cut
12
13__PACKAGE__->load_components(qw/ ResultSetManager Core /);
14__PACKAGE__->table('threads');
15__PACKAGE__->add_columns(qw/
16  id forumid subject blurb firstpostid lastpostid lasttime postct hitct flags
17/);
18__PACKAGE__->set_primary_key('id');
19
20__PACKAGE__->belongs_to(forum => 'Vee::Schema::Forums', 'forumid');
21__PACKAGE__->has_many(posts => 'Vee::Schema::Posts', 'threadid');
22__PACKAGE__->belongs_to(lastpost => 'Vee::Schema::Posts', 'lastpostid');
23__PACKAGE__->belongs_to(firstpost => 'Vee::Schema::Posts', 'firstpostid');
24__PACKAGE__->has_many(thread_views => 'Vee::Schema::ThreadViews', 'thread_id', { join_type => 'LEFT' });
25
26=head1 METHODS
27
28=head2 search_announcements
29
30Returns a resultset of all the threads flagged as announcements.
31
32=cut
33
34sub search_announcements : ResultSet {
35    my ($self) = @_;
36   
37    return $self->search(
38        [ \ 'FIND_IN_SET("announcement", me.flags) AND NOT FIND_IN_SET("deleted", me.flags)' ],
39        { prefetch => [ 'forum', { firstpost => 'user', lastpost => 'user' } ] }
40    );
41}
42
43=head2 read_ids($user)
44
45Returns a list of all thread ids the given user has read.
46
47=cut
48
49sub read_ids : ResultSet {
50    my ($self, $user) = @_;
51
52    return $self->search( {
53        'thread_views.last_viewed' => \'>= me.lasttime',
54        'thread_views.user_id'     => $user->id,
55    }, {
56        join    => 'thread_views',
57        columns => [qw[ id ]],
58    } )->get_column('id')->all;
59}
60
61=head1 SEE ALSO
62
63L<Vee::Schema>, L<DBIx::Class>
64
65=head1 AUTHOR
66
67Maintainer: Alex "Eevee" Munroe (C<veekun@veekun.com>)
68
69See the included F<AUTHORS> file for a full list of contributers.
70
71=head1 LICENSE
72
73See the included F<LICENSE> file.
74
75=cut
76
771;
Note: See TracBrowser for help on using the browser.