bump DB schema to v2

Add token to "users" (for mail verification etc)
Add new table "pending_mails" (to avoid spamming individual addresses)
This commit is contained in:
Daniel Friesel 2019-03-06 18:11:26 +01:00
parent 058d93a6fd
commit f2efaef2b9
2 changed files with 78 additions and 3 deletions

View file

@ -187,7 +187,7 @@ app->attr(
return $self->app->dbh->prepare( return $self->app->dbh->prepare(
qq{ qq{
select select
id, name, status, is_public, email, id, name, status, public_level, email,
registered_at, last_login, deletion_requested registered_at, last_login, deletion_requested
from users where id = ? from users where id = ?
} }
@ -536,8 +536,9 @@ helper 'get_user_id' => sub {
id integer primary key, id integer primary key,
name char(64) not null unique, name char(64) not null unique,
status int not null, status int not null,
is_public bool not null, public_level bool not null,
email char(256), email char(256),
token char(80),
password text, password text,
registered_at datetime not null, registered_at datetime not null,
last_login datetime not null, last_login datetime not null,

View file

@ -78,7 +78,7 @@ my @migrations = (
insert into new_users insert into new_users
(id, name, status, is_public, registered_at, last_login) (id, name, status, is_public, registered_at, last_login)
values values
(?, ?, ?, ?, ?, ?) (?, ?, ?, ?, ?, ?);
} }
); );
$get_users_query->execute; $get_users_query->execute;
@ -100,6 +100,80 @@ my @migrations = (
); );
$dbh->commit; $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(); my $schema_version = get_schema_version();