From 39ebc84e5f29c971d6a91594e548299c918b56b5 Mon Sep 17 00:00:00 2001 From: Birte Kristina Friesel Date: Fri, 9 Feb 2024 19:09:16 +0100 Subject: [PATCH] add dumpstops command --- lib/Travelynx/Command/dumpstops.pm | 50 ++++++++++++++++++++++++++++++ lib/Travelynx/Model/Stations.pm | 6 ++++ 2 files changed, 56 insertions(+) create mode 100644 lib/Travelynx/Command/dumpstops.pm diff --git a/lib/Travelynx/Command/dumpstops.pm b/lib/Travelynx/Command/dumpstops.pm new file mode 100644 index 0000000..79fb6ac --- /dev/null +++ b/lib/Travelynx/Command/dumpstops.pm @@ -0,0 +1,50 @@ +package Travelynx::Command::dumpstops; + +# Copyright (C) 2024 Birte Kristina Friesel +# +# SPDX-License-Identifier: AGPL-3.0-or-later + +use Mojo::Base 'Mojolicious::Command'; +use List::Util qw(); +use Text::CSV; + +has description => 'Export HAFAS/IRIS stops to CSV'; + +has usage => sub { shift->extract_usage }; + +sub run { + my ( $self, $command, $filename ) = @_; + my $db = $self->app->pg->db; + + if ( not $command or not $filename ) { + $self->help; + } + elsif ( $command eq 'csv' ) { + open( my $fh, '>', $filename ) or die("open($filename): $!\n"); + + my $csv = Text::CSV->new( { eol => "\r\n" } ); + $csv->combine(qw(name eva lat lon source archived)); + print $fh $csv->string; + + my $iter = $self->app->stations->get_db_iterator; + while ( my $row = $iter->hash ) { + $csv->combine( @{$row}{qw{name eva lat lon source archived}} ); + print $fh $csv->string; + } + close($fh); + } + else { + $self->help; + } +} + +1; + +__END__ + +=head1 SYNOPSIS + + Usage: index.pl dumpstops + + Exports known stops to . + Right now, only the "csv" format is supported. diff --git a/lib/Travelynx/Model/Stations.pm b/lib/Travelynx/Model/Stations.pm index 5bbe781..ac4019c 100644 --- a/lib/Travelynx/Model/Stations.pm +++ b/lib/Travelynx/Model/Stations.pm @@ -71,6 +71,12 @@ sub add_meta { } } +sub get_db_iterator { + my ($self) = @_; + + return $self->{pg}->db->select( 'stations', '*' ); +} + sub get_meta { my ( $self, %opt ) = @_; my $db = $opt{db} // $self->{pg}->db;