49 lines
2.3 KiB
TypeScript
49 lines
2.3 KiB
TypeScript
import Migration from "swaf/db/Migration";
|
|
import ModelFactory from "swaf/db/ModelFactory";
|
|
import MailDomain from "../models/MailDomain";
|
|
import MailIdentity from "../models/MailIdentity";
|
|
import User from "swaf/auth/models/User";
|
|
import UserMailIdentityComponent from "../models/UserMailIdentityComponent";
|
|
|
|
export default class CreateMailTablesMigration extends Migration {
|
|
public async install(): Promise<void> {
|
|
await this.query(`CREATE TABLE mail_domains
|
|
(
|
|
id INT NOT NULL AUTO_INCREMENT,
|
|
name VARCHAR(252) UNIQUE NOT NULL,
|
|
user_id INT,
|
|
PRIMARY KEY (id),
|
|
FOREIGN KEY (user_id) REFERENCES users (id) ON DELETE SET NULL
|
|
)`);
|
|
await this.query(`CREATE TABLE mail_identities
|
|
(
|
|
id INT NOT NULL AUTO_INCREMENT,
|
|
user_id INT NOT NULL,
|
|
mail_domain_id INT NOT NULL,
|
|
name VARCHAR(64) NOT NULL,
|
|
redirects_to VARCHAR(254),
|
|
PRIMARY KEY (id),
|
|
UNIQUE (mail_domain_id, name),
|
|
FOREIGN KEY (user_id) REFERENCES users (id) ON DELETE CASCADE,
|
|
FOREIGN KEY (mail_domain_id) REFERENCES mail_domains (id) ON DELETE CASCADE
|
|
)`);
|
|
await this.query(`ALTER TABLE users
|
|
ADD COLUMN main_mail_identity_id INT,
|
|
ADD FOREIGN KEY main_mail_identity_fk (main_mail_identity_id) REFERENCES mail_identities (id)`);
|
|
}
|
|
|
|
public async rollback(): Promise<void> {
|
|
await this.query(`ALTER TABLE users
|
|
DROP FOREIGN KEY main_mail_identity_fk,
|
|
DROP COLUMN main_mail_identity_id`);
|
|
await this.query(`DROP TABLE IF EXISTS mail_identities, mail_domains`);
|
|
}
|
|
|
|
public registerModels(): void {
|
|
ModelFactory.register(MailDomain);
|
|
ModelFactory.register(MailIdentity);
|
|
ModelFactory.get(User).addComponent(UserMailIdentityComponent);
|
|
}
|
|
|
|
}
|