// @flow import path from 'path'; import { DataTypes, sequelize } from '../sequelize'; import { deleteFromS3 } from '../utils/s3'; const Attachment = sequelize.define( 'attachment', { id: { type: DataTypes.UUID, defaultValue: DataTypes.UUIDV4, primaryKey: true, }, key: { type: DataTypes.STRING, allowNull: false, }, url: { type: DataTypes.STRING, allowNull: false, }, contentType: { type: DataTypes.STRING, allowNull: false, }, size: { type: DataTypes.BIGINT, allowNull: false, }, acl: { type: DataTypes.STRING, allowNull: false, defaultValue: 'public-read', validate: { isIn: [['private', 'public-read']], }, }, }, { getterMethods: { name: function() { return path.parse(this.key).base; }, redirectUrl: function() { return `/api/attachments.redirect?id=${this.id}`; }, isPrivate: function() { return this.acl === 'private'; }, }, } ); Attachment.beforeDestroy(async model => { await deleteFromS3(model.key); }); Attachment.associate = models => { Attachment.belongsTo(models.Team); Attachment.belongsTo(models.Document); Attachment.belongsTo(models.User); }; export default Attachment;