37 lines
1.5 KiB
Ruby
37 lines
1.5 KiB
Ruby
|
# frozen_string_literal: true
|
||
|
|
||
|
class CreateVerificationCodes < Gitlab::Database::Migration[1.0]
|
||
|
include Gitlab::Database::PartitioningMigrationHelpers::TableManagementHelpers
|
||
|
|
||
|
def up
|
||
|
constraint_visitor_id_code = check_constraint_name('verification_codes', 'visitor_id_code', 'max_length')
|
||
|
constraint_code = check_constraint_name('verification_codes', 'code', 'max_length')
|
||
|
constraint_phone = check_constraint_name('verification_codes', 'phone', 'max_length')
|
||
|
|
||
|
execute(<<~SQL)
|
||
|
CREATE TABLE verification_codes (
|
||
|
created_at timestamp with time zone NOT NULL DEFAULT NOW(),
|
||
|
visitor_id_code text,
|
||
|
code text,
|
||
|
phone text,
|
||
|
PRIMARY KEY (created_at, visitor_id_code, code, phone),
|
||
|
CONSTRAINT #{constraint_visitor_id_code} CHECK ((char_length(visitor_id_code) <= 64)),
|
||
|
CONSTRAINT #{constraint_code} CHECK ((char_length(code) <= 8)),
|
||
|
CONSTRAINT #{constraint_phone} CHECK ((char_length(phone) <= 32))
|
||
|
) PARTITION BY RANGE (created_at);
|
||
|
COMMENT ON TABLE verification_codes IS 'JiHu-specific table';
|
||
|
|
||
|
CREATE UNIQUE INDEX index_verification_codes_on_phone_and_visitor_id_code ON verification_codes (visitor_id_code, phone, created_at);
|
||
|
COMMENT ON INDEX index_verification_codes_on_phone_and_visitor_id_code IS 'JiHu-specific index';
|
||
|
SQL
|
||
|
|
||
|
min_date = Date.today - 1.month
|
||
|
max_date = Date.today + 1.month
|
||
|
create_daterange_partitions('verification_codes', 'created_at', min_date, max_date)
|
||
|
end
|
||
|
|
||
|
def down
|
||
|
drop_table :verification_codes
|
||
|
end
|
||
|
end
|