UNPKG

@replyke/express

Version:

Replyke: Build interactive apps with social features like comments, votes, feeds, user lists, notifications, and more.

91 lines (90 loc) 3.14 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const sequelize_1 = require("sequelize"); const Entity_1 = __importDefault(require("./Entity")); const Comment_1 = __importDefault(require("./Comment")); class Report extends sequelize_1.Model { static initModel(sequelize) { Report.init({ id: { type: sequelize_1.DataTypes.UUID, defaultValue: sequelize_1.DataTypes.UUIDV4, primaryKey: true, allowNull: false, }, projectId: { type: sequelize_1.DataTypes.UUID, allowNull: false, }, targetId: { type: sequelize_1.DataTypes.UUID, allowNull: false, }, reporters: { type: sequelize_1.DataTypes.ARRAY(sequelize_1.DataTypes.UUID), allowNull: false, defaultValue: [], }, targetType: { type: sequelize_1.DataTypes.ENUM("Comment", "Entity"), allowNull: false, }, reason: { type: sequelize_1.DataTypes.STRING(255), allowNull: false, }, details: { type: sequelize_1.DataTypes.TEXT, allowNull: true, }, status: { type: sequelize_1.DataTypes.ENUM("Pending", "On Hold", "Escalated", "Dismissed", "Actioned"), defaultValue: "Pending", allowNull: false, }, actionTaken: { type: sequelize_1.DataTypes.STRING(255), allowNull: true, }, createdAt: { type: sequelize_1.DataTypes.DATE, allowNull: false, }, updatedAt: { type: sequelize_1.DataTypes.DATE, allowNull: false, }, deletedAt: { type: sequelize_1.DataTypes.DATE, allowNull: true, }, }, { sequelize, modelName: "Report", tableName: "Reports", // ✅ Capitalized and plural timestamps: true, paranoid: true, }); } /** * Define associations to other models */ static associate() { Report.belongsTo(Entity_1.default, { foreignKey: "targetId", constraints: false, // Disable FK constraints since it can point to different models scope: { targetType: "Entity" }, // Ensures this association only applies to Entities onDelete: "CASCADE", }); Report.belongsTo(Comment_1.default, { foreignKey: "targetId", constraints: false, scope: { targetType: "Comment" }, // Ensures this association only applies to Comments onDelete: "CASCADE", }); } } exports.default = Report;