create table if not exists identity (
       identity_id integer primary key autoincrement
       , identity_public_id uuid
       , data text default '{}'
       , created_at timestamp not null default current_timestamp
       , unique(identity_public_id)
);

create table if not exists email (
       email_id integer primary key autoincrement
       , address text not null
       , unique(address)
);

create table if not exists identity_email (
       identity_email_id integer primary key autoincrement
       , identity_id integer not null references identity(identity_id)
       , email_id integer not null references email(email_id)
       , created_at timestamp not null default current_timestamp
       , deleted_at timestamp not null default current_timestamp
);

create table if not exists email_validation_request (
       email_validation_request_id integer primary key autoincrement
       -- uuid
       , email_validation_request_public_id text not null
       , identity_email_id integer not null references identity_email(identity_email_id)
       , is_validated boolean not null default false
       , created_at timestamp not null default current_timestamp
       , expires_at timestamp
       , revoked_at timestamp
);
