package SeMeet::Schema::Result::Meet; use strict; use warnings; use feature 'signatures'; no warnings qw{ experimental::signatures } ; use base 'DBIx::Class::Core'; use Mojo::JWT; use JSON; use constant JWT_DEFAULT_LIFETIME => 3600 * 24 * 7; our $VERSION = 1; __PACKAGE__->table('meets'); __PACKAGE__->add_columns( id => { data_type => 'integer', is_auto_increment => 1, is_nullable => 0, sequence => 'uid_seq' }, qw( uuid owner_id deleted name description properties ), ); __PACKAGE__->set_primary_key('id'); __PACKAGE__->add_unique_constraint( 'uuid' => [qw(uuid)] ); __PACKAGE__->belongs_to( owner => 'SeMeet::Schema::Result::User', { 'foreign.id' => 'self.owner_id', }, ); __PACKAGE__->has_many( meet_groups => 'SeMeet::Schema::Result::MeetGroup', { 'foreign.meet_id' => 'self.id', }, ); __PACKAGE__->has_many( moderators => 'SeMeet::Schema::Result::Moderator', { 'foreign.meet_id' => 'self.id', }, ); __PACKAGE__->has_many( groups => 'SeMeet::Schema::Result::MeetGroup_view', { 'foreign.meet_id' => 'self.id', }, ); __PACKAGE__->inflate_column('properties', { inflate => sub { from_json(shift); }, deflate => sub { to_json(shift); }, }); sub update_groups_cache($self) { my @groups = (); foreach my $group ($self->groups) { push @groups, { id => $group->group_id, name => $group->group_name }; } my $properties = $self->properties // {}; $properties->{groups} = \@groups; $self->update({properties => $properties}); } sub update_moderators_cache($self) { my @moderators = (); foreach my $moderator ($self->moderators) { push @moderators, { id => $moderator->octid, name => $moderator->name, }; } my $properties = $self->properties // {}; $properties->{moderators} = \@moderators; $self->update({properties => $properties}); } sub cached_groups($self) { my $properties = $self->properties // {}; if (exists $properties->{groups} && ref $properties->{groups} eq 'ARRAY') { return $properties->{groups}; } return []; } sub cached_moderators($self) { my $properties = $self->properties // {}; if (exists $properties->{moderators} && ref $properties->{moderators} eq 'ARRAY') { return $properties->{moderators}; } return []; } 1;