Blob Blame History Raw
# vim:set sw=4 ts=4 sts=4 ft=perl expandtab:
package Lufi::Command::breakingchanges::files_paths;
use Mojo::Base 'Mojolicious::Command';
use FindBin qw($Bin);
use Lufi::DB::Slice;
use Lufi::DB::BreakingChange;
use Lufi::DefaultConfig qw($default_config);
use Term::ProgressBar;

has description => 'Update existing files’ paths in DB to change them to paths relative to storage system (filesystem or Swift).';
has usage       => sub { shift->extract_usage };

sub run {
    my $c = shift;

    my $bc = Lufi::DB::BreakingChange->new(app => $c->app, change => 'files_paths');
    if ($bc->ack) {
        say 'Change "files_paths" already applied. Exiting.';
        exit;
    }

    say 'Getting number of database records to update, it can take some time.';
    my $count = Lufi::DB::Slice->new(app => $c->app)->count();
    if ($count) {
        say sprintf('There is %d database records to update, please be patient.', $count);
        print 'Do you want to continue? [Y/n] ';
        my $confirm = <STDIN>;

        if ($confirm =~ m/yes|y/i) {
            my $progress = Term::ProgressBar->new({ count => $count, ETA => 'linear', name => 'Updating paths' });

            Lufi::DB::Slice->new(app => $c->app)->convert_paths($progress);

            $bc->acknowledge;
            say 'Change "files_paths" successfully applied. You can now start Lufi.';
        } else {
            say 'Change "files_paths" not applied. You won’t be able to start Lufi';
        }
    } else {
        say 'No records in database. Setting "files_paths" change as applied.';
        $bc->acknowledge;
        say 'Change "files_paths" successfully applied. You can now start Lufi.';
    }
}

=encoding utf8

=head1 NAME

Lufi::Command::breakingchanges::files_paths - Update existing files’ paths in DB to change them to paths relative to storage system (filesystem or Swift).

=head1 SYNOPSIS

  Usage: script/lufi breakingchanges files_paths

=cut

1;