diff options
author | Daniel Friesel <derf@finalrewind.org> | 2019-03-06 18:11:26 +0100 |
---|---|---|
committer | Daniel Friesel <derf@finalrewind.org> | 2019-03-06 18:11:26 +0100 |
commit | f2efaef2b9e20ee1e89df49e31dd3d8dfaa1384d (patch) | |
tree | 8f8fcd200b150e6f83271dae3c233fa2601ac6d6 | |
parent | 058d93a6fd9f186c46ff8f53a444a914fb226d8a (diff) |
bump DB schema to v2
Add token to "users" (for mail verification etc)
Add new table "pending_mails" (to avoid spamming individual addresses)
-rwxr-xr-x | index.pl | 5 | ||||
-rwxr-xr-x | migrate.pl | 76 |
2 files changed, 78 insertions, 3 deletions
@@ -187,7 +187,7 @@ app->attr( return $self->app->dbh->prepare( qq{ select - id, name, status, is_public, email, + id, name, status, public_level, email, registered_at, last_login, deletion_requested from users where id = ? } @@ -536,8 +536,9 @@ helper 'get_user_id' => sub { id integer primary key, name char(64) not null unique, status int not null, - is_public bool not null, + public_level bool not null, email char(256), + token char(80), password text, registered_at datetime not null, last_login datetime not null, @@ -78,7 +78,7 @@ my @migrations = ( insert into new_users (id, name, status, is_public, registered_at, last_login) values - (?, ?, ?, ?, ?, ?) + (?, ?, ?, ?, ?, ?); } ); $get_users_query->execute; @@ -100,6 +100,80 @@ my @migrations = ( ); $dbh->commit; }, + + # v1 -> v2 + sub { + $dbh->begin_work; + $dbh->do( + qq{ + update schema_version set version = 2; + } + ); + $dbh->do( + qq{ + create table new_users ( + id integer primary key, + name char(64) not null unique, + status int not null, + public_level int not null, + email char(256), + token char(80), + password text, + registered_at datetime not null, + last_login datetime not null, + deletion_requested datetime + ); + } + ); + my $get_users_query = $dbh->prepare( + qq{ + select * from users; + } + ); + + # At this point, some "users" fields were never used -> skip those + # during migration. + my $add_user_query = $dbh->prepare( + qq{ + insert into new_users + (id, name, status, public_level, registered_at, last_login) + values + (?, ?, ?, ?, ?, ?); + } + ); + + $get_users_query->execute; + + while ( my @row = $get_users_query->fetchrow_array ) { + my ( + $id, $name, $status, + $is_public, $email, $password, + $reg_at, $last_login, $del_requested + ) = @row; + $add_user_query->execute( $id, $name, $status, $is_public, $reg_at, + $last_login ); + } + $dbh->do( + qq{ + drop table users; + } + ); + $dbh->do( + qq{ + alter table new_users rename to users; + } + ); + $dbh->do( + qq{ + create table pending_mails ( + email char(256) not null primary key, + num_tries int not null, + last_try datetime not null + ); + } + ); + $dbh->commit; + }, ); my $schema_version = get_schema_version(); |