App-SD

 view release on metacpan or  search on metacpan

lib/App/SD/ForeignReplica/PullEncoder.pm  view on Meta::CPAN

package App::SD::ForeignReplica::PullEncoder;
use Any::Moose;
use App::SD::Util;
use Params::Validate qw/validate/;

with 'Prophet::CLI::ProgressBar';

sub run {
    my $self = shift;
    my %args = validate( @_, { after => 1});

    $self->sync_source->log('Finding matching tickets');
    my $tickets = $self->find_matching_tickets( query => $self->sync_source->query );

    if ( @$tickets == 0 ) {
        $self->sync_source->log("No tickets found.");
        return;
    }

    my $counter = 0;
    $self->sync_source->log_debug("Discovering ticket history");

    my ( $last_modified, $last_txn, @changesets );

    my $progress = $self->progress_bar(
        max => $#$tickets,
        format => "Fetching ticket history %30b %p Est: %E\r",
    );

    for my $ticket (@$tickets) {
        $counter++;
        my $changesets;
        $progress->();
        $self->sync_source->log_debug( "Fetching $counter of " . scalar @$tickets  . " tickets");
        ( $last_modified, $changesets ) = $self->transcode_ticket( $ticket, $last_modified );
        unshift @changesets, @$changesets;
    }
    my $sorted_changesets = [ sort {
        $a->original_sequence_no <=> $b->original_sequence_no } @changesets ];
    return $sorted_changesets;
}

sub ticket_last_modified { undef}

sub transcode_ticket {
    my $self          = shift;
    my $ticket        = shift;
    my $last_modified = shift;
    my @changesets;

    if ( my $ticket_last_modified = $self->ticket_last_modified($ticket) ) {

        $last_modified = $ticket_last_modified if ( !$last_modified || $ticket_last_modified > $last_modified );
    }

    my $transactions = $self->find_matching_transactions(
        ticket               => $ticket,
        starting_transaction => $self->sync_source->app_handle->handle->last_changeset_from_source(
            $self->sync_source->uuid_for_remote_id( $self->ticket_id($ticket) )
            ) || 1
    );

    my $changesets;
    ( $last_modified, $changesets ) = $self->transcode_history( $ticket, $transactions, $last_modified );
    return ( $last_modified, $changesets );
}


sub transcode_history {
    my $self          = shift;



( run in 0.550 second using v1.01-cache-2.11-cpan-39bf76dae61 )