diff options
| author | Daniel Friesel <derf@finalrewind.org> | 2019-03-04 18:17:03 +0100 | 
|---|---|---|
| committer | Daniel Friesel <derf@finalrewind.org> | 2019-03-04 18:17:03 +0100 | 
| commit | 8adca327fd976b117ccfa4d69903ee24e4f9bca4 (patch) | |
| tree | dda13d7cf370ab4bdc9e45029f6f391d81741b23 | |
| parent | 3096091f1130f36df61d0845f4e026cd970ce66c (diff) | |
prepare DB schema for public registration0.04
| -rwxr-xr-x | index.pl | 43 | ||||
| -rwxr-xr-x | migrate.pl | 89 | ||||
| -rw-r--r-- | templates/account.html.ep | 7 | 
3 files changed, 111 insertions, 28 deletions
| @@ -178,6 +178,20 @@ app->attr(  	}  );  app->attr( +	get_user_query => sub { +		my ($self) = @_; + +		return $self->app->dbh->prepare( +			qq{ +			select +				id, name, status, is_public, email, +				registered_at, last_login, deletion_requested +			from users where id = ? +		} +		); +	} +); +app->attr(  	get_stationid_by_ds100_query => sub {  		my ($self) = @_; @@ -445,6 +459,35 @@ helper 'get_station_id' => sub {  	}  }; +helper 'get_user_data' => sub { +	my ($self) = @_; + +	my $uid   = $self->get_user_id; +	my $query = $self->app->get_user_query; +	$query->execute($uid); +	my $rows = $query->fetchall_arrayref; +	if ( @{$rows} ) { +		my @row = @{ $rows->[0] }; +		return { +			id            => $row[0], +			name          => $row[1], +			status        => $row[2], +			is_public     => $row[3], +			email         => $row[4], +			registered_at => DateTime->from_epoch( +				epoch     => $row[5], +				time_zone => 'Europe/Berlin' +			), +			last_seen => DateTime->from_epoch( +				epoch     => $row[6], +				time_zone => 'Europe/Berlin' +			), +			deletion_requested => $row[7] +		}; +	} +	return; +}; +  helper 'get_user_name' => sub {  	my ($self) = @_; @@ -4,26 +4,31 @@ use strict;  use warnings;  use 5.020; +use DateTime;  use DBI;  my $dbname = $ENV{TRAVELYNX_DB_FILE} // 'travelynx.sqlite';  my $dbh = DBI->connect( "dbi:SQLite:dbname=${dbname}", q{}, q{} ); -my $has_version_query = $dbh->prepare(qq{ +my $has_version_query = $dbh->prepare( +	qq{  	select name from sqlite_master  	where type = 'table' and name = 'schema_version'; -}); +} +);  sub get_schema_version {  	$has_version_query->execute();  	my $rows = $has_version_query->fetchall_arrayref; -	if (@{$rows} == 1) { -		my $get_version_query = $dbh->prepare(qq{ +	if ( @{$rows} == 1 ) { +		my $get_version_query = $dbh->prepare( +			qq{  			select version from schema_version; -		}); +		} +		);  		$get_version_query->execute();  		my $rows = $get_version_query->fetchall_arrayref; -		if (@{$rows} == 0) { +		if ( @{$rows} == 0 ) {  			return -1;  		}  		return $rows->[0][0]; @@ -32,36 +37,68 @@ sub get_schema_version {  }  my @migrations = ( +  	# v0 -> v1  	sub { -		$dbh->do(qq{ -			begin transaction; -		}); -		$dbh->do(qq{ +		$dbh->begin_work; +		$dbh->do( +			qq{  			create table schema_version (  				version integer primary key  			); -		}); -		$dbh->do(qq{ +		} +		); +		$dbh->do( +			qq{  			insert into schema_version (version) values (1); -		}); -		$dbh->do(qq{ +		} +		); +		$dbh->do( +			qq{  			create table new_users (  				id integer primary key,  				name char(64) not null unique,  				status int not null, +				is_public bool not null,  				email char(256),  				password text, -				registered_at datetime, -				last_login datetime +				registered_at datetime not null, +				last_login datetime not null, +				deletion_requested datetime  			); -		}); -		my $get_users_query = $dbh->prepare(qq{ +		} +		); +		my $get_users_query = $dbh->prepare( +			qq{  			select * from users; -		}); -		$dbh->do(qq{ -			commit; -		}); +		} +		); +		my $add_user_query = $dbh->prepare( +			qq{ +			insert into new_users +				(id, name, status, is_public, registered_at, last_login) +				values +				(?, ?, ?, ?, ?, ?) +		} +		); +		$get_users_query->execute; + +		while ( my @row = $get_users_query->fetchrow_array ) { +			my ( $id, $name ) = @row; +			my $now = DateTime->now( time_zone => 'Europe/Berlin' )->epoch; +			$add_user_query->execute( $id, $name, 0, 0, $now, $now ); +		} +		$dbh->do( +			qq{ +			drop table users; +		} +		); +		$dbh->do( +			qq{ +			alter table new_users rename to users; +		} +		); +		$dbh->commit;  	},  ); @@ -69,11 +106,13 @@ my $schema_version = get_schema_version();  say "Found travelynx schema v${schema_version}"; -if ($schema_version == @migrations) { +if ( $schema_version == @migrations ) {  	say "Database schema is up-to-date";  } -for my $i ($schema_version .. $#migrations) { -	printf("Updating to v%d\n", $i + 1); +for my $i ( $schema_version .. $#migrations ) { +	printf( "Updating to v%d\n", $i + 1 );  	$migrations[$i]();  } + +$dbh->disconnect; diff --git a/templates/account.html.ep b/templates/account.html.ep index e734ee0..9c3a435 100644 --- a/templates/account.html.ep +++ b/templates/account.html.ep @@ -1,17 +1,18 @@  <h1>Account</h1> +% my $acc = get_user_data();  <div class="row">  	<table class="striped">  		<tr>  			<th scope="row">Name</th> -			<td><%= get_user_name() %></td> +			<td><%= $acc->{name} %></td>  		</tr>  		<tr>  			<th scope="row">Mail</th> -			<td>fnord@example.org</td> +			<td><%= $acc->{email} %></td>  		</tr>  		<tr>  			<th scope="row">Registriert am</th> -			<td>01.01.1970 00:00</td> +			<td><%= $acc->{registered_at}->strftime('%d.%m.%Y %H:%M') %></td>  		</tr>  	</table>  </div> | 
