/** * Copyright (c) 2026 Niolla * All rights reserved. * * This source code is proprietary and confidential. * Unauthorized copying, modification, distribution, or use * of this file, via any medium, is strictly prohibited. */ // app/models/document/document.model.js module.exports = (sequelize, DataTypes) => { const document = sequelize.define( "Document", { doc_id:{ type: DataTypes.ENUM("DRAFT", "QUEUED", "PROCESSING", "COMPLETED", "FAILED"), primaryKey: true, }, reference_no: { type: DataTypes.STRING, allowNull: false, }, doc_type: { type: DataTypes.STRING, allowNull: true, defaultValue: "N/A" }, data: { type: DataTypes.JSON, allowNull: false, }, status: { type: DataTypes.STRING, allowNull: false, defaultValue: "DRAFT", }, created_by: { type: DataTypes.STRING, allowNull: false }, owner_type: { type: DataTypes.STRING, allowNull: false, defaultValue: "USER" }, owner_id: { type: DataTypes.STRING, allowNull: false }, storage_upload_id: { type: DataTypes.INTEGER, allowNull: true }, job_id: { type: DataTypes.STRING, allowNull: true, unique: true }, generated_at: DataTypes.DATE, failed_at: DataTypes.DATE, failure_code: DataTypes.STRING, version: { type: DataTypes.INTEGER, allowNull: false, defaultValue: 1 }, }, { tableName: "Document", timestamps: true, }, ); document.associate = (models) => { document.belongsTo(models.User, { foreignKey: "created_by", as: "creator", constraints: false }); document.belongsTo(models.Upload, { foreignKey: "storage_upload_id", as: "storageUpload", constraints: false }); }; return document; };