The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
package Silki::Schema::UserImage;
{
  $Silki::Schema::UserImage::VERSION = '0.29';
}

use strict;
use warnings;
use namespace::autoclean;

use Silki::Types qw( Str );

use Fey::ORM::Table;

with 'Silki::Role::Schema::URIMaker';

my $Schema = Silki::Schema->Schema();

has_policy 'Silki::Schema::Policy';

has_table( $Schema->table('UserImage') );

has_one( $Schema->table('User') );

has filename => (
    is       => 'ro',
    isa      => Str,
    init_arg => undef,
    lazy     => 1,
    builder  => '_build_filename',
);

with 'Silki::Role::Schema::File';

sub _base_uri_path {
    my $self = shift;

    return '/user_image/' . $self->user_id();
}

{
    my %ext = (
        'image/gif'  => '.gif',
        'image/jpeg' => '.jpg',
        'image/png'  => '.png',
    );

    sub _build_filename {
        my $self = shift;

        return 'user-image-' . $self->user_id() . $ext{ $self->mime_type() };
    }
}

__PACKAGE__->meta()->make_immutable;

1;