// @flow import crypto from "crypto"; import { DataTypes, sequelize } from "../sequelize"; const NotificationSetting = sequelize.define( "notification_setting", { id: { type: DataTypes.UUID, defaultValue: DataTypes.UUIDV4, primaryKey: true, }, event: { type: DataTypes.STRING, validate: { isIn: [ [ "documents.publish", "documents.update", "collections.create", "emails.onboarding", "emails.features", ], ], }, }, }, { timestamps: true, updatedAt: false, getterMethods: { unsubscribeUrl: function () { const token = NotificationSetting.getUnsubscribeToken(this.userId); return `${process.env.URL}/api/notificationSettings.unsubscribe?token=${token}&id=${this.id}`; }, unsubscribeToken: function () { return NotificationSetting.getUnsubscribeToken(this.userId); }, }, } ); NotificationSetting.getUnsubscribeToken = (userId) => { const hash = crypto.createHash("sha256"); hash.update(`${userId}-${process.env.SECRET_KEY}`); return hash.digest("hex"); }; NotificationSetting.associate = (models) => { NotificationSetting.belongsTo(models.User, { as: "user", foreignKey: "userId", onDelete: "cascade", }); NotificationSetting.belongsTo(models.Team, { as: "team", foreignKey: "teamId", }); }; export default NotificationSetting;