RSS Git Download  Clone
Raw Blame History
package Labels;

use Dancer2;
use Labels::Model;

use Data::Dumper;
use Data::Printer;

our $VERSION = '0.1';

set auto_page => 1; # don't need routes for static tt returns (labels)

hook before => sub {
    my $vars = params; # p settings('environment');
    p $vars if setting('environment') eq 'development';
};

get '/' => sub { template 'index', {}, { layout => 'default' } };

post '/labels' => sub {
    my $src_file = upload('src_file'); # p $src_file;

	# validate file upload:
	validate_user_input($src_file) or return error_as_json('file upload error');

    my @args = ( content => $src_file->content,	config => config() ); # p @args;
	my $model = Labels::Model->new(@args);
	
	# parse xl file - extracts spreadsheet data:
	parse_xls($model) or return error_as_json('file read failure');

	# print labels:
	print_labels($model) or return error_as_json('print labels error');

	# assume print labels succeeded, return list of uploaded labels:
	my $labels = $model->format_result; # AoA
	return to_json({ labels => $labels });
};

#-------------------------------------------------------------------------------
sub validate_user_input {
    my $src_file = shift;
	
	if (! $src_file ) {
		var error => 'no data file uploaded!';
		return 0;
	}

    # check upload is valid data file:
	unless ( $src_file->filename =~ /\.xls\Z/i ) {
		var error => $src_file->filename . ' is not a valid data file';
		return 0;
	}
	return 1; # for success
}

sub parse_xls {
	my $model = shift;
	
	my $rtn = $model->parse_xls; # returns err or nothing
	if ($rtn) {
		var error => $rtn;
		return 0;
	}
	return 1;
}

sub print_labels {
	my $model = shift;
	
	my $rtn = $model->print_labels; # returns err or nothing
	if ($rtn) {
		var error => $rtn;
		return 0;
	}
	return 1;
}

sub error_as_json {
	my $err = shift;
	my $str = sprintf '%s: %s', $err, var 'error';
	return to_json( { labels => [ $str ] } );
}

true;