@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
JavaScript
"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;