21 lines
1000 B
JavaScript
21 lines
1000 B
JavaScript
exports.up = (pgm) => {
|
|
pgm.createTable('trip_invitations', {
|
|
id: { type: 'uuid', primaryKey: true, default: pgm.func('gen_random_uuid()') },
|
|
trip_id: { type: 'uuid', notNull: true, references: 'trips(id)', onDelete: 'CASCADE' },
|
|
email: { type: 'text', notNull: true },
|
|
invited_by_user_id: { type: 'uuid', notNull: true, references: 'users(id)' },
|
|
token_hash: { type: 'text', notNull: true },
|
|
expires_at: { type: 'timestamptz', notNull: true },
|
|
accepted_at: { type: 'timestamptz' },
|
|
created_at: { type: 'timestamptz', notNull: true, default: pgm.func('now()') },
|
|
updated_at: { type: 'timestamptz', notNull: true, default: pgm.func('now()') },
|
|
});
|
|
pgm.addConstraint('trip_invitations', 'trip_invitations_token_hash_key', 'UNIQUE(token_hash)');
|
|
pgm.createIndex('trip_invitations', 'trip_id');
|
|
pgm.sql('CREATE INDEX trip_invitations_lower_email_idx ON trip_invitations (lower(email))');
|
|
};
|
|
|
|
exports.down = (pgm) => {
|
|
pgm.dropTable('trip_invitations');
|
|
};
|